第三章 8086 寻址和指令系统
DESCRIPTION
第三章 8086 寻址和指令系统. 学习要点 1 、 8086 的寻址方式 2 、 8086 的指令系统. 指令. 机器指令 以二进制代码(机器码)表示指令 直接,不易读懂 汇编指令 以符号形式表示指令 易读,需要翻译(汇编) 与 CPU 相关. 指令成分. 操作码:操作的性质 表示指令应完成的具体操作 以助记符的形式表示 操作数:操作的对象 表示指令的操作对象(参与操作的对象) 源操作数、目的操作数. 指令操作数. 双操作数 OPRDEST , SRC 单操作数 OPRDEST 无操作数 OPR (隐含操作数). 操作数就在指令中. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/1.jpg)
第三章 8086 寻址和指令系统
学习要点1 、 8086 的寻址方式2 、 8086 的指令系统
![Page 2: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/2.jpg)
指令• 机器指令
以二进制代码(机器码)表示指令直接,不易读懂
• 汇编指令以符号形式表示指令易读,需要翻译(汇编)
• 与 CPU 相关
![Page 3: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/3.jpg)
指令成分• 操作码:操作的性质
表示指令应完成的具体操作以助记符的形式表示
• 操作数:操作的对象表示指令的操作对象(参与操作的对象)源操作数、目的操作数
![Page 4: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/4.jpg)
指令操作数• 双操作数
OPR DEST , SRC
• 单操作数OPR DEST
• 无操作数OPR (隐含操作数)
![Page 5: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/5.jpg)
8086 的寻址方式
寻址方式: CPU 寻找操作数或送操作结果的方式。
操作数就在指令中操作数在 CPU 的 Register 中操作数在 Memory 中
操作数可能存放的场所
![Page 6: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/6.jpg)
MOV 数据传送指令 其格式为:MOV 目的操作数,源操作数目的操作数和源操作数可采用不同的寻址方式,但两个操作数的类型必需一致。
![Page 7: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/7.jpg)
操作数就在指令中
MOV SP , 0100H
MOV AL , 20H
MOV CX , 100 0064H ;16bit
一、立即寻址
问题:操作数是 16 位,还是 8 位?
16bit
8bit
指令
操作数
![Page 8: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/8.jpg)
二、寄存器寻址
MOV CL , AH (AH)→CL
MOV DS , AX (AX)→DS
操作数在寄存器中
操作数寄存器
指令
![Page 9: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/9.jpg)
三、直接寻址
MOV AX , [2000H]
操作数在内存中,其段内偏移 ( 有效 ) 地址 EA 在指令中
操作数内存
若 (DS) = 3000H ,则结果为(32000H)→AL , (32001H)→AH
![Page 10: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/10.jpg)
![Page 11: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/11.jpg)
四、寄存器间接寻址
(BX) (SI) 段寄存器 DS ( 即操作数在数据段 )
(DI) (BP) 段寄存器 SS ( 即操作数在堆栈段 )
EA =
MOV AX , [SI] (DS):(SI)→AXMOV AX , [BP] (SS):(BP)→AX
操作数在内存中,其 EA 在指令指明的寄存器中
![Page 12: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/12.jpg)
五、寄存器相对寻址 操作数在内存中,其 EA 是指令指明的 ( 基址或变址 ) 寄存器
内容与指令中指出的 8bit/16bit 带符号位移量之和。
&
操作数内存
EA
指令
基址寄存器 disp
基址
MOV AX ,- 100 [SI] (SI)+(-100) →AXMOV DX , ALFA [DI] (DI)+ALFA→DX
注: disp 可以是一个带符号数 , 也可是已赋值的变量
(BX) (SI) 段寄存器 DS( 即操作数在数据段 )
(DI) (BP) 段寄存器 SS ( 即操作数在堆
栈段 )
EA =+disp
+disp
![Page 13: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/13.jpg)
六、基址变址寻址操作数在内存中,其 EA 是指令指明的基址寄存器与
变址寄存器内容之和。
&
操作数内存
EA
基地址
指令
基址寄存器 变址寄存器 变址值
MOV [BX][S I] , DX (DX)→(BX)+(SI) 的内存中
(BX) + (SI) 段寄存器 DS( 即操作数在数据段 )
(BP) + DI) 段寄存器 SS( 即操作数在堆栈段 )
EA =
基址 变址
![Page 14: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/14.jpg)
操作数在内存中,其 EA 是指令指明的基址与变址寄存器内容与指令中给出的 8bit/16bit 带符号位移量之和。
七、相对基址变址寻址
基地址
变址值 &
指 令
基址寄存器 变址寄存器 disp
EA
内存 操作数
MOV AX , 24[BX][S I] ((BX)+(SI)+24) →AX
(BX) + (SI) +disp 段寄存器 DS( 即操作数在数据段 )
(BP) + (DI) +disp 段寄存器 SS( 即操作数在堆栈段 )
EA =
![Page 15: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/15.jpg)
八、 I/O 端口寻址
操作数在外部设备时,使用两种不同寻址方式的 I/O 指令。
1 、直接端口寻址方式 指令中直接给出端口地址,范围是: 0—FFH
2 、采用寄存器间接寻址方式采用 DX 寄存器进行间址,范围是: 0—FFFFH
3 、 I/O 寻址时的操作寄存器为 AL 或 AX
IN AL , 25HMOV DX , 3E4H
OUT DX , AL
![Page 16: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/16.jpg)
第三章作业 1
• 1 , 2 , 3
![Page 17: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/17.jpg)
8086 的指令系统六大类指令: 1 、数据传送; 2 、算术运算; 3 、逻辑运算; 4 、串操作; 5 、控制传送; 6 、处理器控制。
要求了解指令的 1 、操作码; 2 、操作功能; 3 、操作对象; 4 、操作结果; 5 、对 PSW 标志位的影响; 6 、后继地址。
指令形式:
操作码 目的地址 源操作数或地址
![Page 18: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/18.jpg)
数据传送指令• 数据传送是计算机中最基本、最重要的一
种操作• 除标志寄存器传送指令和 POP 指令外,均
不影响标志位
![Page 19: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/19.jpg)
数据传送指令表助记符 功能
通用数据传送指令
MOV 传送字节或字PUSH 字入栈POP 字出栈XCHG 交换字节或字XLAT 字节转换
地址目标传送指令LEA 装入有效地址LDS 将指针变量装入寄存器及 DS
LES 将指针变量装入寄存器及 ES
标志传送指令
LAHF 标志寄存器低字节送 AH
SAHF AH 值送标志寄存器低字节PUSHF 标志寄存器内容进栈POPF 标志寄存器内容出栈
I/O 指令IN 输入字节或字OUT 输出字节或字
![Page 20: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/20.jpg)
1 、通用传送指令
MOV OPRD1 , OPRD2
把一个 byte/word 操作数从源传送到目的。对标志位不起作用。
OPRD1 OPRD2 Im 立即数
a a AL/AX seg seg 段寄存器
r r 通用寄存器 dst src 内存
![Page 21: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/21.jpg)
段寄存器
CS 、 DS 、 SS 、ES
Memory
立即数
通用寄存器
AX 、 BX 、 CX 、
DX 、 BP 、 SP 、
SI 、 DI
MOV 指令传送功能图解
![Page 22: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/22.jpg)
2 、堆栈操作指令
PUSH OPRD OPRD→(SP)-1/(SP)-2 (SP) -2→SP POP OPRD ((SP)+1) /(SP)→OPRD (SP)+2→SP
r seg
src(push) / dst(pop)
PUSH DX
POP BX
![Page 23: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/23.jpg)
3 、交换指令
XCHG OPRD1 , OPRD2 a rregister memoryregister register
XCHG AL , CL / XCHG AX , DI
XCHG BX , DATA [SI]
XCHG BX , DI
操作数不能为立即数;段寄存器不能作为操作数不能为立即数;段寄存器不能作为操作数。操作数。
![Page 24: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/24.jpg)
OFFSET 是运算符
4 、查表转换指令
XLAT 指定表首地址→ BX ;表元素号→ AL 查表结果 ((BX)+(AL)) →AL
例:若十进制数字 0~9 的 LED 七段显示码对照表已存放在内存中,表格的首地址为 TABLE ,用 XLAT 指令求数字 5 的七段显示码值程序如下:
TABLE DB 40H, 79H, 24H, 30H, 19H DB 12H, 02H, 78H, 00H, 18H
; 建立七段显示码表格
AL 5
BX 表格首地址AL 12H
MOV AL , 5 ;
MOV BX , OFFSET TABLE ;
XLAT ;
![Page 25: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/25.jpg)
5 、地址-目的传送指令⑴16bit 地址-目的传送指令 ( 段内有效偏移地址 )把源操作数的段内有效偏移地址 16bit 传送到目的地址。
LEA OPRD1 , OPRD2 r srt (memory 的 EA)
LEA SI , AREA1 把变量名为 AREA1 的内存 (16bit)地址→ SI
=MOV SI , OFFSET AREA1 OFFSET 是运算符
![Page 26: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/26.jpg)
⑵32bit 地址-目的传送指令 ( 段地址和段内有效偏移地址 ) 把 源 操 作 数 的 段 地 址 16bit 和 段 内 有 效 偏 移 地 址16bit 传送到目的地址。
LDS OPRD1 , OPRD2LES OPRD1 , OPRD2
r srt DS , BP/SI/DI
ES , BP/SI/DI 段地址, EALDS SI , [BX]
若 (DS) = C000H
(BX) = 080AH 内存数据如表所示; 则指令执行结果 (SI) = 0180H , (DS) = 2000H
80H01H00H20H
C080AH
C080CH
![Page 27: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/27.jpg)
6 、标志寄存器传送
LAHF (FLAG/L8bit)→AH
SAHF (AH)→FLAG/L8bit
PUSF FLAG/16bit 入栈保护
POPF 堆栈弹出→ FLAG/16bit
![Page 28: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/28.jpg)
助记符 功能
加法指令
ADD 加法ADC 带进位的加法INC 增量(加 1 )AAA 加法的 ASCII 修正DAA 加法的十进制修正
减法指令
SUB 减法SBB 带借位的减法DEC 减量(减 1 )NEG 求补(变负)CMP 比较AAS 减法的 ASCII 修正DAS 减法的十进制修正
算术运算指令
![Page 29: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/29.jpg)
乘法指令MUL 无符号数乘法IMUL 整数乘法AAM 乘法的 ASCII 修正
除法指令
DIV 无符号数除法IDIV 整数除法AAD 除法的 ASCII 修正CBW 字节转换为字CWD 字转换为双字
![Page 30: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/30.jpg)
压缩 BCD 数在一个字节中存放二个 BCD 码十进制数。
非压缩 BCD 在一个字节的低 4 位存放一个 BCD 码十进制数,高 4 位为全 0 。
二进制数可以是 8 位或 16 位;若是带符号数则用补码表示。
8086 可处理四种类型的数:无符号、带符号、压缩BCD 码、非压缩 BCD 码
二进制码(B)
十六进制(H)
无符号二进制 (D)
带符号二进制 (D)
非压缩BCD
压缩BCD
0000 01111000 10011100 0101
0789C5
7137197
+ 7- 119- 59
7无效无效
0789
无效
![Page 31: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/31.jpg)
1 、加法指令
ADD OPRD1 , OPRD2 OPRD1 + OPRD2→OPRD1
ADC OPRD1 , OPRD2 OPRD1 + OPRD2 + CF→OPRD1 影 响 的 标 志
CF 、 OF 、 PF 、 SF 、 ZF ACC im
r r dst src
INC OPRD OPRD + 1→OPRD r CF 、 OF 、 PF 、 SF 、ZF src
![Page 32: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/32.jpg)
AAA 非压缩十进制加法 BCD 调整 (8bit) CF 、 OF 、 PF 、 SF 、ZF 8bit(0×) 加法后, AL 中的非压缩 BCD 码→ AH(0+ 拾位 )AL(0+ 个位 ) 。 例: MOV BL , 09H ;非压缩 BCD 码
MOV AL , 05H ;ADD AL , BLAAA ; (AX) = 0104H
0 9 0 5
(AL)=0 EH (AX)=0 1 0 4H
AAA 调整
![Page 33: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/33.jpg)
DAA 压 缩 十 进 制 加 法 BCD 调 整 (8bit)
CF 、 OF 、 PF 、 SF 、ZF
8bit(××) 加法后, AL 中的压缩 BCD 码→ AL( 拾位、个位 ) 中。若调整结果 >99 ,则 CF = 1 。 例: MOV BL , 38H
MOV AL , 15HADD AL , BLDAA ; (AL)=53H CF=0
38 15
(AL)=4DH (AL)=53H
DAA 调整
![Page 34: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/34.jpg)
2 、减法指令
SUB OPRD1 , OPRD2 OPRD1 - OPRD2→OPRD1 SBB OPRD1 , OPRD2 OPRD1 - OPRD2 -CF→OPRD1
ACC im CF 、 OF 、 PF 、 SF 、 ZF r r
dst src
DEC OPRD OPRD - 1→OPRD r CF 、 OF 、 PF 、 SF 、 ZF src
![Page 35: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/35.jpg)
AAS 未压缩十进制数减法 BCD 调整 (8bit)
CF 、 OF 、 PF 、 SF 、ZF
8bit(0×) 减法后, AL 中的非压缩 BCD 码→ AL(0× 个位 ) 中。若有借位, CF = 1 。 例: MOV CL , 08H
MOV AL , 03H SUB AL , CL AAS ; (AL) = 05H , CF = 1( 有借
位 ) 03 08
(AL)=FBH (AL)=05H
CF =1
AAS 调整
![Page 36: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/36.jpg)
DAS 压缩十进制数减法 BCD 调整 (8bit) CF 、 OF 、 PF 、 SF 、 ZF
8bit(××) 减法后, AL 中的压缩 BCD 码→ AL(× 拾位、 × 个位 ) 中。 例: MOV CL , 98H
MOV AL , 56H SUB AL , CL DAS ; (AL) = 58H , CF = 1 ( 有借
位 ) 56 98
(AL)=0BEH (AL)=58H
CF =1
DAS 调整
![Page 37: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/37.jpg)
在使用( AAA 、 DAA )和( AAS 、 DAS )时:仅对 AL 调整,运算必须是字节;必须紧跟在加法或减法指令后面
NEG OPRD 取 负 0 - OPRD( 取 补 ) →OPRD
r / Memory CMP OPRD1 , OPRD2 比较 OPRD1 - OPRD2→OPRD1 CF 、 OF 、 PF 、 SF 、 ZF ACC im
r r dst src
注意 CMP 和 SUB 区别
![Page 38: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/38.jpg)
3 、乘法指令 MUL OPRD 无符号数乘 IMUL OPRD 带符号数乘
r / Memory 8bit : (AL)×OPRD→AX 16bit : (AX)×OPRD→DX : AX
CF 、 OF 、 PF 、 SF 、ZF
4 、除法指令 DIV OPRD 无符号数除 IDIV OPRD 带符号数除
r / Memory
8bit : (AX)÷OPRD→AH( 余 )AL( 商 ) 16bit : (DX :AX)÷OPRD→AX( 商 ) 、 DX( 余 )
CF 、 OF 、 PF 、 SF 、 ZF
![Page 39: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/39.jpg)
CBW 把 AL 字节转换为 AX 字
CF 、 OF 、 PF 、SF 、 ZF
若 (AL)7=0 ,则 (AH)=00H
若 (AL)7=1 ,则 (AH)=FFH
CWD 把 AX 节转换为 DX:AX 双字
CF 、 OF 、 PF 、SF 、 ZF
若 (AX)15=0 ,则 (DX)=00H
若 (AX)15=1 ,则 (DX)=FFH
扩展指令
![Page 40: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/40.jpg)
第三章作业 2
• 6 , 7 , 9
![Page 41: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/41.jpg)
助记符 功能
逻辑运算指令
AND 逻辑“与”OR 逻辑“或”NOT 逻辑“非”XOR 逻辑“异或”TEST 测试
移位指令
SHL 逻辑左移SAL 算术左移SHR 逻辑右移SAR 算术右移
循环移位指令
ROL 循环左移ROR 循环右移RCL 通过 CF 循环左移RCR 通过 CF 循环右移
逻辑指令
![Page 42: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/42.jpg)
逻辑运算指令的运算特点:按 bit 运算
ANDOPRD1 , OPRD2
OROPRD1 , OPRD2
XOROPRD1 , OPRD2
a im r r dst src
PF 、 SF 、 ZFCF=OF= 0
NOT OPRD OPRD 取反→ OPRD
r / Mamory CF 、 OF 、 PF 、 SF 、ZF
![Page 43: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/43.jpg)
TEST OPRD , im OPRD im ∧ → OPRD
r / Memory
用于判断 OPRD 中某一位的情况,如判断“ 正数、负数、奇数、偶数…”
PF 、 SF 、 ZFOF= CF=0
TEST AL , 01H
JNZ THERE
若 (AL) 为奇数,转THERE语句 ;若为偶数,继续执行下一语句。
TEST CX , 0FFFFH
JZ THERE
若 (CX) = 0 ,转THERE语句。
![Page 44: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/44.jpg)
2 、算术逻辑移位指令
SHL OPRD , m 逻辑左移
SAL OPRD , m 算术左移
SHR OPRD , m 逻辑右移
SAR OPRD , m 算术右移
r / Memory 1 / CL移位次数
CF OPRD 0
CF 、 OF 、 PF 、 SF 、ZF
00
![Page 45: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/45.jpg)
3 、循环移位指令
ROL OPRD , m
ROR OPRD , m
RCL OPRD , m
RCR OPRD , m r / Memory 1 / CL
移位次数
CF OPRD
CF 、 OF 、 PF 、 SF 、ZF
![Page 46: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/46.jpg)
例: (AX)= 0012H , (BX)= 0034H ,把它们装配成 (AX)=
1234H
例: (BX) = 84F0H
(1) (BX) 为无符号数,求 (BX) / 2
SHR BX, 1 ; (BX) = 4278H
(2) (BX) 为带符号数,求 (BX) ×2 SAL BX, 1 ; (BX) = 09E0H, OF=1
(3) (BX) 为带符号数,求 (BX) / 4 MOV CL, 2
SAR BX, CL ; (BX) = 0E13CH
MOV CL, 8ROL AX, CLADD AX, BX
![Page 47: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/47.jpg)
例:将 DX.AX 中 32 位数值左移一位
DX AXCF
0
shl ax,1 ; AX 左移 1 位,最低位补 0 ,最高位进入 CF
rcl dx,1 ;带进位循环左移 1 位
![Page 48: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/48.jpg)
串操作指令:用一条指令实现对一串字符或一串数据的操作。 串操作指令的共同特点: ⑴、可以对字节 (8bit) 串操作,也可对字 (16bit) 串操作; ⑵ 、所有串操作指令都是 SI 用于对源操作数间址,段地址为 DS( 源操作数物理地址在数据段 ) 。源操作数的的地址为 DS:SI 。 DI 用于对目的操作数间址,段地址为 ES( 目的操作数物理地址在附加段 ) 。目的操作数的地址为 ES:DI 。
⑷、串操作时,地址的自动修改取决于方向标志 DF DF = 1 , SI 、 DI自动减修改;字节操作减 1 ,字操作减2 。 DF = 0 , SI 、 DI自动增修改;字节操作加 1 ,字操作加2 。⑸、可以在串操作前加重复前缀完成多次串操作。
⑶、待操作的字符串长度 ( 字节或字 ) 放在 CX 中。
串操作指令
![Page 49: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/49.jpg)
助记符 功能
串
操
作
指
令
MOV ( MOVSB , MOVS
W )串传送(字节传送,字传送)
CMPS ( CMPSB , CMPS
W )串比较(字节比较,字比较)
STOS ( STOSB , STOS
W )存入串(存入字节,存入字)
LODS ( LODSB , LODS
W )取出串(取出字节,取出字)
SCAS ( SCASB , SCAS
W )扫描串(扫描字节,扫描子)
重复
前缀
REP 重复操作
REPE/REPZ 等于 / 为零重复
REPNE/REPNZ 不等于 / 不为零重复
![Page 50: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/50.jpg)
1 、串传送指令 MOVSB 字节操作 ((SI))→(DI) ; (SI)+/ - 1→SI ; (DI)+/ - 1→DI MOVSW 字操作 ((SI))→(DI) ; (SI)+/ - 2→SI ; (DI)+/ - 2→DI
CF 、 OF 、 PF 、 SF 、ZF
2 、串比较指令 CMPSB 字节操作 ((SI)) - ((DI)) →PSW ; (SI)+/ - 1→SI ; (DI)+/ -1→DI CMPSW 字操作 ((SI) + 1) : ((SI)) - ((DI) + 1) : ((DI)) →PSW ; (SI)+/ - 2 →SI ; (DI) +/ - 2 →DI
CF 、 OF 、 PF 、 SF 、 ZF
![Page 51: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/51.jpg)
4 、取串指令 源操作数间址寄存器为 SI ,目的寄存器为 AX 或 AL 。
LODSB 字节操作((SI))→AL ; (SI)+/ - 1→SI
LODSW 字操作 ((SI) + 1) : ((SI))→AX ; (SI)+/ - 2→SI
OF 、 PF 、 SF 、 ZF
3 、串搜索指令 搜索关键字在 AX 或 AL 中,目的操作数间址寄存器为 DI 。
SCASB 字节搜索(AL) - ((DI)) →PSW ; (DI)+/ - 1→DI
SCASW 字搜索 (AX) - ((DI)+1): ((DI))→PSW ; (DI)+/ - 2→DI
CF 、 OF 、 PF 、 SF 、ZF
![Page 52: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/52.jpg)
5 、存串指令 源操作数寄存器为 AX 或 AL ,目的间址寄存器为 DI 。 STOSB 字节操作 AL→(DI) ; (DI)+/ - 1→DI STOSW 字操作 AX →(DI) + 1 : (DI) ; (DI)+/ -2→DI
CF 、 OF 、 PF 、 SF 、 ZF
![Page 53: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/53.jpg)
6 、重复前缀 使用重复前缀时,重复次数计数器为 CX ;每重复一次,(CX) - 1→CX 。 REP
无条件重复前缀。重复操作后随的串操作指令, 结束条件: (CX) = 0 。
REPZ/REPE 当 ZF = 1 时,重复操作后随的串操作指令,结束条件: ZF = 0 或 (CX) = 0 。
REPNZ/REPNE当 ZF = 0 时,重复操作后随的串操作指令,结束条件: ZF = 1 或 (CX) = 0 。
![Page 54: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/54.jpg)
执行 重复前,应先做好:
(1) 源串首地址(末地址)→ SI
(2) 目的串首地址(末地址)→ DI
(3) 串长度 → CX
(4) 建立方向标志
( CLD 使 DF=0 , STD 使 DF=1 )
![Page 55: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/55.jpg)
POINT 为等于关键字的地址
BLOCK 首地址减关键字地址,即寻找次
数
设置 DI 、 CX 、 AL
重复搜索 (条件 ZF= 0)
0→DI (DI) - 1→DI(DI)→POINT
BLOCK→BX(BX) - (DI) →BX
(BX) →DI
HLT
(CX)=0/ZF=1Y
为执行串操作准备
ZF = 0 ,未找到
ZF = 1 ,找到
置 DI 为0
ZF = 1
DONE
FOUND
例:已知 BLOCK 为字符串首地址, COUNT 为字符串长度,CHAR 为关键字。
![Page 56: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/56.jpg)
结论: DI 为 0 ,无该关键字; DI 为不为 0 的数,表示寻找次数; POINT 为等于关键字的首个内存地址。
MOV DI , OFFSET BLOCKMOV CX , COUNTMOV AL , CHARREPNE SCASBJZ FOUNDMOV DI , 0JMP DONE
FOUND : DEC DIMOV POINT , DIMOV BX , OFFSET BLOCKSUB BX , DIMOV DI , BX
DONE : HLT
不重复操作二种可能:(CX)=0 ,找遍没找到; ZF=1 ,找到关键字。
![Page 57: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/57.jpg)
第三章作业 3
• 10 , 11 , 12
![Page 58: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/58.jpg)
控制转移指令助记符 功能
无条件转移指令CALL 调用过程(子过程)RET 从过程(子程序)返回JMP 无条件转移
条件转移指令
JA/JNBE 高于 / 不低于等于,转移JAE/JNB 高于等于 / 不低于,转移JB/JNAE 低于 / 不高于等于,转移JBE/JNA 低于等于 / 不高于,转移JC 有进位(借位),转移JE/JZ 等于 / 为零,转移JG/JNLE 大于 / 不小于等于,转移JGE/JNL 大于等于 / 不小于,转移JL/JNGE 小于 / 不大于等于,转移JLE/JNG 小于等于 / 不大于,转移JNC 无进位(借位),转移
![Page 59: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/59.jpg)
条件转移指令
JNE/JNZ 不等于 / 不为零,转移JNO 不溢出,转移JNP/JPO PF 为“ 0”/ 奇状态,转移JNS SF 为“ 0” ,转移JO 溢出,转移JP/JPE PF 为“ 1”/ 偶状态,转移JS SF 为“ 1” ,转移JCXZ 寄存器 CX = 0 ,转移
重复控制指令LOOP 循环LOOPE/LOOPZ 等于 / 为零,循环LOOPNE/LOOPNZ 不等于 / 不为零,循环
中断指令
INT 中断INT3 断点中断INTO 溢出中断IRET 中断返回
![Page 60: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/60.jpg)
1 、转移地址的方式 CPU 执行的指令是按顺序存放在内存中,程序执行的顺序是由 CS 和 IP 的内容决定的。正常情况下,每当 CPU 完成一次取指令操作后, IP 的内容自动+ 1 ,使取指指向下一条指令的地址。于是实现程序的顺序执行。 当程序执行需要转移,可通过改变 CS 和 IP 的内容实现。即需要将待执行指令在内存的地址送 CS 和 IP 。
这里所指的转移方式是:寻找待转移指令地址的方式。与寻找操作数的寻找方式不同。
![Page 61: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/61.jpg)
(1) 段内转移 转移指令的目的地址和 JMP 指令在同一代码段中。转移时只需改变 IP 的内容,段地址寄存器 CS 的基值不变。
近转移 (NEAR) , IP 为 0000 ~ FFFFH 。 短转移 (SHORT) ,转移地址与当前地址差在- 128 ~127 (8 位带符号数 ) 范围内。
(2) 段间转移 转移指令的目的地址和 JMP 指令不在同一代码段 中。转移时, IP 和 CS 的内容都需改变。
转移地址在代码段的寻址类型有 ( 以 JMP 指令为例 )
![Page 62: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/62.jpg)
1 、无条件转移指令
JMP SHORT OPRD 段内短转移
转移地址与当前地址差应在- 128 ~ 127
JMP SHORT PROG_S
要求在程序中 JMP 指令的地址与标号语句PROG_S 的地址差在- 128 ~ 127 范围内。
JMP NEAR PTR OPRD
JMP OPRD 段内转移
转移地址在同一代码段JMP NEAR PTR PROG_N
JMP PROG_Q
要求在程序中 JMP 指令的地址与标号语句PROG_N PROG_Q 的地址在同一个代码段内。
![Page 63: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/63.jpg)
JMP FAR PTR OPRD 段间转移
转移地址包括段地址 CS 、有效地址 IP
JMP FAR PTR PROG_F
将标号语句 PROG_F 的段地址和有效地址分别送CS 和 IP 。
![Page 64: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/64.jpg)
JMP BX
段内转移, (BX) →IP
JMP WORD PTR 5 [BX]
段内转移, (BX)+5 间指数据段内存的 16 位数→ IP
3429
DS 段
DS:(BX)+52934H →IP
JMP NEXT
段内转移, 转移至同一代码段的语句 NEXT
![Page 65: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/65.jpg)
JMP DWORD PTR [SI+0125H]
段间转移, (SI) +0125H 间指数据段内存的 32 位数→ IP 、 CS
2934H →IP34295A27
DS 段
DS:(SI)+0125H
275AH →CS
JMP FAR PTR ONE
段间转移, 将语句 ONE 的段地址→ CS ,有效地址→ IP
![Page 66: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/66.jpg)
2 、调用、返回指令
CALL (NEAR)/FAR OPRD
段间调用 FAR 子程序首地址 ( 或语句名 )
RET 返回指令 不必说明 (NEAR)/FAR
段内直接:目标地址的偏差在指令中CALL PROG_G
(CS)=2000H,(IP)=1050H
(SS)=5000H,(SP)=0100H
DISP=1234H
IP←(IP) + DISP
![Page 67: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/67.jpg)
![Page 68: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/68.jpg)
段内间接:目标地址在寄存器中
CALL BX
目标地址在存储器中CALL WORD PTR [BX+SI]
段间直接目标地址在指令中CALL FAR PTR PROG_F
(CS)=1000H,(IP)=205AH
(SS)=2500H,(SP)=0050H
PROG_F 位置 (CS)=3000H,(IP)=0500H
![Page 69: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/69.jpg)
![Page 70: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/70.jpg)
段间间接目标地址存放在存储器中
CALL DWORD PTR [BX]
![Page 71: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/71.jpg)
3 、条件转移指令
J×× OPRD 条件 ××满足,转移至 OPRD ;否则顺序执行。
以执行 CMP A , B 为例讨论条件转移
条件转移 条件 使用标志位JE/JZ 结果 =0 ZF = 1
JNE/JNZ 结果≠ 0 ZF = 0
JS 结果负 SF = 1
JNS 结果正 SF = 0
JP/JPE 1的个数偶 PF = 1
JNP/JPO 1的个数奇 PF = 0
JO 结果溢出 OF = 1
JNO 结果不溢出 OF = 0
![Page 72: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/72.jpg)
条件转移 条件 使用标志位JB/JNAE/JC 无符号数 A < B CF = 1
JNB/JAE/JNC 无符号数 A ≥ B CF = 0
JA/JNBE 无符号数 A > B CF = 0 , ZF = 1
JNA/JBE 无符号数 A ≤ B CF = 1 , ZF = 1
JGE/JNL 带符号数 A ≥ B SF ∧ OF = 0
JNGE/JL 带符号数 A < B SF ∨ OF = 1
JNG/JLE 带符号数 A ≤ B (SF OF) ∨ ZF=1
JG/JNLE 带符号数 A > B (SF OF) ∨ ZF= 0
![Page 73: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/73.jpg)
4 、重复控制指令
LOOP OPRD 8bit短转移 计数器 CX
(CX - 1)CX , (CX)≠0 转移至 OPRD ;
(CX) = 0 顺序执行
LOOPZ/LOOPE OPRD 条件重复控制 先设置 CX
8bit短转移 (CX - 1)CX , (CX)≠0 ZF∧ = 1 转移至OPRD
(CX) = 0 ZF∨ = 0 顺序执行
![Page 74: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/74.jpg)
LOOPNZ/LOOPNE OPRD 条件重复控制 先设置 CX
8bit短转移 (CX - 1)CX , (CX)≠0 ZF∧ = 0 转移至OPRD
(CX) = 0 ZF∨ = 1 顺序执行 JCXZ OPRD 条件重复控制
8bit短转移 (CX) = 0 转移至 OPRD
(CX) ≠0 顺序执行
![Page 75: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/75.jpg)
5 、内部中断指令
内部中断 (又称内部软中断 ) ,其操作类似于外部中断操作和调子程序操作。关于中断问题将在第八章”中断”中专题讨论。 INT n n 是中断类型号,是 0~ 255 的立即数。
INTO 可写在算术运算指令后
若 OF = 1 ,启动溢出中断过程 (子程序 )
若 OF = 0 ,不进行任何操作,继续执行下一指令。 IRET 中断返回。
写在中断服务程序中。类似子程序返回。
![Page 76: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/76.jpg)
处理器控制指令助记符 功能
标志操作
STC 进位标志置 1
CLC 进位标志置 0
CMC 进位标志取反STD 方向标志置 1
CLD 方向标志置 0
STI 中断允许标志置 1
CLI 中断允许标志置 0
外同步
HLT 暂停直至中断或复位WAIT 等待 信号有效ESC 交权给外部处理机LOCK 在下一条指令期间封锁总线
空操作 NOP 空操作
TEST
![Page 77: 第三章 8086 寻址和指令系统](https://reader030.vdocuments.mx/reader030/viewer/2022020710/568134a0550346895d9b9b6b/html5/thumbnails/77.jpg)
第三章作业 4
• 13 , 14 , 17