Chapter 3 寻址方式与指令系
统 § 3.1 寻址方式
一,寻址方式的概念
1、寻址( Addressing)
西










寻址就是寻找指令中操作数的地址(操作数)的过
程。 2、寻址方式( Addressing Mode)寻址方式就是寻找指令中所需操作数的各种方式的总
称。 3、有效地址( Effective Address)
(1)位移量( Displacement)
位移量是指指令中的一个 8位或 16位数,一般以操
作数名(变量名或标号)出现,程序设计人员可以修改位
移量。 (2)基地址( Base Address)基地址由基址指针( BP)或基址寄存器( BX)提供。
(3)变址( Index Address)
变址由变址寄存器( SI和 DI)提供。
在指令中,由这三种地址分量不同组合时,就构
成了不同的寻址方式。
Chapter 3 寻址方式与指令系
统二,寻址方式
1、寄存器寻址( Register Addressing)
西










在这种寻址中,直接由 CPU中的某个寄存器提供操
作数,即操作数在 CPU的某个寄存器中。
如,MOV AX,BX
MOV DS,AX
MOV CL,AL
MOV DL,CL
在这种寻址中,寄存器可以是 8位也可以是 16位。
在这种寻址中,由于操作数在 CPU内部,因此执行
指令时,直接在 CPU内部进行,而不需要总线周期,故指令
执行速度快。
指令功能
执行过程
Chapter 3 寻址方式与指令系

西










2、立即数寻址( Immediate Addressing)
在这种寻址中,直接在指令中给出 8位或 16位操作
数。 如,MOV AX,1234H
MOV AL,34H
注意, (1),立即数只能作源操作数,不能作目标操作数。
(2),立即数寻址方式,其操作数随着取指令时
进入 CPU,因此,执行该指令时也直接在 CPU内部进行,
而不需要总线周期,故执行指令速度快。
(3),立即数寻址方式受限制较多,一般用于计
数器、寄存器或存储器赋初值,或者用于比较运算等。
如,MOV CL,100
JMP CX,0
指令功能 执行过程
Chapter 3 寻址方式与指令系

西










3、直接寻址( Direct Addressing)
在这种寻址中,在指令中直接给出操作数的地址,
即有效地址( EA)直接由位移量提供。
如,MOV AX,VAR
MOV AH,DADA _BYTE
MOV CL,DA+3
MOV BX,DATA _WORD
注意, 这是从存储器中寻找操作数最简单的一种寻址方式 。
(1),EA用符号表示
(2),EA用常数表示
如,MOV AX,DS,[2000H]
注意, 在这种方式中,段寄存器必须指明 。
指令功能
执行过程
Chapter 3 寻址方式与指令系

西










4、寄存器间接寻址( Register Indirect
Addressing) 在这种寻址中,操作数的有效地址直接由寄存器
(主要指 BX,BP,SI和 DI)给出,即寄存器的内容是操作
数的地址,
如,MOV AL,[BX]
MOV BH,[BP]
MOV CL,[SI]
MOV [DI],BX
注意, 在这种方式中,实际上操作数是在存储器中,寄存
器的内容相当于是一个地址指针,指向操作数所在的存储
单元,因此,这是访问存储器的指令 。
操作数寄存器
指令功能
执行过程
Chapter 3 寻址方式与指令系

西










5、基址寻址和变址寻址
( 1)、基址寻址( Base Addressing)
如,MOV AL,1000H[BX]
MOV TABLE[BP],AL
MOV CL,20H[BX]
在这种寻址方式中,有效地址( EA)由基址寄
存器( BX或 BP)和指令中给出的位移量两个部分形成 。
注意, 在这两种方式,用于一维表(数组)的查询和运算。
( 2)、变址寻址( Base Addressing)
在这种寻址方式中,有效地址( EA)由变址寄
存器( SI或 DI)和指令中给出的位移量两个部分形成 。
如,MOV AX,ARRY[SI]
MOV TABLE[DI],AL
MOV CL,20H[SI]
指令功能
执行过程
Chapter 3 寻址方式与指令系

西










6、基址变址寻址( Base Index Addressing)
如,MOV AL,[BX][SI]
MOV TABLE[BP][DI],AL
MOV CL,20H[BX][SI]
MOV 100H[BP][DI],BX
在这种寻址方式中,有效地址( EA)由基址寄
存器( BX或 BP)、变址寄存器( SI或 DI)和指令中给出
的位移量三个部分形成 。
注意, (1)、在这种方式,BX或 BP,SI或 DI都只能选其
中 的一个,不能同时出现在指令中。
(2)、在这种方式,由于有两个寄存器( BX
或 BP,SI或 DI)的内容在程序中可作修改,因此使用起
来更加灵活、方便。
(3)、一般用于二维数组的操作。
指令功能
执行过程
Chapter 3 寻址方式与指令系

