77
第第第 8086 第第第第第第第第第第 1 8086 第第第第第 2 8086 第第第第

第三章 8086 寻址和指令系统

Embed Size (px)

DESCRIPTION

第三章 8086 寻址和指令系统. 学习要点 1 、 8086 的寻址方式 2 、 8086 的指令系统. 指令. 机器指令 以二进制代码(机器码)表示指令 直接,不易读懂 汇编指令 以符号形式表示指令 易读,需要翻译(汇编) 与 CPU 相关. 指令成分. 操作码:操作的性质 表示指令应完成的具体操作 以助记符的形式表示 操作数:操作的对象 表示指令的操作对象(参与操作的对象) 源操作数、目的操作数. 指令操作数. 双操作数 OPRDEST , SRC 单操作数 OPRDEST 无操作数 OPR (隐含操作数). 操作数就在指令中. - PowerPoint PPT Presentation

Citation preview

Page 1: 第三章  8086 寻址和指令系统

第三章 8086 寻址和指令系统

学习要点1 、 8086 的寻址方式2 、 8086 的指令系统

Page 2: 第三章  8086 寻址和指令系统

指令• 机器指令

以二进制代码(机器码)表示指令直接,不易读懂

• 汇编指令以符号形式表示指令易读,需要翻译(汇编)

• 与 CPU 相关

Page 3: 第三章  8086 寻址和指令系统

指令成分• 操作码:操作的性质

表示指令应完成的具体操作以助记符的形式表示

• 操作数:操作的对象表示指令的操作对象(参与操作的对象)源操作数、目的操作数

Page 4: 第三章  8086 寻址和指令系统

指令操作数• 双操作数

OPR DEST , SRC

• 单操作数OPR DEST

• 无操作数OPR (隐含操作数)

Page 5: 第三章  8086 寻址和指令系统

8086 的寻址方式

寻址方式: CPU 寻找操作数或送操作结果的方式。

操作数就在指令中操作数在 CPU 的 Register 中操作数在 Memory 中

操作数可能存放的场所

Page 6: 第三章  8086 寻址和指令系统

MOV 数据传送指令 其格式为:MOV 目的操作数,源操作数目的操作数和源操作数可采用不同的寻址方式,但两个操作数的类型必需一致。

Page 7: 第三章  8086 寻址和指令系统

操作数就在指令中

MOV SP , 0100H

MOV AL , 20H

MOV CX , 100 0064H ;16bit

一、立即寻址

问题:操作数是 16 位,还是 8 位?

16bit

8bit

指令

操作数

Page 8: 第三章  8086 寻址和指令系统

二、寄存器寻址

MOV CL , AH (AH)→CL

MOV DS , AX (AX)→DS

操作数在寄存器中

操作数寄存器

指令

Page 9: 第三章  8086 寻址和指令系统

三、直接寻址

MOV AX , [2000H]

操作数在内存中,其段内偏移 ( 有效 ) 地址 EA 在指令中

操作数内存

若 (DS) = 3000H ,则结果为(32000H)→AL , (32001H)→AH

Page 10: 第三章  8086 寻址和指令系统
Page 11: 第三章  8086 寻址和指令系统

四、寄存器间接寻址

(BX) (SI) 段寄存器 DS ( 即操作数在数据段 )

(DI) (BP) 段寄存器 SS ( 即操作数在堆栈段 )

EA =

MOV AX , [SI] (DS):(SI)→AXMOV AX , [BP] (SS):(BP)→AX

操作数在内存中,其 EA 在指令指明的寄存器中

Page 12: 第三章  8086 寻址和指令系统

五、寄存器相对寻址 操作数在内存中,其 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 寻址和指令系统

六、基址变址寻址操作数在内存中,其 EA 是指令指明的基址寄存器与

变址寄存器内容之和。

&

操作数内存

EA

基地址

指令

基址寄存器 变址寄存器 变址值

MOV [BX][S I] , DX (DX)→(BX)+(SI) 的内存中

(BX) + (SI) 段寄存器 DS( 即操作数在数据段 )

(BP) + DI) 段寄存器 SS( 即操作数在堆栈段 )

EA =

基址 变址

Page 14: 第三章  8086 寻址和指令系统

操作数在内存中,其 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 寻址和指令系统

八、 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 寻址和指令系统

第三章作业 1

• 1 , 2 , 3

Page 17: 第三章  8086 寻址和指令系统

8086 的指令系统六大类指令: 1 、数据传送; 2 、算术运算; 3 、逻辑运算; 4 、串操作; 5 、控制传送; 6 、处理器控制。

