文档库 最新最全的文档下载
当前位置:文档库 › 8086汇编指令手册

8086汇编指令手册

一、数据传输指令
它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.
1. 通用数据传送指令.
MOV 传送字或字节. 例: MOV 目的操作数 源操作数(CX不能作目的)
MOVSX 先符号扩展,再传送.
MOVZX 先零扩展,再传送.
PUSH 把字传送到以SS为段基址、SP为偏移地址的栈中(SP-1指示堆栈中可以存放数据的位置,存源操作数的高8位 SP-2源操作数的低8位,完成进栈操作) 例:PUSH 源操作数
POP 把字弹出堆栈. 与PUSH相反 例:POP 目的操作数
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.
PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.
BSWAP 交换32位寄存器里字节的顺序
XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数,操作数不能为立即数) 例:XCHG 目的操作数,源操作数
CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )
XADD 先交换再累加.( 结果在第一个操作数里 )
XLAT 字节查表转换.
例:MOV BX,2000H ;BX 指向一张 256 字节的表的偏移首地址
MOV AL,5 ;AL 为表的被转换码 (0-255,即0-FFH)
XLAT ; 返回 AL 为查表结果. ( [BX+AL]->AL )

2. 输入输出端口传送指令.输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,其范围是 0-65535.
IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} ) 例:IN AL,n(00H-FFH) IN AX,DX(16位)
OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 ) 例:OUT n,AL OUT DX,AX

3. 目的地址传送指令.
LEA 装入有效地址. LEA 16位寄存器,源操作数偏移地址 例: LEA SI,[2040H] ;(SI)=2040H
注:MOV SI,[2040H] ;SI中为偏移地址为2040单元中的内容,而不是2040H这个值
LDS 传送目标指针,把指针内容装入DS. 例: LDS SI,string ;把段地址:偏移地址存到DS:SI.
LES 传送目标指针,把指针内容装入ES. 例: LES DI,string ;把段地址:偏移地址存到ES:DI.
LFS 传送目标指针,把指针内容装入FS. 例: LFS DI,string ;把段地址:偏移地址存到FS:DI.
LGS 传送目标指针,把指针内容装入GS. 例: LGS DI,string ;把段地址:偏移地址存到GS:DI.
LSS 传送目标指针,把指针内容装入SS. 例: LSS DI,string ;把段地址:偏移地址存到SS:DI.

4. 标志传送指令.
LAHF 标志寄存器传送,把标志装入AH. FR寄存器的低8位->AH
SAHF 标志寄存器传送,把AH内容装入标志寄存器. AH->FR寄存器的低8位
PUSHF 标志入栈. FR寄存器推入堆栈中
POPF 标志出栈.从栈顶中弹出的内容存入FR

寄存器中(唯一可改变TF标志位的指令)
PUSHD 32位标志入栈.
POPD 32位标志出栈.

二、算术运算指令
ADD 加法.(进位影响CF标志位) 例:ADD AL,12H; ADD WORD PTR[BX],5B28H ;WORD PTR 是伪指令,用以指明该存储器操作数是字型
ADC 带进位加法. (低16用ADD,高16位用ADC)
INC 加 1. 例:INC AX; INC BYTE PTR[BX];PTR为宏汇编中的运算符,BYTE用以指明该存储器操作数是字节型
AAA 对非压缩BCD数加法操作的结果进行校正
DAA 对压缩BCD数加法操作的结果进行校正
SUB 减法.无符号操作数相减,若CF=1,则结果为补码。 例:SUB AX,BX SUB BYTE PTR[SI],3456H
SBB 带借位减法. (低16位用SUB,高16位用SBB)
DEC 减 1. 例:DEC CX;DEC WORD PTR[BX];PTR为宏汇编中的运算符,WORD用以指明该存储器操作数是字型
NEG 执行0-目的操作数,除目的操作数为0外,CF总被置1,操作数不能为立即寻址 例:NEG 目的操作数
CMP 比较.(两操作数作减法,仅修改标志位,不回送结果). 例:CMP AX,BX;结果是AX-BX
AAS 减法的ASCII码调整.
DAS 减法的十进制调整.

以下两条,结果回送AH和AL(字节运算16位),或DX和AX(字运算32位),
MUL 无符号乘法.
例:MOV AL,3EH
MOV BL,5DH
MUL BL ;执行AL*BL
IMUL 带符号乘法。(有符号数在计算机中是其补码,且符号位也参加运算,IMUL会将符号部分与数值部分分别进行处理)