西










7、串操作寻址( String Addressing)
在后面详细介绍。
在串操作寻址方式中,隐含使用 SI和 DI寻找操
作数的地址指针,并且完成串操作后,按照 DF表示规定
的方向来自动对地址指针 (SI或 DI)进行修改(增 /减
1/2)。
这是一种输入 /输出控制的寻址方式,主要用于对
外部设备的访问。
8,I/O端口寻址( Input/Output
Addressing)
在后面详细介绍。
Chapter 3 寻址方式与指令系
统 § 3.2 8086/8088的指令系
统一,指令系统的分类
1、按指令类别(性质)分类
西










( 1)、数据传送类指令( Data Transfer
Instruction)( 2)、算术运算类指令( Arithmetic
Instruction)( 3)、位操作类指令( Bit Manipulation
Instruction)( 4)、串操作类指令( String Instruction)( 5)、程序转移类指令(
Program Transfer
Instruction)( 6)、处理器控制指令( Processor Control
Instruction)2、按汇编指令格式分类
( 1)、双操作数指令
这类指令中有两个操作数,一个是源操作数,一个是目标操
作数。 ( 2)、单操作数指令
这类指令中只有一个操作数,它既是源操作数,又是目标操
作数。 ( 3)、无操作数指令
这类指令中没有指明操作数,它隐含使用操作数。
Chapter 3 寻址方式与指令系
统二,8086/8088的指令系统
(一)、数据传送类指令
西










1、传送指令( MOVE)
( 3)对标志寄存器的影响:无
( 1)格式,MOV DEST,SRC
( 4) 传送方向
( 2)功能:将源操作数的内容传送给目标操作数,
即:
( SRC) DEST
① 立即数传送到通用寄存器 /存储单元
如,MOV AX,1234H;( AX) =1234H
MOV CL,0FH;( CL) =0FH
MOV ADDR,1234;将 1234送入 ADDR所指示的单

MOV DATA_BYTE,0FH; 将 DATA _BYTE单元置 0FH
Chapter 3 寻址方式与指令系

西










② 寄存器之间的传递
如,MOV AX,BX;( AX) =( BX)
MOV CL,AL;( CL) =( AL)
MOV DS,AX;( DS) =( AX)
③ 寄存器与存储器之间的传递
如,MOV AX,DATA_WORD
MOV DATA_BYTE, AL
MOV AH,DATA_BYTE
MOV DATA_WORD, AX
Chapter 3 寻址方式与指令系

西










立即数
Memory
段寄存器
CS DS SS
ES
通用寄存器
AX BX CX DX
BP SP SI DI
MOV指令数据传送方向示意图
注意, ( 1) MOV指令中的两个操作数不能同时为存储器操
作数,即存储单元之间不能直接进行数据传送。
如,MOV ADDR,DATA _BYTE是错误的。
( 2)立即数不能传送给段寄存器。
如,MOV DS,1234H指令是错误的。
非法传送种种
? 两个操作数的类型不一致
? 例如源操作数是字节,而目的操作数是字;或
相反
? 两个操作数不能都是存储器
? 传送指令很灵活,但主存之间的直接传送却不
允许
? 段寄存器的操作有一些限制
? 段寄存器属专用寄存器,对他们的操作能力有

示例
示例
示例
西










Chapter 3 寻址方式与指令系

西










2、交换指令( Exchange)
( 3)对标志寄存器的影响:无
( 1)格式,XCHG DEST,SRC
( 4) 交换方向
( 2)功能:将源操作数的内容和目标操作数的内容
互换,即,把两个地方的数据进行互换 ( SRC)
( DEST)
① 通用寄存器之间
如,XCHG AX,BX
XCHG CL,AL
② 通用寄存器与存储器之
间 如,XCHG AX,DATA_WORD
XCHG DATA_BYTE, AL
注意, 在这个指令中不能出现两个存储器操作数,也不能
出现段寄存器。
Chapter 3 寻址方式与指令系

西










3、标志位传送指令( Flag Transfer)
这是对标志寄存器进行操作仅有的四条指令,它们
都是无操作数指令。
( 1)、取标志寄存器指令
① 格式,LAHF
③ 对标志寄存器的影响:无
② 功能:将标志寄存器的低 8位内容送 AH
中。
( 2)、存标志寄存器指令
① 格式,SAHF
② 功能:把 AH的内容存入标志寄存器的低 8位中。
③ 对标志寄存器的影响:对 CF,PF,AF,ZF和 SF有
影响,不影响 OF,IF,TF和 DF。
Chapter 3 寻址方式与指令系

西