要求了解指令的 1 、操作码; 2 、操作功能; 3 、操作对象; 4 、操作结果; 5 、对 PSW 标志位的影响; 6 、后继地址。

指令形式:

操作码 目的地址 源操作数或地址

Page 18: 第三章  8086 寻址和指令系统

数据传送指令• 数据传送是计算机中最基本、最重要的一

种操作• 除标志寄存器传送指令和 POP 指令外,均

不影响标志位

Page 19: 第三章  8086 寻址和指令系统

数据传送指令表助记符 功能

通用数据传送指令

MOV 传送字节或字PUSH 字入栈POP 字出栈XCHG 交换字节或字XLAT 字节转换

地址目标传送指令LEA 装入有效地址LDS 将指针变量装入寄存器及 DS

LES 将指针变量装入寄存器及 ES

标志传送指令

LAHF 标志寄存器低字节送 AH

SAHF AH 值送标志寄存器低字节PUSHF 标志寄存器内容进栈POPF 标志寄存器内容出栈

I/O 指令IN 输入字节或字OUT 输出字节或字

Page 20: 第三章  8086 寻址和指令系统

1 、通用传送指令

MOV OPRD1 , OPRD2

把一个 byte/word 操作数从源传送到目的。对标志位不起作用。

OPRD1 OPRD2 Im 立即数

a a AL/AX seg seg 段寄存器

r r 通用寄存器 dst src 内存

Page 21: 第三章  8086 寻址和指令系统

段寄存器

CS 、 DS 、 SS 、ES

Memory

立即数

通用寄存器

AX 、 BX 、 CX 、

DX 、 BP 、 SP 、

SI 、 DI

MOV 指令传送功能图解

Page 22: 第三章  8086 寻址和指令系统

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 寻址和指令系统

3 、交换指令

XCHG OPRD1 , OPRD2 a rregister memoryregister register

XCHG AL , CL / XCHG AX , DI

XCHG BX , DATA [SI]

XCHG BX , DI

操作数不能为立即数;段寄存器不能作为操作数不能为立即数;段寄存器不能作为操作数。操作数。

Page 24: 第三章  8086 寻址和指令系统

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 寻址和指令系统

5 、地址-目的传送指令⑴16bit 地址-目的传送指令 ( 段内有效偏移地址 )把源操作数的段内有效偏移地址 16bit 传送到目的地址。

LEA OPRD1 , OPRD2 r srt (memory 的 EA)

LEA SI , AREA1 把变量名为 AREA1 的内存 (16bit)地址→ SI

=MOV SI , OFFSET AREA1 OFFSET 是运算符

Page 26: 第三章  8086 寻址和指令系统

⑵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 寻址和指令系统

6 、标志寄存器传送

LAHF (FLAG/L8bit)→AH

SAHF (AH)→FLAG/L8bit

PUSF FLAG/16bit 入栈保护

POPF 堆栈弹出→ FLAG/16bit

Page 28: 第三章  8086 寻址和指令系统

助记符 功能

加法指令

ADD 加法ADC 带进位的加法INC 增量(加 1 )AAA 加法的 ASCII 修正DAA 加法的十进制修正

减法指令

SUB 减法SBB 带借位的减法DEC 减量(减 1 )NEG 求补(变负)CMP 比较AAS 减法的 ASCII 修正DAS 减法的十进制修正

算术运算指令

Page 29: 第三章  8086 寻址和指令系统

乘法指令MUL 无符号数乘法IMUL 整数乘法AAM 乘法的 ASCII 修正

除法指令

DIV 无符号数除法IDIV 整数除法AAD 除法的 ASCII 修正CBW 字节转换为字CWD 字转换为双字

Page 30: 第三章  8086 寻址和指令系统

压缩 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 寻址和指令系统

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 寻址和指令系统

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 寻址和指令系统

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 寻址和指令系统

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 寻址和指令系统

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 寻址和指令系统

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 寻址和指令系统

