8086与8051指令对比 - 图文

更新时间:2024-07-07 01:30:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

2.逻辑运算指令 助 记 符 ANL A,Rn ANL A,data ANL A,@Ri ANL A,#data ANL data,A ANL data,#data ANL C,bit ANL C,/bit ORL A,Rn ORL A,data 说明 寄存器与到A 直接字节与到A 间接RAM与到A 立即数与到A A与到直接字节 立即数与到直接字节 直接位与到进位位 直接位的反码与到进位位 寄存器或到A 直接字节或到A 间接RAM或到A 立即数或到A A或到直接字节 立即数或到直接字节 直接位或到进位位 直接位的反码或到进位位 寄存器异或到A 直接字节异或到A 间接RAM异或到A 立即数异或到A A异或到直接字节 立即数异或到直接字节 进位位置 1 直接位置 1 A 清 0 进位位清 0 直接位清 0 A 求反码 进位位取反 直接位取反 A 循环左移一位 A 带进位左移一位 字节 周期 1 2 1 2 2 3 2 2 3 2 2 2 2 2 2 2 3 1 2 1 2 2 1 2 3 1 2 1 1 2 1 1 1 1 1 1 1 2 2 2 2 1 1 1 1 1 2 2 2 1 1 1 1 1 1 1 2 1 1 1 1 1 1 1 代 码 58—5F 55 56;57 54 52 53 82 B0 48—4F 45 46;47 44 42 43 72 A0 68—6F 65 66;67 64 62 63 D3 D2 E4 C3 C2 F4 B3 B2 23 33 ORL A,@Ri ORL A,#data ORL data,A ORL data,#data ORL C,bit ORL C,/bit XRL A,Rn XRL A,data XRL A,@Ri XRL A,#data XRL data,A XRL data,#data SETB C SETB bit CLR A CLR C CLR bit CPL A CPL C CPL bit RL A RLC A RR A RRC A SWAP A 3.算术运算指令 助 记 符 ADD A,Rn ADD A,data ADD A,@Ri ADD A,#data ADDC A,Rn ADDC A,data ADDC A,@Ri ADDC A,#data SUBB A,Rn SUBB A,data SUBB A,@Ri SUBB A,#data A 右移一位 A 带进位右移一位 A 半字节交换 说明 寄存器加到 A 直接字节加到 A 间接 RAM 加到 A 立即数加到 A 寄存器带进位加到 A 直接字节带进位加到 A 间接 RAM 带进位加到 A 立即数带进位加到 A 从 A 中减去寄存器和进位 从 A 中减去直接字节和进位 从 A 中减去间接 RAM 和进位 从 A 中减去立即数和进位 A 加 1 寄存器加 1 直接字节加 1 间接 RAM 加 1 数据指针加 1 A 减 1 寄存器减 1 直接字节减 1 间接 RAM 减 1 A 乘 B A 被 B 除 A 十进制调整 说明 绝对转移 长转移 短转移 1 1 1 1 1 1 03 13 C4 代 码 28—2F 25 26;27 24 38—3F 35 36;37 34 98—9F 95 96;97 94 04 08—0F 05 06;07 A3 14 18—1F 15 16;17 A4 84 D4 代 码 *1 02 80 字节 周期 1 2 1 2 1 2 1 2 1 2 1 2 1 1 2 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 4 4 1 INC A INC Rn INC data INC @Ri INC DPTR DEC A DEC Rn DEC data DEC @Ri MUL AB DIV AB DA A 3.转移指令 助 记 符 AJMP addr 11 LJMP addr 16 字节 周期 2 3 2 2 2 2 SJMP rel JMP @A+DPTR JZ rel JNZ rel JC rel JNC rel JB bit,rel JNB bit,rel JBC bit,rel 相对于 DPTR 间接转移 若 A=0 则转移 若 A≠0 则转移 若 C=1 则转移 若 C≠1 则转移 若直接位=1 则转移 若直接位=0 则转移 若直接位=1 则转移且清除 直接数与 A 比较,不等转移 立即数与 A 比较,不等转移 立即数与寄存器比较不等转移 寄存器减 1 不为 0 转移 直接字节减 1 不为 0 转移 绝对子程序调用 子程序调用 子程序调用返回 中断程序调用返回 空操作 1 2 2 2 2 3 3 3 3 3 3 2 3 2 3 1 1 1 2 2 2 2 2 2 73 60 70 40 50 20 30 10 B5 B4 2 2 2 2 2 2 2 2 2 2 2 2 1 CJNE A,data,rel CJNE A,#data,rel CJNE Rn,#data,rel DJNZ Rn,rel DJNZ data,rel ACALL addr 11 LCALL addr 16 CJNE @Ri,#data,rel 立即数与间接 RAM 比较,不等转移 3 B6;B7 B8—BF D8—DF D5 *1 12 22 32 00 RET RETI NOP 按字母排列 1.数据传送指令 助 记 符 ACALL addr 11 ADD A,Rn ADD A,data ADD A,@Ri ADD A,#data ADDC A,Rn ADDC A,data ADDC A,@Ri ADDC A,#data AJMP addr 11 说明 绝对子程序调用 寄存器加到 A 直接字节加到 A 间接 RAM 加到 A 立即数加到 A 寄存器带进位加到 A 直接字节带进位加到 A 间接 RAM 带进位加到 A 立即数带进位加到 A 绝对转移 寄存器与到A 直接字节与到A 字节 周期 2 1 2 1 2 1 2 1 2 2 1 2 2 1 1 1 1 1 1 1 1 2 代 码 *1 28—2F 25 26;27 24 38—3F 35 36;37 34 *1 58—5F 55 ANL A,Rn ANL A,data 1 1 ANL A,@Ri ANL A,#data ANL data,A ANL data,#data ANL C,bit ANL C,/bit CJNE A,data,rel CJNE A,#data,rel CJNE Rn,#data,rel CLR A CLR C 间接RAM与到A 立即数与到A A与到直接字节 立即数与到直接字节 直接位与到进位位 直接位的反码与到进位位 直接数与 A 比较,不等转移 立即数与 A 比较,不等转移 立即数与寄存器比较不等转移 A 清 0 进位位清 0 直接位清 0 A 求反码 进位位取反 直接位取反 A 十进制调整 A 减 1 寄存器减 1 直接字节减 1 间接 RAM 减 1 A 被 B 除 寄存器减 1 不为 0 转移 直接字节减 1 不为 0 转移 A 加 1 寄存器加 1 直接字节加 1 间接 RAM 加 1 数据指针加 1 若直接位=1 则转移 若直接位=1 则转移且清除 若 C=1 则转移 相对于 DPTR 间接转移 若直接位=0 则转移 1 2 2 3 2 2 3 3 3 3 1 2 1 1 2 1 1 1 2 1 1 2 3 1 1 2 1 1 3 3 2 1 3 1 1 1 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 4 2 2 1 1 1 1 2 2 2 2 2 2 56;57 54 52 53 82 B0 B5 B4 B6;B7 B8—BF E4 C3 C2 F4 B3 B2 D4 14 CJNE @Ri,#data,rel 立即数与间接 RAM 比较,不等转移 3 CLR bit CPL A CPL C CPL bit DA A DEC A DEC Rn DEC data DEC @Ri DIV AB DJNZ Rn,rel DJNZ data,rel INC A INC Rn INC data INC @Ri INC DPTR 18—1F 15 16;17 84 D8—DF D5 04 08—0F 05 06;07 A3 20 10 40 73 30 JB bit,rel JBC bit,rel JC rel JMP @A+DPTR JNB bit,rel JNC rel JNZ rel 若 C≠1 则转移 若 A≠0 则转移 若 A=0 则转移 子程序调用 长转移 寄存器送 A 直接字节送 A 间接 RAM 送 A 立接数送 A A 送寄存器 直接数送寄存器 立即数送寄存器 A 送直接字节 寄存器送直接字节 直接字节送直接字节 间接 Rn 送直接字节 立即数送直接字节 A 送间接 Rn 直接字节送间接 Rn 立即数送间接 Rn 16 位常数送数据指针 直接位送进位位 进位位送直接位 A+DPTR 寻址程序存贮字节送 A A+PC 寻址程序存贮字节送 A 外部数据送 A(8 位地址) 外部数据送 A(16 位地址) A 送外部数据(8 位地址) A 送外部数据(16 位地址) A 乘 B 空操作 寄存器或到A 直接字节或到A 间接RAM或到A 2 2 2 3 3 1 2 1 2 1 2 2 2 2 3 2 3 1 1 2 3 2 2 3 1 1 1 1 1 1 1 3 2 2 2 2 2 2 2 50 70 60 12 02 E8--EF E5 E6--E7 74 F8--FF A8--AF 78--7F F5 85 86;87 75 F6;F7 A6;A7 76;77 90 A2 92 93 83 E2;E3 E0 F2;F3 F0 A4 00 48—4F 45 46;47 JZ rel LCALL addr 16 LJMP addr 16 MOV A,Rn MOV A,data MOV A,@Ri MOV A,#data MOV Rn,A MOV Rn,data 1 1 1 1 1 2 1 1 2 2 2 2 1 2 1 1 2 2 2 2 2 2 2 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 DPTR,#data 1 88—8F MOV C,bit MOV bit,C MOVC A,@A+DPTR MOVC A,@A+PC MOVX A,@Ri MOVX A,@DPTR MOVX @Ri,A MOVX @DPTR,A MUL AB NOP ORL A,Rn ORL A,data ORL A,@Ri 4 1 2 1 1