以下两条,结果回送: 商回送AL,余数回送AH, (字节运算); 或 商回送AX,余数回送DX, (字运算).
AAM 乘法的ASCII码调整.
DIV 无符号除法. (16位运算:AX/[],商放在AL中,余数放在AH中;32位运算:DX:AX/[],商放在AX中,余数放在DX中)
例:MOV AX,3E2CH
MOV BL,5BH
DIV BL ;AX/BL
例:MOV AX,8A73H
MOV DX,0
MOV CL,185BH
DIV CL ;DX:AX/CL
IDIV 整数除法. (与DIV一致,余数符号与被除数一致)
AAD 除法的ASCII码调整.
CBW 带符号除法指令中,被除数扩展成16位 ,把AL中字节的符号扩展到AH中去。扩展规则是根据AL寄存器的最高位,若D7为1,则AH置FFH;若D7为0,则AH置0
CWD 字转换为双字,被除数扩展成32位 把AX中的字的符号扩展到DX中去。扩展规则是根据AX寄存器的最高位,若D15为1,则DX置FFFFH;若D15为0,则DX置0
CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)
CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)

三、逻辑运算指令
八种移位指令,其移位次数可达255次. 移位一次时, 可直接用操作码. 如 SHL AX,1. 移位>1次时, 则由寄存器CL给出移位次数.
如 MOV CL,04
SHL AX,CL
AND

与运算. 0位清零,1位保留 例:AND AX,AX 相与,运算结果为本身,使CF置零
OR 或运算. 1位置1,0位保留 例:OR AX,AX 清零,修改标志位CF
XOR 异或运算. 同为0,异为1
NOT 取反运算.
TEST 测试.(两操作数作与运算,仅修改状态标志位ZF,不回送结果,常用于对某位“1”或“0”的检测).
SHL 逻辑左移. (移空的位补0,逻辑左移运算结果在无进位的情况下原数据乘2)
SAL 算术左移. (=SHL)
SHR 逻辑右移. (移空的位补0,逻辑右移运算结果原数据除2)
SAR 算术右移. (移空的位由最高位补充,移掉的一位补充为符号位)
ROL 循环左移. (移空的位由移出位补充)
ROR 循环右移. (移空的位由移出位补充)
RCL 通过进位的循环左移. (移空的位由CF位补充)
RCR 通过进位的循环右移. (进位标志位参与循环)

四、串指令
DS:SI 源串段寄存器 :源串变址.
ES:DI 目标串段寄存器:目标串变址.
CX 重复次数计数器.
AL/AX 扫描值.
D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量.
Z标志 用来控制扫描或比较操作的结束.
MOVS 串传送. ( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )
CMPS 串比较. ( CMPSB 比较字符. CMPSW 比较字. )
SCAS 串扫描. (把AL或AX的内容与目标串作比较,比较结果反映在标志位.)
LODS 装入串. (把源串中的元素(字或字节)逐一装入AL或AX中.)
LODSB 传送字符. LODSW 传送字. LODSD 传送双字.
STOS 保存串. 是LODS的逆过程.
REP 当CX/ECX<>0时重复.
REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.
REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.
REPC 当CF=1且CX/ECX<>0时重复.
REPNC 当CF=0且CX/ECX<>0时重复.

五、程序转移指令
1>无条件转移指令 (长转移)
JMP 无条件转移指令
CALL 过程调用
RET/RETF 过程返回.

