2022年2022年汇编语言程序设计习题解答 .pdf
《2022年2022年汇编语言程序设计习题解答 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年汇编语言程序设计习题解答 .pdf(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、汇编语言程序设计习题解答1 指出下列指令的错误: (1)MOV AH, BX (2)MOV BX,SI (3)MOV AX, SIDI (4)MOV MYDATBXSI,ES :AX (5)MOV BYTE PTRBX,1000 (6)MOV BX, OFFSET MYDATSI (7)MOV CS, AX 答: (1)MOV AH ,BX AH 为八位, BX为 16 位( 2)MOV BX ,SI 两个操作数不能都是存储单元( 3)MOV AX , SIDI 一个操作数中不能用两个变址寄存器( 4)MOV MYDAT BXSI ,E8:AX ES ES 后应为一个变址寄存器,表示偏移量(
2、5)MOV BYTE PTRBX,1000 BYTE 说明时 BX进行字节操作。而 1000 为字( 6)MOV BX ,OFFSET MYDAT SI OFFSET 为取某个地址的偏移量,故后面不应用SI ,而应是一个符号地址。(7)MOV 是数据寻址,不应用程序段寄存器CS. 2下面哪些指令是非法的?( 假设 OPl,OP2是已经用DB定义的变量 ) (1)CMP l5, BX (2)CMP OPl,25 (3)CMP OPl,OP2 (4)CMP AX, OPl 答: (1) CMP 15,BX 非法,两个操作数不能一个为字,一个为字节( 2)CMP OP1 ,25 正确( 3)CMP
3、OP1 ,OP2 正确( 4)CMP AX, OP1 非法,两操作数不能一个为字,一个为字节3假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是非法的?它们的错误是什么? (1)MOV BP, AL (2)MOV WORD_OPBX+4*3DI,SP (3)MOV WORD_OPl ,WORD_OP2 (4)MOV AX, WORD_OPlDX (5)MOV SAVE_WORD , DS (6)MOV SP, SS :DATA_WORDBXSI (7)MOV BXSI,2 (8)MOV AX ,WORD_ OPl+WORD_OP2 (9)MOV AX ,WORD_ OPl
4、-WORD_OP2+100 (10)MOV WORD_ OPl,WORD_ OPl-WORD_OP2 答: (1)MOV BP ,AL 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 21 页 - - - - - - - - - 非法, BP为 16 位 AL为八位(2)MOV WORD_OPBX+4*3DI ,SP 正确(3)MOV WORD_OP1 ,WORD_OP2 非法,两个操作数不能都是变量(4)MOV AX , WORD_OP1DX 非法, DX 应改为 BX
5、 ,BP ,SI 或DI ,则为寄存器相对寻址。(5)MOV SAVE_WORD ,DS 非法,未指明数据段地址DS的偏移量(6)MOV SP ,SS:DATA_WORDBXSI 非法, SS与BX ,SI 不匹配, SS的偏移量用SP (7)MOV BXSI ,2 正确(8) MOV AX,WORD_OP1+WORD_OP2 正确(9) MOV AX, WORD_OP1WORD_OP2+100 正确(10)MOV WORD_OP1,WORD_OP1WORD_OP2 非法4假设 VAR1和 VAR2为字变量, LAB为标号,试指出下列指令的错误之处: (1)ADD VAR1,VAR2 (2)S
6、UB AL, VAR1 (3)JMP LABSI (4)JNZ VARl (5)JMP NEAR LAB 答: (1) ADD VAR1,VAR2 ADD指令中,目的操作数必须是寄存器或存储单元。( 2)SUB AL, VAR1 AL为 8 位的,而 VAR为字变量16 位( 3)JMP LAB SI 格式不对, LAB处应为一偏移量,而不是标号。( 4)JNZ VAR1 JNZ 为非零转移,应转移到某个程序段,故后面应为一个标号。( 5)JMP NEAR LAB 段内直接转移,格式应为 JMP NEAR PTR LAB 5画图说明下列语句所分配的存储空间及初始化的数据值。BYTE-VAR D
7、B BYTE , 12,-12H,3DUP (0,?, 2DUP (1,2) ,?)WORD-VAR DW 5DUP(0,1,2),?,-5, BY , TE, 256H 解答: (1)BYTE-VAR (2)WORD-VAR 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 21 页 - - - - - - - - - B Y T E 12 -12H 6试列出各种方法,使汇编程序把5150H 存入一个存储器字中。解答: (1) DW 5150H; ( 2)DB 50H,5
8、1H; (3)DB PQ 7请设置一个数据段DATASG ,其中定义以下字符变量或数据变量。FLD1B为字符串变量: personal computer ;FLD2B为十进制数字节变量:32;FLD3B为十六进制数字节变量:20;FLD4B为二进制数字节变量:01011001;FLD5B为数字的 ASCII 字符字节变量:32654;FLD6B为 10 个零的字节变量;FLD7B为零件名( ASCII 码)及其数量(十进制数)的表格:PART1 20 PART2 50 PART3 14 FLD1W为十六进制数字变量:FFF0;FLD2W为二进制数字变量:01011001;FLD3W为( 7)中
9、零件表的地址变量; 42 59 54 45 OC F4H 0 - 1 2 1 2 - 0 - 1 2 1 2 - 0 - 1 2 1 2 - 00 00 01 00 02 00 00 00 01 00 02 00 - - FB FF 59 42 45 54 56 02 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 21 页 - - - - - - - - - FLD4W为包括 5 个十进制数的字变量:5,6,7,8, 9;FLD5W为 5 个零的字变量;FLD6W为本段
10、中字数据变量和字节数据变量之间的地址差。解答: DATASG SEGMENT FLD1B DB personal computerFLD2B DB 32D FLD3B DB 14H FLD4B DB 01011001B FLD5B DB 32654 FLD6B DB 10DUP (0)FLD7B DB PART1 ,20D, PART2 ,50D, PART3 ,14D FLD1W DW 0FFFOH FLD2W DW 01011001B FLD3W DW FLD7B FLD4W DW 5,6,7,8, 9 FLD5W DW 5DUP (0)FLD6W DW FLD1W-FLD1B DATAS
11、G ENDS 8假设程序中的数据定义如下:PARTNO DW ?PNAME DB 16 DUP (?)COUNT DD ?PLENTH EQU $-PARTNIO 问 PLENTH 的值为多少?它表示什么意义?解答: PLENTH 代表着 PARTNO 至 PLENTH 的地址差,也即三段数据的字节数PLENTH=22 。9有符号定义语句如下:BUFF DB 1,2,3, 123EBUFF DB 0 L EQU EBUFF-BUFF 问 L 的值为多少?解答: L=6 10假设程序中的数据定义如下:LNAME DB 30 DUP(?)ADDRESS DB 30 DUP (?)CITY DB 1
12、5 DUP(?)CODE-LIST DB 1, 7,8,3,2 (1) 用一条 MOVE 指令将 LNAME 的偏移地址放入AX 。(2) 用一条指令将CODE-LIST的头两个字节的内容放入SI。(3) 写一条伪操作使CODE-LENGTH 的值等于CODE-LIST域的实际长度。解答: (1)MOVE AX ,0FFSET LNAME ; (2)MOVE SI,0701H;(3)DE-LENGTH EQU LENGTH CODE-LIST。11试写出一个完整的数据段DATA_SEG,它把整数5 赋与一个字节,并把整数-1 ,0,2,5和 4 放在 10 字数组 DATA_LIST的头 5
13、个单元中。然后写出完整的代码段,其功能为:把 DATA-名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 21 页 - - - - - - - - - _LIST 中头 5 个数中的最大值和最小值分别存入MAX 和 MIN单元中。解答: DATA_SEG SEGMENT LENGTH DB 5 DATA_LIST DW 1,0,2,5,4,5DUP(?) MAX DW ? MIN DW ? DATA_SEG ENDS CODE_SEG SEGMENT ASSUME CS:C
14、ODE_SEG,DS:DATA_SEG START:MOV AX,DATA_SEG MOV DS,AX MOV SI,OFFSET DATA_LIST MOV AX,SI MOV BX,SI MOV CX,LENGTH XOR AX,AX XOR BX,BX CLC AGAIN:CMP AX,SI JG NEXT1 MOV AX,SI NEXT1:CMP BX,SI JNG NEXT2 MOV BX,SI NEXT2:JNZ AGAIN MOV MAX,AX MOV MIN,BX CODE ENDS END START 12给出等值语句如下:ALPHA EQU 100 BETA EQU 25
15、GAMMA EQU 2 下列表达式的值是多少?(1)ALPHA*100+BETA (2)ALPHA MOD GAMMA+BETA (3) (ALPHA+2 )*BETA-2 (4) (BETA/3)MOD5 (5) (ALPHA+3 )* (BETA MOD GAMMA)(6)ALPHA GE GAMMA (7)BETA AND 7 (8)GAMMA OR 3 解答:(1)=10025; (2)=19; ( 3)=2548; (4)=3; (5)=103; (6)=0; (7)=01H; ( 8)=03H。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - -
16、 - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 21 页 - - - - - - - - - 13对于下面的数据定义,三条指令分别汇编成什么?TABLEA DW 10 DUP (?)TABLEB DB 10 DUP (?)TABLEC DB 1234 MOVE AX,LENGTH TABLEA MOVE BL ,LENGTH TABLEB MOVE CL ,LENGTH TABLEC 解答:MOVE AX ,10 MOVE BL ,10 MOVE CL ,1 14对于下面的数据定义,各条MOVE 指令单独执行后,有关寄存器的内容是什么?FLDB DB TAB
17、LEA DW 20DUP(?)TABLEB DB ABCD MOVE AX ,TYPE FLDB MOVE AX ,TYPE TABLEA MOVE CX ,LENGTH TABLEA MOVE DX ,SIZE TABLEA MOVE CX ,LENGTH TABLEB 解答:AX=0001H AX=0002H CX=0014H DX=0028H CX=0001H 。15指出下列伪操作表达方式的错误,并改正之。 (1)DATA_SEG SEG (2)SEGMENT CODE (3)MYDATA SEGMENTDATA ENDS (4)MAIN_PROC PROC FAR END MAIN_P
18、ROC MAIN_PROC ENDP 答: (1) DATA-SEG SEGMENT (2) CODE SEGMENT PARA CODE (3) /DATA错。定义数据段应在代码段中用ASSUME。 ENDS 缺少 MYDATA 。 (4) 多余 END ,MAIN-PROC 应删除。16按下面的要求写出程序的框架 (1)数据段的位置从0E000H开始, 数据段中定义个l00 字节的数组, 其类型属性既是名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 21 页 - -
19、- - - - - - - 字又是字节; (2)堆栈段从小段开始,段组名为STACK , (3)代码段中指定段寄存器,指定主程序从1000H开始,给有关段寄存器赋值; (4)程序结束。答: DATA-SEG SEGMENT ORG 0E000H BYTE-ARRAY LABLE BYTE WORD-ARRAY DW 50 DUP(?) DATA-SEG ENDS STACK-SEG SEGMENT PARA STACK STACK-SEG ENDS CODE-SEG SEGMENT ASSUME CS:CODE-SEG,DS:DATA-SEG,SS:STACK-SEG ORG 1000H ST
20、ART: MOV AX ,DATA-SEG MOV DS ,AX MOV AX ,STACK-SEG MOV SS ,AX . . CODE-SEG ENDS END START 17假设在数据段X_SEG 、附加段 Y_SEG 和堆栈段Z_SEG中分别定义了字变量X,Y和 Z。试编制一完整的程序计算 XX+Y+Z 答: X-SEG SEGMENT X DW ? X-SEG ENDS Z-SEG SEGMENT Z DW ? Z-SEG EMDS Y-SEG SEGMENT Y DW ? Y-SEG ENDS CODE SEGMENT MAIN PROC FAR ASSUME ES:Y-SEG
21、,CS:CODE,DS:X-SEG,SS:Z-SEG START PUSH DS SUB AX AX PUSH AX MOV AX ,Y_SEG MOV ES ,AX MOV AX,Z_SEG 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 21 页 - - - - - - - - - MOV SS,AX MOV AX,X_SEG MOV DS,AX MOV AX,DS:X MOV BX,ES:Y ADD AX BX JO OVERFLOW MOV BX ,SS:Z AD
22、D AX,BX JO OVERFLOW MOV DS:X,AX OVERFLOW :RET MAIN ENDP CODE ENDS END START 18 写一个完整的程序放在代码段C_SEG中,要求把数据段D_SEG中的 AUGEND 和附加段E_SEG中的 ADDEND 相加,并把结果存放在D_SEG 段中的 SUM 中。其中 AUGEND、 ADDEND 和 SUM均为双精度数,AUGEND 赋值为 99251,ADDEND 赋值为 -15962 。解答: TITLE SUM D_SEG SEGMENT AUGW LABEL WORD AUGEND DD 99251 SUM DW 2
23、DUPL (?) D_SEG ENDS E_SEG SEGMENT ADDW LABEL WORD ADDEND DD -15962 E_SEG ENDS C_SEG SEGMENT ASSUME DS :D_SEG ,ES:E_SEG ,CS:C-SEG MAIN PROC FAR START :PUSH DS MOVE AX,0 PUSH AX MOV AX,D_SEG MOV DS ,AX MOV AX,E_SEG MOV ES,AX ADDT :MOV AX,AUGW MOV BX,AUGW+2 ADD AX, ES : ADDW ADC BX, ES: ADDW+2 MOV SUM
24、,AX MOV SUM+2,BX 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 21 页 - - - - - - - - - RET MAIN ENDP C_SEG ENDS END START 19读下面程序段,请问:在什么情况下,本段程序的执行结果是AH 0? BEGIN: IN AL,5FH TEST AL,80H JZ BRCHl MOV AH,0 JMP STOP BRCHl: MOV AH , 0FFH STOP : HLT 解答: AL中的最高位为1 时。
25、20读程序: START: IN AL,20H MOV BL,AL IN AL, 30H MOV CL,AL MOV AX,0 ADLOP: ADD AL,BL ADC AH,0 DEC CL JNZ ADLOP HLT 请问 : (1)本程序实现什么功能? (2)结果在哪里 ? 解答:完成20H*30H,结果在 AX中。21请编一程序段完成AX*l0 的任务 ( 要求不准用乘法指令做) 。解答: MOV BX,AX MOV CL 2 SHL AX, CL ADD AX,BX SHL AX ,1 22 编程序使: (1)AX寄存器低4 位清零。 (2)BX寄存器低4 位置“ 1” 。 (3)C
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年汇编语言程序设计习题解答 2022 汇编语言 程序设计 习题 解答
限制150内