SCON 串行控制寄存器(98H) SCON SM0 SM1 SM2 REN 98H 9F 9E 9D 9C SM0:串行模式选择。 SM1:串行口选择。

TB8 9B RB8 9A T1 99 R1 98 SCON SM2:模式 0 时 SM2 必需为 0,模式 1 时,当接收到的停止位不正确时 RI 不操

作,在模式 2 与 3 时,当 SM2=1 时,接收妻的第 9 个数据为 0 时,RI 不 操作。

REN:由软件设置,REN=1 时,接收串行数据输入。 TEB8:在模式 2 与 3 时,传送的第 9 位数据由软件控制。 RB8:在模式 0 时此位无效。

在模式 1 时,如 SM2=0,则 RB8 接收停止位数据。

在模式 2 与 3 时,传送的第 9 位数据放在这里。

TI:传送中断标志位,在模式 0 时第 8 位数据结束时,硬件自动将此位置 1。 其它模式时,在停止位开始时设置此位为 1,需由软件清除。

RI:接收中断标志位,在模式 0 时,第 8 位结束时,硬件会将此位置 1,在其

它模式时,在停止位的一半时间内由硬件会将此位置(见 SM2),此位需 由软件清除。

PCON 电源控制寄存器(87H) 87H SMOD - - - GF1 GF0 PD IDL PCON SMOD:双倍波特率控制位,当 SMOD=1 时为双波特率发送。

GF1、GF0:一般用途。

PD:电源下降控制位,PD=1 时为电源下降模式。 IDL:IDLE 模式控制位,IDL=1 时为 IDLE 模式。

本文来源:https://www.bwwdw.com/article/cpm.html

Top