当前位置:
文档之家› 微机原理第3章 指令系统3-2(1)
微机原理第3章 指令系统3-2(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-----溢出标志,符号相同结果相反。
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中
输入输出指令
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(段寄存器)中。
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
第三章 8086寻址方式和 指令系统(2)
1
表3-3 数据传送指令 通用数据传送指令
MOV PUSH POP XCHG XLAT IN OUT 字节或字传送 入栈指令 出栈指令 交换字或字节 表转换 输入 输出 LAHF SAHF PUSHF POPF LEA LDS LES
地址目标传送指令
装入有效地址 装入数据段寄存器 装入附加段寄存器 标志传送指令 标志寄存器低字节装入AH AH内容装入标志寄存器低字节 标志寄存器入栈指令 出栈,并送入标志寄存器
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
执行前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 无效
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,表示有借位
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
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。
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。
26
例3-42 NEG AX ;将AX中的数值取负(正数变负数,负数变正数) NEG BYTE PTR[BX] ;对数据段中位于[BX]偏置处的字节取负。
27
例3-43 CMP AL,80H ;AL与80H作比较 CMP BX,DATA1 ;BX与数据段中偏移量为DATA1处的字比较 比较指令主要用在希望比较两个数的大小,而 又不破坏原操作数的场合。
执行指令 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]
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]
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
28
例3-44 设AL=1011 0001B,DL=0100 1010B, 若 要求AL-DL,在执行SUB AL,DL的结果取决于运 算数的性质。运算过程如下:
二进制减法 1011 0001 — 0100 1010 当成无符号数 177 — 74 当成带符号数 -79 — 74