微机原理第3章 指令系统3-2(1)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
24
例3-39 SUB AX,BX ;AX←AX-BX SUB DX,1850H ;DX←DX-1850H SUB BL,[BX] ;BL-DS:(BX)→BL 例3-40 SBB AL,BL
;AL←AL-BL-CF
25
例3-41 DEC BX ;BX←BX-1 DEC WORD PTR[BP] ;堆栈段中位于[BP]偏置处的的字减1。
执行指令 LEA BX,[SI]后,BX=1000H
执行指令 MOV BX,[SI]后,BX=1234H 有时,LEA指令也可用取偏移地址的MOV指令代。 例3-27 LEA BX,TABLE
MOV BX,OFFSET TABLE
但有时,必须用LEA指令,不能用MOV取代。
11
例3-28 某数组含20个元素,每 个元素占一个字节,序号为0~19。 设DI指向数组开始,如要把序 号6的元素的偏移地址送到BX中, 不能直接用MOV指令实现。 LEA BX,6[DI]
STRING
4
例3-17 MOV DX,OFFSET ARRAY OFFSET为属性操作符,表示把 ARRAY的地址值→DX中。DX=0005 例3-18 MOV AL,AREA1 ;AL←AREA1的内容14H MOV AREA2,AL ;0002H单元←14H 例3-19 MOV AX,TABLE[BP][DI] 将地址为16×SS+BP+DI+TABLE的 字存储单元中内容送进AX。
7
例3-22 若十进制数字0~9的LED七段码对照如表34所示。试用XLAT指令求数字5的七段码值。
十进制数字 七段显示码 十进制数字 七段显示码 0 1 2 3 4 40H 79H 24H 30H 19H 5 6 7 8 9 12H 02H 78H 00H 18H
TABLE DB 40H,79H,24H,30H,19H DB 12H,02H,78H,00H,18H ….. MOV AL,0 MOV BX,OFFSET TABLE XLAT TABLE
8
例3-23 下面是IN指令的具体例子。 IN AL,0F1H ;AL←F1H端口读一个字节 IN AX,80H ;AL←80H口的内容 ;AH←81H口的内容 MOV DX,310H ;端口地址310H→DX中 IN AL,DX ;AL←310H端口内容 例3-24 IN指令中也可以使用符号表示地址。 ATOD EQU 54H ;将A/D地址设为54H IN AL,ATOD;将54H→AL中
2000:0000 2000:0000 2000:0000 2000:0000
2000:003C
FE 25
←SP
FE 25 2000:003E 20
2000:003E
20
←SP
20
←SP
31
2000:0040 ←SP 2000:0040 2000:0040
31
2000:0040
31
6
例3-21
XCHG AX,[BX+200H]
21
例3-36 求ASCII码9(39H)与5(35H)之和。设AH=0, 则运算过程如下:
ADD AL,BL ; 0011 1001….9 ; + 0011 0101….5 ;--------------------AAA ; 0110 1110…低4位 >9 ; 0000 0110…+6调整 ;--------------------; 0111 0100 ; ∧ 0000 1111…清高4位 ;---------------------; 0000 0100….AL=4 ;CF=1,AF=1,AH=1,结果AX=0104H,非压缩BCD14 ;在AAA后面加 OR AX,3030H,则:ASCII码3134H。
103
103
溢出
源自文库
运算后标志位ZF=0,AF=1,CF=0,SF=0,PF=0, OF=1。
29
例3-45 若AL=BCD 3,CL=BCD 8,求两数之差。 显然结果为BCD 5,但有借位,运算过程如下:
SUB AL,CL ; 0000 0011….3 ; - 0000 1000….8 ;--------------------AAS ; 1111 1011….低4位 >9 ; - 0000 0110…减6调整 ;--------------------; 1111 0101 ; ∧ 0000 1111…清高4位 ;---------------------; 0000 0101….AL=5 ;结果为5,CF=1,表示有借位
16
表3-6 算术运算指令
加法 ADD ADC INC AAA 加法 带进位的加法 增量 加法的ASCII调整 SUB SBB DEC NEG 减法 减法 带借位的减法 减量 取负
DAA
DIV IDIV AAD CBW
加法的十进制调整
除法 无符号数除法 整数除法 除法的ASCII调整 把字节转换成字
CMP
AAS DAS MUL IMUL
比较
减法的ASCII调整 减法的十进制调整 乘法 无符号数乘法 整数乘法
CWD
把字转换成双字
AAM
乘法的ASCII调整
17
例3-31 ADD AL,18H ADC AL,CL
ADC AX,DX
ADD AL,COST[BX] ADD COST[BX],BL
18
例3-32 对两个数5EH和3CH求和,并分析加法运算 指令执行后对标志位的影响。 MOV AL,5EH 0101 1110 MOV BL,3CH + 0011 1100 ADD AL,BL 1001 1010 运算后标志位: ZF=0-----零标志,运算结果非零 AF=1----半进位标志,产生进位为1 CF=0----进位标志,未产生进位为0 SF=1-----符号标志 PF=1-----奇偶标志,结果中有偶数个1为1 OF=1-----溢出标志,符号相同结果相反。
输入输出指令
2
立即数 存 储 器 段寄存器 CS,DS,ES,SS
通用寄存器
AX BX CX DX SI DI SP BP AH AL BH BL CH CL DH DL
图3-8 MOV指令允许传送数据的路径
3
例3-15 MOV AL,‘B’ ;ASCII码B→AL。 例3-16 MOV AX,DATA MOV DS,AX 注意:16位立即数不能被直接送到 DS(段寄存器)中。
22
例3-37 若AL=BCD 38,BL=BCD 15,求两数之和。 则运算过程如下: ADD AL,BL ; 0011 1000….38 ; + 0001 0101….15 ;--------------------DAA ; 0100 1101…低4位 >9 ; 0000 0110…+6调整 ;--------------------; 0101 0011….AL=53 ;结果AL=BCD 53,CF=0。
1200:0450 46 F3
偏 移 量
常 用
执行后SI
F3 46
执行后DS
0A 90
90 0A
13
例3-30 设DS=0100H, BX=0020H, (01020H)=0300H, (01022H)=0500H 执行指令 LES DI,[BX]后, DI=0300H,ES=0500H
0100:0000
DATA SEGMENT AREA1 DB 14H,3BH AREA2 DB 3 DUP(0) ARRAY DW 3100H,01A6H STRING DB ‘GOOD’ DATA ENDS
AREA1
AREA2
14
3B 00 00 00
ARRAY
00 31 A6 01 ‘G’ ‘O’ ‘O’ ‘D’
执行前DS
0100:0020 00 03
偏 移 量
常 用
执行后DI
03 00
执行后ES
05 00
00 05
14
(1)LAHF标志送到AH指令
15
11 10 O D
9 I
8 T
7 S
6
5
4
3
2
1
0
Z × A × P × C
FLAGS AH
15
算术运算指令可处理4种类型的数:见表3-5。
表3-5 4种类型数的表示方法 二进制数 (B) 0000 0111 1000 1001 1100 0101 十六进制 (H) 07 89 C5 无符号二 进制(D) 7 137 197 带符号二 进制(D) +7 -119 -59 非压缩 十进制 7 无效 无效 压缩 十进制 07 89 无效
DI
2000:0046
2000:0040
FE
25
20 31
偏 移 量
根据右图所示BX=0046H
12
例3-29 设DS=1200H, (12450H)=F346H, (12452H)=0A90H 执行指令 LDS SI,[450H]后, SI=F346H,DS=0A90H
1200:0000
执行前DS
28
例3-44 设AL=1011 0001B,DL=0100 1010B, 若 要求AL-DL,在执行SUB AL,DL的结果取决于运 算数的性质。运算过程如下:
二进制减法 1011 0001 — 0100 1010 当成无符号数 177 — 74 当成带符号数 -79 — 74
0110 0111
19
例3-33 下面是INC指令的两个应用的例子。
INC BL
INC CX
例3-34
INC BYTE PTR[BX] INC WORD PTR[BX]
20
例3-35 若AL=BCD 9,BL=BCD 5,求两数之和。 设AH=0,则运算过程如下:
ADD AL,BL ; 0000 1001….9 ; + 0000 0101….5 ;--------------------AAA ; 0000 1110…低4位 >9 ; 0000 0110…+6调整 ;--------------------; 0001 0100 ; ∧ 0000 1111…清高4位 ;---------------------; 0000 0100….AL=4 ;CF=1,AF=1,AH=1,结果AX=0104H,非压缩BCD14
26
例3-42 NEG AX ;将AX中的数值取负(正数变负数,负数变正数) NEG BYTE PTR[BX] ;对数据段中位于[BX]偏置处的字节取负。
27
例3-43 CMP AL,80H ;AL与80H作比较 CMP BX,DATA1 ;BX与数据段中偏移量为DATA1处的字比较 比较指令主要用在希望比较两个数的大小,而 又不破坏原操作数的场合。
AREA1 AREA2
14 3B
00
00 00
ARRAY
00 31 A6 01 ‘G’ ‘O’ ‘O’ ‘D’
STRING
也可写为: MOV AX, [BP+DI+TABLE]
5
例3-20 设SS=2000H,SP=0040H,BX=3120H, AX=25FE,依次执行下列指令: PUSH BX PUSH AX POP BX
9
例3-25 下面是OUT指令的具体例子。
OUT 85H,AL
;85H端口←AL内容
MOV DX,0FF4H
OUT DX,AL
;FF4H端口←AL内容
MOV DX,300H ;端口地址310H→DX中
OUT DX,AX
;300H端口←AL内容
;301H端口←AH内容
10
例3-26 设SI=1000H,DS=5000H,(51000H)=1234H
第三章 8086寻址方式和 指令系统(2)
1
表3-3 数据传送指令 通用数据传送指令
MOV PUSH POP XCHG XLAT IN OUT 字节或字传送 入栈指令 出栈指令 交换字或字节 表转换 输入 输出 LAHF SAHF PUSHF POPF LEA LDS LES
地址目标传送指令
装入有效地址 装入数据段寄存器 装入附加段寄存器 标志传送指令 标志寄存器低字节装入AH AH内容装入标志寄存器低字节 标志寄存器入栈指令 出栈,并送入标志寄存器
23
例3-38 若AL=BCD 88,BL=BCD 49,求两数之和。 则运算过程如下:
ADD AL,BL ; 1000 1000….88 ; + 0100 1001….49 ;--------------------DAA ; 1101 0001…AF=1 ; 0000 0110…+6调整 ;--------------------; 1101 0111….高半>9 ; + 0110 0000…加60H调整 ;--------------------------; 0011 0111 ;结果AL=BCD 37,CF=1。
例3-39 SUB AX,BX ;AX←AX-BX SUB DX,1850H ;DX←DX-1850H SUB BL,[BX] ;BL-DS:(BX)→BL 例3-40 SBB AL,BL
;AL←AL-BL-CF
25
例3-41 DEC BX ;BX←BX-1 DEC WORD PTR[BP] ;堆栈段中位于[BP]偏置处的的字减1。
执行指令 LEA BX,[SI]后,BX=1000H
执行指令 MOV BX,[SI]后,BX=1234H 有时,LEA指令也可用取偏移地址的MOV指令代。 例3-27 LEA BX,TABLE
MOV BX,OFFSET TABLE
但有时,必须用LEA指令,不能用MOV取代。
11
例3-28 某数组含20个元素,每 个元素占一个字节,序号为0~19。 设DI指向数组开始,如要把序 号6的元素的偏移地址送到BX中, 不能直接用MOV指令实现。 LEA BX,6[DI]
STRING
4
例3-17 MOV DX,OFFSET ARRAY OFFSET为属性操作符,表示把 ARRAY的地址值→DX中。DX=0005 例3-18 MOV AL,AREA1 ;AL←AREA1的内容14H MOV AREA2,AL ;0002H单元←14H 例3-19 MOV AX,TABLE[BP][DI] 将地址为16×SS+BP+DI+TABLE的 字存储单元中内容送进AX。
7
例3-22 若十进制数字0~9的LED七段码对照如表34所示。试用XLAT指令求数字5的七段码值。
十进制数字 七段显示码 十进制数字 七段显示码 0 1 2 3 4 40H 79H 24H 30H 19H 5 6 7 8 9 12H 02H 78H 00H 18H
TABLE DB 40H,79H,24H,30H,19H DB 12H,02H,78H,00H,18H ….. MOV AL,0 MOV BX,OFFSET TABLE XLAT TABLE
8
例3-23 下面是IN指令的具体例子。 IN AL,0F1H ;AL←F1H端口读一个字节 IN AX,80H ;AL←80H口的内容 ;AH←81H口的内容 MOV DX,310H ;端口地址310H→DX中 IN AL,DX ;AL←310H端口内容 例3-24 IN指令中也可以使用符号表示地址。 ATOD EQU 54H ;将A/D地址设为54H IN AL,ATOD;将54H→AL中
2000:0000 2000:0000 2000:0000 2000:0000
2000:003C
FE 25
←SP
FE 25 2000:003E 20
2000:003E
20
←SP
20
←SP
31
2000:0040 ←SP 2000:0040 2000:0040
31
2000:0040
31
6
例3-21
XCHG AX,[BX+200H]
21
例3-36 求ASCII码9(39H)与5(35H)之和。设AH=0, 则运算过程如下:
ADD AL,BL ; 0011 1001….9 ; + 0011 0101….5 ;--------------------AAA ; 0110 1110…低4位 >9 ; 0000 0110…+6调整 ;--------------------; 0111 0100 ; ∧ 0000 1111…清高4位 ;---------------------; 0000 0100….AL=4 ;CF=1,AF=1,AH=1,结果AX=0104H,非压缩BCD14 ;在AAA后面加 OR AX,3030H,则:ASCII码3134H。
103
103
溢出
源自文库
运算后标志位ZF=0,AF=1,CF=0,SF=0,PF=0, OF=1。
29
例3-45 若AL=BCD 3,CL=BCD 8,求两数之差。 显然结果为BCD 5,但有借位,运算过程如下:
SUB AL,CL ; 0000 0011….3 ; - 0000 1000….8 ;--------------------AAS ; 1111 1011….低4位 >9 ; - 0000 0110…减6调整 ;--------------------; 1111 0101 ; ∧ 0000 1111…清高4位 ;---------------------; 0000 0101….AL=5 ;结果为5,CF=1,表示有借位
16
表3-6 算术运算指令
加法 ADD ADC INC AAA 加法 带进位的加法 增量 加法的ASCII调整 SUB SBB DEC NEG 减法 减法 带借位的减法 减量 取负
DAA
DIV IDIV AAD CBW
加法的十进制调整
除法 无符号数除法 整数除法 除法的ASCII调整 把字节转换成字
CMP
AAS DAS MUL IMUL
比较
减法的ASCII调整 减法的十进制调整 乘法 无符号数乘法 整数乘法
CWD
把字转换成双字
AAM
乘法的ASCII调整
17
例3-31 ADD AL,18H ADC AL,CL
ADC AX,DX
ADD AL,COST[BX] ADD COST[BX],BL
18
例3-32 对两个数5EH和3CH求和,并分析加法运算 指令执行后对标志位的影响。 MOV AL,5EH 0101 1110 MOV BL,3CH + 0011 1100 ADD AL,BL 1001 1010 运算后标志位: ZF=0-----零标志,运算结果非零 AF=1----半进位标志,产生进位为1 CF=0----进位标志,未产生进位为0 SF=1-----符号标志 PF=1-----奇偶标志,结果中有偶数个1为1 OF=1-----溢出标志,符号相同结果相反。
输入输出指令
2
立即数 存 储 器 段寄存器 CS,DS,ES,SS
通用寄存器
AX BX CX DX SI DI SP BP AH AL BH BL CH CL DH DL
图3-8 MOV指令允许传送数据的路径
3
例3-15 MOV AL,‘B’ ;ASCII码B→AL。 例3-16 MOV AX,DATA MOV DS,AX 注意:16位立即数不能被直接送到 DS(段寄存器)中。
22
例3-37 若AL=BCD 38,BL=BCD 15,求两数之和。 则运算过程如下: ADD AL,BL ; 0011 1000….38 ; + 0001 0101….15 ;--------------------DAA ; 0100 1101…低4位 >9 ; 0000 0110…+6调整 ;--------------------; 0101 0011….AL=53 ;结果AL=BCD 53,CF=0。
1200:0450 46 F3
偏 移 量
常 用
执行后SI
F3 46
执行后DS
0A 90
90 0A
13
例3-30 设DS=0100H, BX=0020H, (01020H)=0300H, (01022H)=0500H 执行指令 LES DI,[BX]后, DI=0300H,ES=0500H
0100:0000
DATA SEGMENT AREA1 DB 14H,3BH AREA2 DB 3 DUP(0) ARRAY DW 3100H,01A6H STRING DB ‘GOOD’ DATA ENDS
AREA1
AREA2
14
3B 00 00 00
ARRAY
00 31 A6 01 ‘G’ ‘O’ ‘O’ ‘D’
执行前DS
0100:0020 00 03
偏 移 量
常 用
执行后DI
03 00
执行后ES
05 00
00 05
14
(1)LAHF标志送到AH指令
15
11 10 O D
9 I
8 T
7 S
6
5
4
3
2
1
0
Z × A × P × C
FLAGS AH
15
算术运算指令可处理4种类型的数:见表3-5。
表3-5 4种类型数的表示方法 二进制数 (B) 0000 0111 1000 1001 1100 0101 十六进制 (H) 07 89 C5 无符号二 进制(D) 7 137 197 带符号二 进制(D) +7 -119 -59 非压缩 十进制 7 无效 无效 压缩 十进制 07 89 无效
DI
2000:0046
2000:0040
FE
25
20 31
偏 移 量
根据右图所示BX=0046H
12
例3-29 设DS=1200H, (12450H)=F346H, (12452H)=0A90H 执行指令 LDS SI,[450H]后, SI=F346H,DS=0A90H
1200:0000
执行前DS
28
例3-44 设AL=1011 0001B,DL=0100 1010B, 若 要求AL-DL,在执行SUB AL,DL的结果取决于运 算数的性质。运算过程如下:
二进制减法 1011 0001 — 0100 1010 当成无符号数 177 — 74 当成带符号数 -79 — 74
0110 0111
19
例3-33 下面是INC指令的两个应用的例子。
INC BL
INC CX
例3-34
INC BYTE PTR[BX] INC WORD PTR[BX]
20
例3-35 若AL=BCD 9,BL=BCD 5,求两数之和。 设AH=0,则运算过程如下:
ADD AL,BL ; 0000 1001….9 ; + 0000 0101….5 ;--------------------AAA ; 0000 1110…低4位 >9 ; 0000 0110…+6调整 ;--------------------; 0001 0100 ; ∧ 0000 1111…清高4位 ;---------------------; 0000 0100….AL=4 ;CF=1,AF=1,AH=1,结果AX=0104H,非压缩BCD14
26
例3-42 NEG AX ;将AX中的数值取负(正数变负数,负数变正数) NEG BYTE PTR[BX] ;对数据段中位于[BX]偏置处的字节取负。
27
例3-43 CMP AL,80H ;AL与80H作比较 CMP BX,DATA1 ;BX与数据段中偏移量为DATA1处的字比较 比较指令主要用在希望比较两个数的大小,而 又不破坏原操作数的场合。
AREA1 AREA2
14 3B
00
00 00
ARRAY
00 31 A6 01 ‘G’ ‘O’ ‘O’ ‘D’
STRING
也可写为: MOV AX, [BP+DI+TABLE]
5
例3-20 设SS=2000H,SP=0040H,BX=3120H, AX=25FE,依次执行下列指令: PUSH BX PUSH AX POP BX
9
例3-25 下面是OUT指令的具体例子。
OUT 85H,AL
;85H端口←AL内容
MOV DX,0FF4H
OUT DX,AL
;FF4H端口←AL内容
MOV DX,300H ;端口地址310H→DX中
OUT DX,AX
;300H端口←AL内容
;301H端口←AH内容
10
例3-26 设SI=1000H,DS=5000H,(51000H)=1234H
第三章 8086寻址方式和 指令系统(2)
1
表3-3 数据传送指令 通用数据传送指令
MOV PUSH POP XCHG XLAT IN OUT 字节或字传送 入栈指令 出栈指令 交换字或字节 表转换 输入 输出 LAHF SAHF PUSHF POPF LEA LDS LES
地址目标传送指令
装入有效地址 装入数据段寄存器 装入附加段寄存器 标志传送指令 标志寄存器低字节装入AH AH内容装入标志寄存器低字节 标志寄存器入栈指令 出栈,并送入标志寄存器
23
例3-38 若AL=BCD 88,BL=BCD 49,求两数之和。 则运算过程如下:
ADD AL,BL ; 1000 1000….88 ; + 0100 1001….49 ;--------------------DAA ; 1101 0001…AF=1 ; 0000 0110…+6调整 ;--------------------; 1101 0111….高半>9 ; + 0110 0000…加60H调整 ;--------------------------; 0011 0111 ;结果AL=BCD 37,CF=1。