2>条件转移指令 (短转移,-128到+127的距离内) ( 当且仅当(SF XOR OF)=1时,OP1
测试无符号整数运算的结果(标志C和Z)
JA/JNBE 大于时转移. CF V ZF=0
JBE/JNA 小于或等于转移. CF V ZF=1
JAE/JNB 大于或等于转移. CF=0
JB/JNAE 小于转移. CF=1

测试带符号整数运算的结果(标志S,O和Z).
JG/JNLE 大于转移. (SF V OF) V ZF=0
JLE/JNG 小于或等于转移. (SF V OF) V ZF=1
JGE/JNL 大于或等于转移. (SF V OF)=0
JL/JNGE 小于转移. (SF V OF)=1

JE/JZ 等于转移. ZF=1
JNE/JNZ 不等于时转移. ZF=0
JC 有进位时转移. CF=1
JNC 无进位时转移. CF=0
JNO 不溢出时转移. OF=0
JO 溢出转移. OF=1
JNP/JPO

奇偶性为奇数时转移. PF=0
JP/JPE 奇偶性为偶数时转移. PF=1
JS 符号位为 "1" 时转移. SF=1
JNS 符号位为 "0" 时转移. SF=0

3>循环控制指令(短转移)
LOOP 先进行CX-1操作,若CX不为零时循环.
LOOPE/LOOPZ 先进行CX-1操作,若CX不为零且标志ZF=1时循环.
LOOPNE/LOOPNZ 先进行CX-1操作,若CX不为零且标志ZF=0时循环.
JCXZ CX为零时转移.
JECXZ ECX为零时转移.

4>中断指令
INT 中断指令 例:INT n(中断类型号n乘以4得到一个单元地址,由此地址开始的前两个单元中存放的是中断处理程序入口地址的偏移量,后两个单元中存放的是中断处理程序入口地址的段地址)
INTO 溢出中断
IRET 中断返回 (中断处理程序的最后一条指令)

5>处理器控制指令
HLT 处理器暂停, 直到出现中断或复位信号才继续.
WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.
ESC 转换到外处理器.
LOCK 封锁总线.
NOP 空操作.
STC 置进位标志位.
CLC 清进位标志位.
CMC 进位标志取反.
STD 置方向标志位.
CLD 清方向标志位.
STI 置中断允许位.
CLI 清中断允许位.

六、伪指令
DW 定义字(2字节).
PROC 定义过程.
ENDP 过程结束.
SEGMENT 定义段.
ASSUME 建立段寄存器寻址.
ENDS 段结束.
END 程序结束.

七、处理器控制指令
1、标志控制指令
STC 使CF置“1”
CLC 使CF清“0”
CMC 使CF取反
STD 使DF置“1”
CLD 使DF清“0”
STI 使IF置“1”
CLI 使IF清“0”

2、外同步指令
(1)处理器暂停指令HLT
(2)等待指令WAIT
(3)换码指令/交权指令ESC
(4)总线封锁指令LOCK
(5)空操作指令NOP

八、寻址方式介绍
1、立即寻址 例:MOV AX,34EAH
2、寄存器寻址 例:MOV AL,AH
3、直接寻址 例:MOV AX,[3E4CH] (指令中,EA的内容为3E4CH,物理地址为(DS)*10H+3E4CH)
例:MOV ES:[1234H],BL (指令中,EA为1234H,而物理地址为(ES)*10H+1234H)
4、寄存器间接寻址 例:MOV SI,61A8H
MOV DX,[SI] (指令中,物理地址为:(DS)*10H+61A8H)
(1)DX与BX,SI和DI寄存器组成物理地址。SS与BP、SP寄存器组成物理地址
(2)AX,CX,DX一般不在寄存器间接寻址中使用
5、基址、变址寻址 例:MOV CX,36H[BX] (指令中,EA为36H+(BX),物理地址为(DS)*10H+36H+(BX))
例:MOV -20[BP],AL (指令中,EA为(BP)-14H,物理地址为(SS)*10H-14H+(BP))
(当使用寄存器BX或BP时,称为基址寻址;使用寄存器SI或DI时,称为变址寻址)
6、基址+变址寻址 例:MOV AX,8AH[BX]

[SI] (指令中,EA为8AH+(BX)+(SI),物理地址为(DS)*10H+8AH+(BX)+(SI))

九、标志寄存器
CF--进位标志位 D15和D7进位或者借位 则CF=1
PF--奇偶标志位 PF=1 偶数个1
AF--辅助进位标志位 第八位向高八位有进位 D3向D4进位 AF=1
ZF--零标志位 结果为0时ZF=1
SF--符号标志位 最高位D15或D7为1 则SF=1
OF--溢出标志位 有溢出即次高位与最高位有一个向前的进位则OF=1

十、中断与中断管理
1、中断概念 外设向CPU发出中断请求,CPU接收到请求并在一定条件下暂时停止执行原来的程序而转去中断处理,处理好中断服务再返回来执行原来程序。
2、中断应用 分时处理 实时控制 故障处理
3、中断系统组成 中断请求触发器 中断屏蔽触发器 中断允许触发器
4、中断条件 (1)有外设申请中断 (2)中断源不屏蔽
5、中断响应过程 中断申请 中断响应 中断处理
6、中断处理 保护现场 开中断 中断服务 关中断 恢复中断 开中断返回
7、中断技术 单线中断 多线中断 矢量中断
8、中断优先级判别 软件查询 硬件排队 专用中断控制器
9、中断管理方式 中断优先权管理 中断结束管理
十一、8086
1、8086总线包括地址总线(20)、数据总线(16)、控制总线
2、8086中断属于矢量中断,可处理256中断包括外部中断和内部中断
3、8086中断源两个类型 (1)硬件中断分为可屏蔽中断(NMI管脚)不可屏蔽中断(INT管脚)
(2)软件中断
4、8086工作时序 时钟周期 总线周期 指令周期
5、8086总线性能 时钟频率 总线宽度 总线传输速率
6、8086CPU中断管理(1)除法出错中断,溢出中断,INT n
(2)NMI (3)INTR (4)单步中断
十二、IO端口
1、IO端口的处理方法(1)存储器映像的IO寻址(2)IO映像的IO寻址
2、CPU与IO接口交换三类信息 数据信息 状态信息 控制信息
3、片选信号产生方法 线选法 部分译码法 全译码法



相关文档