在使用( 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 寻址和指令系统

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 寻址和指令系统

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 寻址和指令系统

第三章作业 2

• 6 , 7 , 9

Page 41: 第三章  8086 寻址和指令系统

助记符 功能

逻辑运算指令

AND 逻辑“与”OR 逻辑“或”NOT 逻辑“非”XOR 逻辑“异或”TEST 测试

移位指令

SHL 逻辑左移SAL 算术左移SHR 逻辑右移SAR 算术右移

循环移位指令

ROL 循环左移ROR 循环右移RCL 通过 CF 循环左移RCR 通过 CF 循环右移

逻辑指令

Page 42: 第三章  8086 寻址和指令系统

逻辑运算指令的运算特点:按 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 寻址和指令系统

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 寻址和指令系统

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 寻址和指令系统

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 寻址和指令系统

例: (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 寻址和指令系统

例:将 DX.AX 中 32 位数值左移一位

DX AXCF

0

shl ax,1 ; AX 左移 1 位,最低位补 0 ,最高位进入 CF

rcl dx,1 ;带进位循环左移 1 位

Page 48: 第三章  8086 寻址和指令系统

串操作指令:用一条指令实现对一串字符或一串数据的操作。 串操作指令的共同特点: ⑴、可以对字节 (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 寻址和指令系统

助记符 功能

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 寻址和指令系统

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 寻址和指令系统

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 寻址和指令系统

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 寻址和指令系统

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 寻址和指令系统

执行 重复前,应先做好:

(1) 源串首地址(末地址)→ SI

(2) 目的串首地址(末地址)→ DI

(3) 串长度 → CX

(4) 建立方向标志

( CLD 使 DF=0 , STD 使 DF=1 )

Page 55: 第三章  8086 寻址和指令系统

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 寻址和指令系统

结论: 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 寻址和指令系统

第三章作业 3

• 10 , 11 , 12

Page 58: 第三章  8086 寻址和指令系统

控制转移指令助记符 功能

无条件转移指令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 寻址和指令系统

条件转移指令

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 寻址和指令系统

1 、转移地址的方式 CPU 执行的指令是按顺序存放在内存中,程序执行的顺序是由 CS 和 IP 的内容决定的。正常情况下,每当 CPU 完成一次取指令操作后, IP 的内容自动+ 1 ,使取指指向下一条指令的地址。于是实现程序的顺序执行。 当程序执行需要转移,可通过改变 CS 和 IP 的内容实现。即需要将待执行指令在内存的地址送 CS 和 IP 。

这里所指的转移方式是:寻找待转移指令地址的方式。与寻找操作数的寻找方式不同。

Page 61: 第三章  8086 寻址和指令系统

(1) 段内转移 转移指令的目的地址和 JMP 指令在同一代码段中。转移时只需改变 IP 的内容,段地址寄存器 CS 的基值不变。

近转移 (NEAR) , IP 为 0000 ~ FFFFH 。 短转移 (SHORT) ,转移地址与当前地址差在- 128 ~127 (8 位带符号数 ) 范围内。

(2) 段间转移 转移指令的目的地址和 JMP 指令不在同一代码段 中。转移时, IP 和 CS 的内容都需改变。

转移地址在代码段的寻址类型有 ( 以 JMP 指令为例 )

Page 62: 第三章  8086 寻址和指令系统

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 寻址和指令系统

JMP FAR PTR OPRD 段间转移

转移地址包括段地址 CS 、有效地址 IP

JMP FAR PTR PROG_F

将标号语句 PROG_F 的段地址和有效地址分别送CS 和 IP 。

Page 64: 第三章  8086 寻址和指令系统

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 寻址和指令系统

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 寻址和指令系统

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 寻址和指令系统
Page 68: 第三章  8086 寻址和指令系统

段内间接:目标地址在寄存器中

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 寻址和指令系统
Page 70: 第三章  8086 寻址和指令系统

段间间接目标地址存放在存储器中

CALL DWORD PTR [BX]

Page 71: 第三章  8086 寻址和指令系统

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 寻址和指令系统

条件转移 条件 使用标志位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 寻址和指令系统

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 寻址和指令系统

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 寻址和指令系统

5 、内部中断指令

内部中断 (又称内部软中断 ) ,其操作类似于外部中断操作和调子程序操作。关于中断问题将在第八章”中断”中专题讨论。 INT n n 是中断类型号,是 0~ 255 的立即数。

INTO 可写在算术运算指令后

若 OF = 1 ,启动溢出中断过程 (子程序 )

若 OF = 0 ,不进行任何操作,继续执行下一指令。 IRET 中断返回。

写在中断服务程序中。类似子程序返回。

Page 76: 第三章  8086 寻址和指令系统

处理器控制指令助记符 功能

标志操作

STC 进位标志置 1

CLC 进位标志置 0

CMC 进位标志取反STD 方向标志置 1

CLD 方向标志置 0

STI 中断允许标志置 1

CLI 中断允许标志置 0

外同步

HLT 暂停直至中断或复位WAIT 等待 信号有效ESC 交权给外部处理机LOCK 在下一条指令期间封锁总线

空操作 NOP 空操作

TEST

Page 77: 第三章  8086 寻址和指令系统

第三章作业 4

• 13 , 14 , 17