1、第 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 AX, BX+SI+20H (9) MOV BP, CX(10) PUSH DS解:源操作数寻址 目的操作数寻址
2、 EA PA1) 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) MOV AX, ES:BX 带段超越寄存器寻址 寄存器 BX (ES
3、)*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) MOV AX, 1100HBX
4、 (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图 3-1 3-4 已知(AX)=2040H,(DX)=380H,端口(PORT)=(80H)=1FH, (PORT+1)=45H,执行下列指令后,指出结果等于多少?解:(1)OUT DX, AL (0380H)=40H(2)OUT D
5、X, 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 和位置 2 时堆栈区和 SP 指针内容的变化示意图。图中应标出存储单元的实际地址PA。PUSH AXPUSH CX ;位置 1POPF ;位置 2解:已知(SS)=0A2F0H,指令顺序依次编号为、
6、,示意图如图所示:(SS)=0A2F0H0A2FBCH 13H (SP)-4=00BCH (位置 1)F2H0A2FBEH 31H (SP)-2=00BEH (SP)+2=00BCH +0002H=00BEH (位置2)8BHM30100H 12H30101H 34H30102H 56H30103H 78H 31200H 2AH31201H 4CH31202H B7H31203H 65HCPUBX 0100HSI 0002HDS 3000H0A2FC0H (SP)=00C0H3-6 识别下列指令的正确性,对错误的指令,说明出错的原因。(1) MOV DS, 100(2) MOV 1000H,
7、23H(3) MOV 1000H,2000H(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解:
8、(1),不能对段寄存器送立即数(2),存储单元类型不正确(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),目的操作数应是通用寄存器
9、而不能是段寄存器 CS(20),符号名不能作为目的操作数3-7 已知存储器数据段中的数据如图 3-3 所示。阅读下列的两个程序段后,回答:1. 每个程序段的运行结果是什么?2. 两个程序段各占多少字节的内容,执行时间是多少?(1) LES SI, NUM1MOV AX, SIADD AX, 4SIMOV 8SI, AXADD SI, 2MOV AX, SIADC AX, 4SIMOV 8SI, AX(2) MOV AX, NUM1ADD AX, NUM2MOV SUM, AXMOV AX, NUM1+2ADC AX, NUM2+2MOV SUM+2, AX解:1、运行结果如下:(1) 0AC6
10、863A0H (2) 0AC6863A02、 时钟周期 字节数 (1) LES SI, NUM1 2+EA 24MOV AX, SI 10 3ADD AX, 4SI 9+EA 24MOV 8SI, AX 10 3ADD SI, 2 4 34MOV AX, SI 10 3 ADC AX, 4SI 9+EA 24MOV 8SI, AX 10 24(2) MOV AX, NUM1 10 3ADD AX, NUM2 9+EA 24MOV SUM, AX 9+EA 24MOV AX, NUM1+2 9+EA 24ADC AX, NUM2+2 9+EA 24MOV SUM+2, AX 9+EA 24图 3
11、-33-8 已知数据如图 3-3 所示,数据的低位在前,按下列要求编写程序段:1. 完成 NUM1 和单元 NUM2 两个字数据相加,和存放在 NUM1 中。2. 完成 NUM1 单元开始的连续 4 个字节数据相加,和不超过一字节,存放 SUM 单元。3. 完成 NUM1 单元开始的连续 8 个字节数据相加,和 16 位数,放在 SUM 和 SUM+1 两个单元(用循环) 。4. 完成 NUM1 和 NUM2 的双倍精度字数据相加,和放在 NUM2 开始的字单元中。解:1、CLCLEA SI, NUM1MOV AX, WORD PTR SIADD AX, WORD PTR NUM2MOV WO
12、RD PTR SI, AXMOV AX, WORD PTR SI+2ADC AX, WORD PTR NUM2+2MOV WORD PTR SI+2, AXHLT2、LEA SI, NUM1MOV AL, SIADD AL, 1SIADD AL, 2SIADD AL, 3SIMOV SUM, ALMNUM1 48H DS41H16H28HNUM2 58H22H52H84HSUMHLT3、 CLCCLDLEA SI, NUM1MOV AL, SIMOV AH, 0MOV CX, 7XOR BH, BHAGA: MOV BL, 1SIADC AX, BXINC SIDEC CXJNZ AGAMOV
13、 SUM, AXHLT4、LEA SI, NUM1LEA DI, NUM2MOV AX, SIADD AX, DIMOV DI, AXMOV AX, 2SIADC AX, 2DIMOV 2DI, AX3-9 已知的 BCD 数如图 3-3 所示,低位在前,按下列要求编写计算 BCD 数据(为组合型BCD)的程序段。1.完成从 NUM1 单元开始的连续 8 个组合型 BCD 数相加,和(超过一字节)放在 SUM和 SUM+1 两个单元中。2.完成 NUM1 单元和 NUM2 单元的两个 BCD 数相减,其差存入 SUM 单元,差=?,(CF) =?解:1、 CLCCLDLEA SI, NUM1M
14、OV CX, 7MOV AH, 0MOV AL, SIAGA: INC SIADC AL,SIDAALOOP AGAMOV SUM, ALMOV SUM+1, AHHLT2、 CLCMOV AH, 0MOV AL, NUM1SUB AL, NUM2DASMOV SUM, AL差=0F0H=-10H, CF=13-10 写出下列程序段完成的数学计算公式,并画出数据存放的示意图。MOV 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 已知数据如图
15、3-3 所示,低位在前,按下列要求编写程序段1. NUM1 和 NUM2 两个数据相乘(均为无符号数) ,乘积放在 SUM 开始的单元。2. NUM1 和 NUM2 两个字数据相乘(均为无符号数) ,乘积放在 SUM 开始的单元。3. NUM1 单元的字节数据除以 13(均为无符号数) ,商和余数依次放入 SUM 开始的两个字节单元。4. NUM1 单元的字节数据除以 NUM2 字单元的字,商和余数依次放入 SUM 开始的两个字节单元。解:1. 为 32 位32 位,极为 64 位2. MOV AX, NUM1IMUL NUM2 ;积在(DX) (AX) 中MOV SUM, AXXX+2YY+
16、2ZZ+2WW+2MOV SUM+2, DX3. MOV AL, NUM1CBWMOV CL, 0DHDIV CLMOV SUM, ALMOV SUM+1, AH4. MOV AX, NUM1CWDIDIV NUM2MOV SUM, AXMOV 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
17、, 80H解;1. (AL)=01000000B=40H2. (AL)=0DEH3. (AL)=10011110B=9EH4. (DATA)=0A5H5. (AL)=04H6. (AL)=0C5H7. (AL)=3BH8. (AL)=0C4H,OF=0,CF=03-14 用移位循环指令,编写完成以下功能的程序段(结果放回原处)1. 将无符号数 83D 分别乘 2 和处 2.2. 将带符号数-47D 分别乘 2 和除 2.3. 将图 3-3 中 NUM1 双字乘 2 和除 2.4. 将图 3-3 中从 NUM1 开始的 4 个字乘 2.解:1. MOV AL, 53HSHL AL, 1MOV A
18、L, 53HSHR AL, 12. MOV AL, 0D1HSAL AL, 1MOV AL, 0D1HSAR AL, 13. MOV AX, NUM1MOV DX,NUM1+2SHL AX, 1RCL DX, 1MOV AX, NUM1MOV DX, NUM1+2SAR DX, 1RCR 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. 带符号
19、数32+(42)解:1. MOV AL, 58HSUB AL, 32HDASCF=0,ZF=0,SF=0,OF=02. MOV AL, 3AHSUB AL, 3AHCF=0,ZF=1,SF=0,OF=03. 已知 X=79D,Y=57D 则【 X】补=01001111, 【Y】补=11000111所以X补 Y补=X补+-Y补=10001000MOV AL, 79MOV BL, -57SUB AL, BLCF=0,ZF=0,SF=1,OF=14. MOV AL, 0F3HMOV BL, 2AHADD AL, BL或者MOV AL, 0F3HADD AL, 2AHCF=0,ZF=0,SF=0,OF
20、=03-16 用循环移位指令实现下列功能,设(AX)=0C3H1. 设(CL)=8,移位前、后 AX 内容不变2. 设(CL)=9,移位前、后 AX 内容不变3. 将 AX 中高 4 位和低 4 位交换位置4. 将 AX 中高 4 位放到低 4 位上,而高 4 位置 0解:1. MOV CL, 8ROL AL, CL(或者 ROR AL, CL)2. MOV CL, 9RCL AL,CL(或者 RCR AL, CL)3. MOV BX, AXAND AX, 0FF0HXCHG BH, BLMOV CL, 4ROL BH, CLROL BL, CLAND BH,0F0HAND BL, 0FHOR
21、 AX, BX4. 本小题可以多种解法:解 1:5. MOV BX, AXAND AX, 0FF0HXCHG BH, BLMOV CL, 4ROL BH, CLROL BL, CLAND BH,0AND BL, 0FHOR 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,C
22、LOR DL,30H解:完成与、或、移位等逻辑运算,运算结果:(AL)=37H;(DL )=35H3-18 用乘法指令和用传送、移位、相加指令分别实现 Y=10X 的运算,设 X=12H,分别编写这两个程序段。解:(1) MOV AL, XMOV CL, 10NUL CL(2) MOV AL, XSAL AL,1 ;(AL)=2*XMOV BL, AL ;(BL)=X*2SAL AL, 1 ;(AL)=4*XSAL AL, 1 ;(AL)=8*XADD AL, BL ;(AL)=8*X+2*X=10*X3-19 写出下面指令序列完成的数学计算是什么?MOV CL, 3SHL AX, CLSHL BL, CLSHL CX, CLSHL DH, CL解:将一多精度数(6 字节)乘以 83-20 写出下列能代替重复串操作指令完成同样功能的指令序列。(1)REP MOVSW(2)REP CMPSB(3)REP SCASB(4)REP LODSW(5)REP STOSB解:(1) LEA SI, AREA1