8086指令集 3. 目的地址传送指令. 一、数据传输指令 LEA 装入有效地址. 作用:它们在存贮器和寄存器、 例: LEA DX,string ;把偏移地址寄存器和输入输出端口之间传存到DX. 送数据. LDS 传送目标指针,把指针内容装 入DS. 1. 通用数据传送指令. 例: LDS SI,string ;把段地址:偏移 MOV 传送字或字节. 地址存到DS:SI.
MOVSX 先符号扩展,再传 LES 传送目标指针,把指针内容装送. 入ES.
MOVZX 先零扩展,再传 例: LES DI,string ;把段地址:偏移送. 地址存到ESI.
PUSH 把字压入堆栈. LFS 传送目标指针,把指针内容装 POP 把字弹出堆栈. 入FS. PUSHA 把 例: LFS DI,string ;把段地址:偏移AX,CX,DX,BX,SP,BP,SI,DI依地址存到FSI. 次压入堆栈. LGS 传送目标指针,把指针内容装 POPA 把入GS.
DI,SI,BP,SP,BX,DX,CX,AX依 例: LGS DI,string ;把段地址:偏移次弹出堆栈. 地址存到GSI. PUSHAD 把 LSS 传送目标指针,把指针内容装EAX,ECX,EDX,EBX,ESP,EBP入SS. ,ESI,EDI依次压入堆栈. 例: LSS DI,string ;把段地址:偏移 POPAD 把地址存到SSI. EDI,ESI,EBP,ESP,EBX,EDX,E4. 标志传送指令. CX,EAX依次弹出堆栈.
LAHF 标志寄存器传送,把标志装
BSWAP 交换32位寄存器
入AH.
里字节的顺序
SAHF 标志寄存器传送,把AH内容
XCHG 交换字或字节.( 至
装入标志寄存器.
少有一个操作数为寄存器,段
PUSHF 标志入栈.
寄存器不可作为操作数)
POPF 标志出栈.
CMPXCHG 比较并交换操
PUSHD 32位标志入栈.
作数.( 第二个操作数必须为
POPD 32位标志出栈.
累加器AL/AX/EAX )
二、算术运算指令
XADD 先交换再累加.( 结
ADD 加法.
果在第一个操作数里 )
ADC 带进位加法.
XLAT 字节查表转换.
INC 加 1.
BX 指向一张 256 字节的
AAA 加法的ASCII码调整.
表的起点, AL 为表的索引值
DAA 加法的十进制调整.
(0-255,即 0-FFH); 返回 AL
SUB 减法.
为查表结果. ( [BX+AL]->
SBB 带借位减法.
AL )
2. 输入输出端口传送指令. DEC 减 1.
IN I/O端口输入. ( 语法: IN NEC 求反(以 0 减之).
CMP 比较.(两操作数作减法,仅修改累加器, {端口号│DX} )
OUT I/O端口输出. ( 语法: 标志位,不回送结果). OUT {端口号│DX},累加器 ) AAS 减法的ASCII码调整. 输入输出端口由立即方式 DAS 减法的十进制调整. 指定时, 其范围是 0-255; 由 MUL 无符号乘法. 寄存器 DX 指定时,其范围是 IMUL 整数乘法.
以上两条,结果回送AH和AL(字节0-65535.
运算),或DX和AX(字运算), 功能: 交换两个操作数的数据
语法: XCHG
AAM 乘法的ASCII码调整.
格式: XCHG r1,r2 XCHG m,r XCHG r,m
DIV 无符号除法. IDIV 整数除法. PUSH,POP
功能: 把操作数压入或取出堆栈 以上两条,结果回送:
语法: PUSH 操作数 POP 操作数 商回送AL,余数回送AH, (字节运
格式: PUSH r PUSH M PUSH data POP r POP m 算);
或 商回送AX,余数回送DX, (字运PUSHF,POPF,PUSHA,POPA 算). 功能: 堆栈指令群
格式 AAD 除法的ASCII码调整. : PUSHF POPF PUSHA POPA
CBW 字节转换为字. (把AL 中字节
LEA,LDS,LES
的符号扩展到AH中去)
功能: 取地址至寄存器
CWD 字转换为双字. (把AX中的字语法: LEA r,m LDS r,m LES r,m 的符号扩展到DX中去)
XLAT(XLATB) CWDE 字转换为双字. (把AX中的
字符号扩展到EAX中去) 功能: 查表指令
语法: XLAT XLAT m
CDQ 双字扩展. (把EAX中的字的
符号扩展到EDX中去) 三、逻辑运算指令 算数运算指令
AND 与运算.
ADD,ADC
OR 或运算.
功能: 加法指令
XOR 异或运算. 语法: ADD OP1,OP2 ADC OP1,OP2 NOT 取反. 格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data TEST 测试.(两操作数作与运算,仅: C,P,A,Z,S,O 影响标志修改标志位,不回送结果).
SUB,SBB SHL 逻辑左移.
功能:减法指令
SAL 算术左移.(=SHL) 语法: SUB OP1,OP2 SBB OP1,OP2 SHR 逻辑右移. 格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data SAR 算术右移.(=SHR) 影响标志: C,P,A,Z,S,O
ROL 循环左移.
INC,DEC ROR 循环右移.
功能: 把OP的值加一或减一
RCL 通过进位的循环左移.
语法: INC OP DEC OP
RCR 通过进位的循环右移. : INC r/m DEC r/m 格式 以上八种移位指令,其移位次数影响标志: P,A,Z,S,O
可达255次.
NEG 移位一次时, 可直接用操作码.
功能: 将OP的符号反相(取二进制补码)
如 SHL AX,1.
语法: NEG OP
移位>1次时, 则由寄存器CL给格式: NEG r/m 出移位次数. 影响标志: C,P,A,Z,S,O 如 MOV CL,04 SHL
MUL,IMUL AX,CL
功能: 乘法指令 8086/8088汇编语言指令集
语法: MUL OP IMUL OP 数据传送指令集
格式: MUL r/m IMUL r/m
影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志) MOV
功能: 把源操作数送给目的操作数
DIV,IDIV 语法: MOV 目的操作数,源操作数
功能:除法指令 格式: MOV r1,r2
语法: DIV OP IDIV OP MOV r,m
格式: DIV r/m IDIV r/m MOV m,r
MOV r,data
CBW,CWD
功能: 有符号数扩展指令 XCHG
语法: CBW CWD 语法: CLI STI 标志位: I AAA,AAS,AAM,AAD
功能: 非压BCD码运算调整指令 CMP 语法: AAA AAS AAM AAD 功能: 比较OP1与OP2的值 影响标语法: CMP r/m,r/m/data 志: A,C(AAA,AAS) S,Z,P(AAM,A标志位: C,P,A,Z,O AD) JMP DAA,DAS 功能: 跳往指定地址执行 功能: 压缩BCD码调整指令 语法: JMP 地址 语法: DAA DAS
JXX 影响标志: C,P,A,Z,S
功能: 当特定条件成立则跳往指定地址执行
位运算指令集 语法: JXX 地址 注: AND,OR,XOR,NOT,TEST A: ABOVE,当C=0,Z=0时成立 功能: 执行BIT与BIT之间的逻辑 B: BELOW,当C=1时成立 运算 C: CARRY,当弁时成立 CXZ: CX寄存器的值为0(ZERO)时成立 语 E: EQUAL,当Z=1时成立
法: AND r/m,r/m/data OR r/m,r/m/d G: GREATER(大于),当Z=0且S=0时成立 ata XOR r/m,r/m/data TEST r/m,r/m L: LESS(小于),当S不为零时成立 /d
N: NOT(相反条件),需和其它符号配合使用
ata NOT r/m
O: OVERFLOW,O=1时成立
影响标志: C,O,P,Z,S(其中C与O两
P: PARITY,P=1时成立
个标志会被设为0) NOT指令不影
PE: PARITY EVEN,P=1时成立
响任何标志位
PO: PARITY ODD,P=0时成立
S: SIGN,S=1时成立
Z: ZERO,Z=1时成立 SHR,SHL,SAR,SAL
功能: 移位指令
LOOP 语
法: SHR r/m,data/CL SHL r/m,data/功能: 循环指令集 CL SAR r/m,data/CL SAL r/m,data/语法: LOOP 地址
CL
LOOPE(Z)
地址 LOOPNE(Z) 地址 影响标志: C,P,Z,S,O
标志位: 无
ROR,ROL,RCR,RCL
CALL,RET 功能: 循环移位指令
功能: 子程序调用,返回指令 语
法: ROR r/m,data/CL ROL r/m,data/语法: CALL 地址 RET RET n CL RCR r/m,data/CL RCL r/m,data/标志位: 无
CL
INT,IRET
功能: 中断调用及返回指令 影响标志: C,P,Z,S,O
语法: INT n IRET
程序流程控制指令集 标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆 栈中的标志值弹回寄存器 CLC,STC,CMC 功能: 设定进位标志 字符串操作指令集 语法: CLC STC CMC
MOVSB,MOVSW,MOVSD 标志位: C
功能: 字符串传送指令
CLD,STD 语法: MOVSB MOVSW MOVSD 功能: 设定方向标志 标志位: 无 语法: CLD STD
CMPSB,CMPSW,CMPSD 标志位: D
功能: 字符串比较指令
CLI,STI 语法: CMPSB CMPSW CMPSD 功能: 设定中断标志 标志位: C,P,Z,S,O
SCASB,SCASW
功能: 字符串搜索指令 语法: SCASB SCASW 标志位: C,P,Z,S,O
LODSB,LODSW,STOSB,STOSW 功能: 字符串载入或存贮指令 语
法: LODSB LODSW STOSB STOSW
标志位: 无
REP,REPE,REPNE 功能: 重复前缀指令集 语法: REP 指令S REPE 指令S REPNE 指令S 标志位: 依指令S而定
80C51 汇编指令集
按功能排列 1.数据传送指令 助 记 符 MOV A,Rn MOV A,data MOV A,@Ri MOV A,#data MOV Rn,A MOV Rn,data 说明 寄存器送 A 直接字节送 A 间接 RAM 送 A 立接数送 A A 送寄存器 直接数送寄存器 立即数送寄存器 A 送直接字节 寄存器送直接字节 直接字节送直接字节 间接 Rn 送直接字节 立即数送直接字节 A 送间接 Rn 直接字节送间接 Rn 立即数送间接 Rn MOVC A,@A+PC MOVX A,@Ri MOVX A,@DPTR 字节 周期 1 2 1 2 1 2 2 2 2 3 2 3 1 1 2 3 MOVX 1 1 1 1 1 2 1 1 1 代 码 E8--EF E5 E6--E7 74 F8--FF A8--AF 78--7F F5 88—8F 85 86;87 75 F6;F7 A6;A7 76;77 90 @Ri,A MOVX @DPTR,A PUSH data MOV Rn,#data MOV data,A MOV data,Rn MOV data,data MOV data,@Ri MOV data,#data MOV @Ri,A MOV @Ri,data MOV @Ri,#data MOV C,bit MOV bit,C 2 2 2 2 1 2 1 MOV DPTR,#data16 16 位常数送数据指针 MOVC A,@A+DPTR POP data XCH A,Rn XCH A,data 直接位送进位位 进位位送直接位
2 2 1 2 2 A2 92 93 A+DPTR 寻址程序存贮字节送 A 3
A+PC 寻址程序存贮字节送 A 外部数据送 A(8 位地址) 外部数据送 A(16 位地址) A 送外部数据(8 位地址) A 送外部数据(16 位地址) 直接字节进栈道,SP 加 1 直接字节出栈,SP 减 1 寄存器与 A 交换 直接字节与 A 交换 间接 Rn 与 A 交换 间接 Rn 与 A 低半字节交换
1 2 1 2
1 2 1 2 1 2 2 2
2 2 1 1
2 1
1 1 1
1
83 E2;E3 E0 F2;F3 F0 C0 D0 C8—CF C5 C6;C7 D6;D7
XCH A,@Ri XCHD A,@Ri