( 3)、标志寄存器进栈指
令 ① 格式,PUSHF
③ 对标志寄存器的影响:无
② 功能:将标志寄存器的内容送如堆栈顶
部。
( 4)、标志寄存器出栈指
令 ① 格式,POPF
② 功能:将栈顶内容送入标志寄存器中。
③ 对标志寄存器的影响:影响所有标志位,即 CF、
PF,AF,ZF,SF,OF,IF,TF和 DF都会到影响。
利用这几条指令,可以对标志寄存器的各位(除 CF、
DF和 ZF外,它们有专门的操作指令)进行置位 /复位。
Chapter 3 寻址方式与指令系

西










如:对 SF置位:
LAHF
OR AH,80H
SAHF
又如:对 OF置位:
PUSHF
POP AX
OR AX,800H
PUSH AX
POPF
OFDFIFTFSFZF AF PF CF
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
4、地址传送指令
? 地址传送指令将存储器单元的逻辑地址送至
指定的寄存器
? 有效地址传送指令 LEA
? 指针传送指令 LDS和 LES
? 注意不是获取存储器单元的内容西华师








有效地址传送指令 LEA( load EA)
? 格式,LEA DEST,SRC
? 功能:将源操作数( SRC)的有效地址送入目的
操作数( DEST),既将存储器操作数的有效地址
传送至指定的 16位寄存器中
? 对标志寄存器的影响:无
例题
? 注意,源操作数( SRC)必须是存储器操作数,
目的操作数( DEST)必须是 16位寄存器操作数
? 用途,一般用于对表处理和串处理的地址指针赋值,
如:
? LEA BX,BUFFER
? LEA SI,STRING
西










装入地址指针指令
LDS r16,mem; r16←mem,; DS←mem+2
? LDS指令将主存中 mem
指定的字送至 r16,
并将 mem的下一字送
DS寄存器
LES r16,mem; r16←mem,; ES←mem+2
? LES指令将主存中 mem
指定的字送至 r16,
并将 mem的下一字送
ES寄存器
例题
西










加法指令 ADD
? ADD指令将源与目的操作数相加,结果送到
目的操作数
? ADD指令按状态标志的定义相应设置,即要
影响 CF,PF,AF,ZF,SF和 OF标志位。
ADD
ADD reg,imm/reg/mem; reg←reg + imm/reg/mem
ADD mem,imm/reg; mem←mem + imm/reg
例题
西










带进位加法指令 ADC
? ADC指令将源与目的操作数相加,再加上进位 CF标
志,结果送到目的操作数
? ADC指令按状态标志的定义相应设置,即要影响
CF,PF,AF,ZF,SF和 OF标志位。
? ADC指令主要与 ADD配合,实现多精度加法运算
ADC
ADC reg,imm/reg/mem; reg←reg + imm/reg/mem+ CF
ADC mem,imm/reg; mem←mem + imm/reg+ CF
例题
西










增量指令 INC( increment)
? INC指令对操作数加 1(增量)
? INC指令不影响进位 CF标志,按定义设置其
他状态标志
INC
INC reg/mem; reg/mem←reg/mem + 1
inc bx
inc byte ptr [bx]西










减法指令 SUB( subtract)
? SUB指令将目的操作数减去源操作数,结果
送到目的操作数
? SUB指令按照定义相应设置状态标志
SUB
SUB reg,imm/reg/mem; reg←reg - imm/reg/mem
SUB mem,imm/reg; mem←mem - imm/reg
例题
西










带借位减法指令 SBB
? SBB指令将目的操作数减去源操作数,再减
去借位 CF(进位),结果送到目的操作数。
? SBB指令按照定义相应设置状态标志
? SBB指令主要与 SUB配合,实现多精度减法
运算
SBB
SBB reg,imm/reg/mem; reg←reg - imm/reg/mem- CF
SBB mem,imm/reg; mem←mem - imm/reg- CF
例题
西










减量指令 DEC( decrement)
? DEC指令对操作数减 1(减量)
? DEC指令不影响进位 CF标志,按定义设置
其他状态标志
DEC
DEC reg/mem; reg/mem←reg/mem - 1
dec cx
dec word ptr [si]
INC指令和 DEC指令都是单操作数指令
主要用于对计数器和地址指针的调整
西










求补指令 NEG( negative)
? NEG指令对操作数执行求补运算:用零减去
操作数,然后结果返回操作数
? 求补运算也可以表达成:将操作数按位取反
后加 1
? NEG指令对标志的影响与用零作减法的 SUB
指令一样
NEG
NEG reg/mem; reg/mem←0 - reg/mem
例题
西










比较指令 CMP( compare)
? CMP指令将目的操作数减去源操作数,按照
定义相应设置状态标志
? CMP指令执行的功能与 SUB指令,但结果
不回送目的操作数
CMP reg,imm/reg/mem; reg -imm/reg/mem
CMP mem,imm/reg; mem- imm/reg
例题
CMP
西