1、微计算机原理第2版第三章课后习题答案潘名莲马争丁庆生编著微计算机原理(第2版)第三章课后习题答案-潘名莲-马争-丁庆生-编著第3章 80x86 指令系统3-1 指令由 操作码 字段和 操作数 字段组成。8086的指令长度在16字节 范围。3-2 分别指出下列指令中源操作数和目的操作数的寻址方式。若是存储器寻址,使用表达式表示出EA=? PA=?(1) MOV SI, 2100H (2) MOV CX, DISPBX (3) MOV SI, AX (4) ADC ZX, BXSI (5) AND AX, DX (6) MOV AX, BX+10H(7) MOV AX, ES:BX (8)MOV
2、AX, BX+SI+20H (9) MOV BP, CX(10) PUSH DS解:源操作数寻址目的操作数寻址EAPA1) MOV SI, 2100H 立即数寻址寄存器(2) MOV CX, DISPBX寄存器相对寻址寄存器BX+SISP(DS)*16+(BX+DISP)(3) MOV SI, AX 寄存器寻址寄存器间接SI(DS)*16+(SI)(4) ADC ZX, BXSI 基址变址寻址寄存器BX+SI(DS)*16+(BX)+(SI) (5) AND AX, DX 寄存器寻址寄存器(6) MOV AX, BX+10H寄存器相对寻址寄存器BX+DISP(DS)*16+(BX)+10H(7
3、) MOV AX, ES:BX带段超越寄存器寻址寄存器BX(ES)*16+(BX)(8)MOV AX, BX+SI+20H相对基址变址寻址寄存器BX+SI+20H(DS)*16+(BX)+(SI)+20H(9) MOV BP, CX寄存器寻址寄存器间接BP(SS)*16+(BP)(10) PUSH DS固定寻址寄存器SP(SS)*16+(SP)3-3 已知8086中一些寄存器的内容和一些存储器单元的内容如图3-1所示,试指出下列各条指令执行后,AX中的内容。(1) MOV AX, 2010H (2) MOV AX, BX (3) MOV AX, 1200H(4) MOV AX, BX (5)
4、MOV AX, 1100HBX (6) MOV AX, BXSI(7) MOV AX, 1100HBX+SI (8) MOVLEA AX, SI 解:(1)(AX)=2010H (2)(AX)=0100H (3)(AX)=4C2AH (4)(AX)=3412H (5)(AX)=4C2AH (6)(AX)=7856H (7)(AX)=65B7H (8)(AX)=0002H M30100H12H30101H34H30102H56H30103H78H31200H2AH31201H4CH31202HB7H31203H65HCPUBX0100HSI0002HDS3000H 图3-1 3-4 已知(AX)
5、=2040H,(DX)=380H,端口(PORT)=(80H)=1FH,(PORT+1)=45H,执行下列指令后,指出结果等于多少?解:(1)OUT DX, AL (0380H)=40H(2)OUT DX, AX (380H)=40H (381h)=20H(3)IN AL, PORT (AL)=1FH (4)IN AX, 80H (AX)=451FH(5)OUT PORT1, AL (PORT1)=40H(6)OUT PORT1, AX (PORT1)=2040H3-5 已知:(SS)=0A2F0H,(SP)=00C0H,(AX)=8B31H,(CX)=0F213,试画出下列指令执行到位置1和
6、位置2时堆栈区和SP指针内容的变化示意图。图中应标出存储单元的实际地址PA。PUSH AXPUSH CX ;位置1POPF ;位置2解:已知(SS)=0A2F0H,指令顺序依次编号为、,示意图如图所示: (SS)=0A2F0H 0A2FBCH13H(SP)-4=00BCH (位置1) F2H0A2FBEH31H(SP)-2=00BEH (SP)+2=00BCH +0002H=00BEH (位置2)8BH0A2FC0H(SP)=00C0H 3-6 识别下列指令的正确性,对错误的指令,说明出错的原因。(1) MOV DS, 100(2) MOV 1000H, 23H(3) MOV 1000H,20
7、00H(4) MOV DATA, 1133H(5) MOV 1020H, DX(6) MOV AX, 0100H+BX+BP(7) MOV CS, AX(8) PUSH AL(9) PUSH WORD PTRSI(10) IN AL, 80H(11) OUT CX, AL(12) IN AX, 380H(13) MOV CL, 3300H(14) MOV AX, 2100HBP(15) MOV DS, ES(16) MOV IP, 2000H(17) PUSH CS(18) POP CS(19) LDS CS, BX(20) MOV GAMMA, CS解:(1),不能对段寄存器送立即数(2),
8、存储单元类型不正确(3),MOV 不能实现两个存储单元间 直接传送(4),段名不能作目的操作数(5),立即数不能作目的操作数(6),基址寄存器BX和BP只能使用其 中一个(7),CS不能用作目的操作数(8),堆栈操作作为字操作AL应改为 AX(9)(10),80H为输入端口号不加方括号(11),应输出到端口而不是通用寄存器(12),用DX做间址寄存器380H应存 DX(13),类型不匹配(14)(15),两个段寄存器间不能直接传送(16),IP不能直接用作目的操作数(17)(18),CS不能做目的操作数(19),目的操作数应是通用寄存器而不 能是段寄存器CS(20),符号名不能作为目的操作数3
9、-7 已知存储器数据段中的数据如图3-3所示。阅读下列的两个程序段后,回答:1. 每个程序段的运行结果是什么?2. 两个程序段各占多少字节的内容,执行时间是多少?(1) LES SI, NUM1 MOV AX, SI ADD AX, 4SI MOV 8SI, AX ADD SI, 2 MOV AX, SI ADC AX, 4SI MOV 8SI, AX(2) MOV AX, NUM1 ADD AX, NUM2 MOV SUM, AX MOV AX, NUM1+2 ADC AX, NUM2+2 MOV SUM+2, AX解:1、运行结果如下:(1) 0AC6863A0H (2) 0AC6863A
10、02、 时钟周期 字节数 (1) LES SI, NUM1 2+EA 24 MOV AX, SI 10 3 ADD AX, 4SI 9+EA 24MNUM148HDS41H16H28HNUM258H22H52H84HSUM MOV 8SI, AX 10 3 ADD SI, 2 4 34 MOV AX, SI 10 3 ADC AX, 4SI 9+EA 24 MOV 8SI, AX 10 24 (2) MOV AX, NUM1 10 3 ADD AX, NUM2 9+EA 24 MOV SUM, AX 9+EA 24 MOV AX, NUM1+2 9+EA 24 ADC AX, NUM2+2 9
11、+EA 24 MOV SUM+2, AX 9+EA 24 图3-33-8 已知数据如图3-3所示,数据的低位在前,按下列要求编写程序段:1. 完成NUM1和单元NUM2两个字数据相加,和存放在NUM1中。2. 完成NUM1单元开始的连续4个字节数据相加,和不超过一字节,存放SUM单元。3. 完成NUM1单元开始的连续8个字节数据相加,和16位数,放在SUM和SUM+1两个单元(用循环)。4. 完成NUM1和NUM2的双倍精度字数据相加,和放在NUM2开始的字单元中。解:1、CLC LEA SI, NUM1 MOV AX, WORD PTR SI ADD AX, WORD PTR NUM2 MO
12、V WORD PTR SI, AX MOV AX, WORD PTR SI+2 ADC AX, WORD PTR NUM2+2 MOV WORD PTR SI+2, AX HLT2、LEA SI, NUM1 MOV AL, SI ADD AL, 1SI ADD AL, 2SI ADD AL, 3SI MOV SUM, AL HLT 3、 CLC CLD LEA SI, NUM1 MOV AL, SI MOV AH, 0 MOV CX, 7 XOR BH, BHAGA: MOV BL, 1SI ADC AX, BX INC SI DEC CX JNZ AGA MOV SUM, AX HLT4、L
13、EA SI, NUM1 LEA DI, NUM2 MOV AX, SI ADD AX, DI MOV DI, AX MOV AX, 2SI ADC AX, 2DI MOV 2DI, AX3-9 已知的BCD数如图3-3所示,低位在前,按下列要求编写计算BCD数据(为组合型BCD)的程序段。1.完成从NUM1单元开始的连续8个组合型BCD数相加,和(超过一字节)放在SUM和SUM+1两个单元中。2.完成NUM1单元和NUM2单元的两个BCD数相减,其差存入SUM单元,差=?,(CF)=?解:1、 CLC CLD LEA SI, NUM1 MOV CX, 7 MOV AH, 0 MOV AL, S
14、I AGA: INC SI ADC AL,SI DAA LOOP AGA MOV SUM, AL MOV SUM+1, AH HLT2、 CLCMOV AH, 0MOV AL, NUM1SUB AL, NUM2DASMOV SUM, AL差=0F0H=-10H, CF=13-10 写出下列程序段完成的数学计算公式,并画出数据存放的示意图。XX+2YY+2ZZ+2WW+2MOV AX, XMOV DX, X+2ADD AX, YADC DX, Y+2SUB AX, ZSBB DX, Z+2MOV W, AXMOV W+2, DX解:W=X+Y-Z,数据存放如图所示:3-11 已知数据如图3-3所
15、示,低位在前,按下列要求编写程序段1. NUM1和NUM2两个数据相乘(均为无符号数),乘积放在SUM开始的单元。2. NUM1和NUM2两个字数据相乘(均为无符号数),乘积放在SUM开始的单元。3. NUM1单元的字节数据除以13(均为无符号数),商和余数依次放入SUM开始的两个字节单元。4. NUM1单元的字节数据除以NUM2字单元的字,商和余数依次放入SUM开始的两个字节单元。解:1. 为32位32位,极为64位2. MOV AX, NUM1 IMUL NUM2 ;积在(DX) (AX) 中 MOV SUM, AX MOV SUM+2, DX 3. MOV AL, NUM1 CBW MO
16、V CL, 0DH DIV CL MOV SUM, AL MOV SUM+1, AH4. MOV AX, NUM1 CWD IDIV NUM2 MOV SUM, AX MOV SUM+2, DX3-12 (L略)3-13 已知(AL)=0C4H,DATA单元中的内容为5AH,写出下列每条指令单独执行后的结果。1. AND AL, DATA2. OR AL,DATA3. XOR AL, DATA4. NOT DATA 5. AND AL, 0FH6. OR AL, 01H7. XOR AL, 0FFH8. TEST AL, 80H解;1. (AL)=01000000B=40H2. (AL)=0D
17、EH3. (AL)=10011110B=9EH4. (DATA)=0A5H5. (AL)=04H6. (AL)=0C5H7. (AL)=3BH8. (AL)=0C4H,OF=0,CF=0 3-14 用移位循环指令,编写完成以下功能的程序段(结果放回原处)1. 将无符号数83D分别乘2和处2.2. 将带符号数-47D分别乘2和除2.3. 将图3-3中NUM1双字乘2和除2.4. 将图3-3中从NUM1开始的4个字乘2.解:1. MOV AL, 53H SHL AL, 1 MOV AL, 53H SHR AL, 12. MOV AL, 0D1H SAL AL, 1 MOV AL, 0D1H SAR
18、 AL, 13. MOV AX, NUM1 MOV DX,NUM1+2 SHL AX, 1 RCL DX, 1 MOV AX, NUM1 MOV DX, NUM1+2 SAR DX, 1 RCR AX, 14. SAL NUM1, 1RCL NUM1+2, 1RCL NUM1+4, 1RCL NUM1+6, 13-15 编写完成以下功能的程序段,并指出运行后,其标志CF、ZF、SF和OF的状态是什么?1. BCD数 58322. 无符号数 3AH3AH3. 带符号数 79(57)4. 带符号数32+(42)解:1. MOV AL, 58HSUB AL, 32HDASCF=0,ZF=0,SF=0
19、,OF=02. MOV AL, 3AH SUB AL, 3AH CF=0,ZF=1,SF=0,OF=03. 已知X=79D,Y=57D 则【X】补=01001111,【Y】补=11000111 所以X补Y补=X补+-Y补=10001000 MOV AL, 79 MOV BL, -57 SUB AL, BLCF=0,ZF=0,SF=1,OF=14. MOV AL, 0F3H MOV BL, 2AH ADD AL, BL或者 MOV AL, 0F3H ADD AL, 2AHCF=0,ZF=0,SF=0,OF=03-16 用循环移位指令实现下列功能,设(AX)=0C3H1. 设(CL)=8,移位前、
20、后AX内容不变2. 设(CL)=9,移位前、后AX内容不变3. 将AX中高4位和低4位交换位置4. 将AX中高4位放到低4位上,而高4位置0解:1. MOV CL, 8 ROL AL, CL(或者ROR AL, CL) 2. MOV CL, 9 RCL AL,CL(或者RCR AL, CL) 3. MOV BX, AX AND AX, 0FF0H XCHG BH, BL MOV CL, 4 ROL BH, CL ROL BL, CL AND BH,0F0H AND BL, 0FH OR AX, BX 4. 本小题可以多种解法:解1:5. MOV BX, AX AND AX, 0FF0H XCH
21、G BH, BL MOV CL, 4 ROL BH, CL ROL BL, CL AND BH,0 AND BL, 0FH OR AX, BX解2:MOV BX, AXXCHG AH, ALMOV CL, 4 ROR AX, CLSHR AH, CLAND AL, 0FHAND BL, 0FOHOR AL, BL3-17 写出下列程序段执行后的结果:(AL)=?(DL)=?完成的是什么功能?MOV CL,4MOV AL,87MOV DL, ALMOV AL,0FHOR AL,30HSHR DL,CLOR DL,30H解:完成与、或、移位等逻辑运算,运算结果:(AL)=37H;(DL)=35H3
22、-18 用乘法指令和用传送、移位、相加指令分别实现Y=10X的运算,设X=12H,分别编写这两个程序段。解:(1) MOV AL, X MOV CL, 10 NUL CL(2) MOV AL, X SAL AL,1 ;(AL)=2*X MOV BL, AL ;(BL)=X*2 SAL AL, 1 ;(AL)=4*X SAL AL, 1 ;(AL)=8*X ADD AL, BL ;(AL)=8*X+2*X=10*X3-19 写出下面指令序列完成的数学计算是什么?MOV CL, 3SHL AX, CLSHL BL, CLSHL CX, CLSHL DH, CL解:将一多精度数(6字节)乘以83-2
23、0 写出下列能代替重复串操作指令完成同样功能的指令序列。(1)REP MOVSW(2)REP CMPSB(3)REP SCASB(4)REP LODSW(5)REP STOSB解:(1) LEA SI, AREA1 LEA DI, AREA2 MOV CX, N CLDAGA: MOV AX, DS:SI MOV ES:DI, AX INC SI INC SIINC DIINC DIDEC CXJNZ AGARET(2) LEA SI, VAR1 LEA DI, VAR2 MOV CX, N CLDNEXT: CMPSB JNZ FIN LOOP NEXT RET(3) MOV DI, OFF
24、SET COMMAND MOV AL, MOV CX, N CLDNEXT: SCASB JZ FOUND LOOP NEXT RET(4) MOV SI, OFFSET BUF MOV CX, N CLDNEXT: LODSW MOV RES, AX LOOP NEXT RET(5) MOV DI,OFFSET BUF MOV CX, N CLDNEXT: STOSB DEC CX JNZ NEXT RET 3-21 欲将数据段中自AREA1中的100个字数据搬到附加段中以AREA2开始的区中,用下面的3种传送指令编写程序段:1. 用MOV指令;2. 用基本串传送指令;3. 用重复串传送指令
25、解: 1. LEA SI, AREA1 LEA DI, AREA2 MOV CX, 100 CLDAGAIN: MOV AX, SI MOV ES:DI, AX INC SI INC SI INC DI INC DI DEC CX JNZ AGAIN RET2. MOV SI, OFFSET AREA1 MOV DI, OFFSET AREA2 MOV CX, 100 CLDAGAIN: MOVS AREA2, AREA1 DEC CX JNZ AGAIN RET3. MOV SI, OFFSET AREA1 MOV DI, OFFSET AREAA2 CLD MOV CX, 100 REP
26、MOVSB RET3-22 假定在数据段中已知字符串和未知字符串的定义如下:STRING1 DB MESSAGE AND PROCCESSSTRING2 DB 20 DUP(?)用串操作指令编写完成下列功能的程序段(设DS和ES重叠);1. 从左到右把STRING1中的字符串搬到STRING2中;2. 从右到左把STRING1中的字符串搬到STRING2中;3. 搜索STRING1字符串中是否有空格。如有,记下第一个空格的地址,并放入BX中;4. 比较STRING1和STRING2字符串是否相同。解:1. MOV SI, OFFSET STRING1 MOV DI, OFFSET STRING
27、2 MOV CX, 20 ;共20个字符 CLD ;从左到右就是增址方向,设置DF0 REP MOVS STRING2, STRING12. MOV SI, OFFSET STRING1+13H MOV DI, OFFSET STRING2+13H MOV CX, 20 STD ;从右到左为减址方向,设置DF0 REP MOVS STRING2+13H, STRING1+13H3. MOV DI, OFFSET STRING1 MOV CX, 20 MOV AL, 20H ;空格字符的ASCII码 CLD REPNZ SCASB JZ FOUND MOV DI, 0 JMP DONEFOUND; DEC DI ;因SCASB的功能是:(1)(AL)DI (2) DIDI+1 MOV BX, DIDENE: HLT 4. MOV SI, OFFSET STRING1 MOV DI, OFFSET STRING2 MOV CX, 20 CLD REPZ CMPSB JNZ UMMAT MOV AL, 0 JMP OUTPUTUMMAT: MOV AL, 0FFHOUTPUT: MOV RESULT, AL RET 3-23 下面两条短转移指令的转移地址ADDR1和ADDR2分别是多少(用十六进制表示)?1
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1