8086与8051指令对比.docx
《8086与8051指令对比.docx》由会员分享,可在线阅读,更多相关《8086与8051指令对比.docx(75页珍藏版)》请在冰豆网上搜索。
![8086与8051指令对比.docx](https://file1.bdocx.com/fileroot1/2023-1/10/4712c6fa-20dd-4921-be16-b6c0f396c6d1/4712c6fa-20dd-4921-be16-b6c0f396c6d11.gif)
8086与8051指令对比
8086指令集
一、数据传输指令
作用:
它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.
1.通用数据传送指令.
MOV传送字或字节.
MOVSX先符号扩展,再传送.
MOVZX先零扩展,再传送.
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交换字或字节.(至少有一个操作数为寄存器,段寄存器不可作为操作数)
CMPXCHG比较并交换操作数.(第二个操作数必须为累加器AL/AX/EAX)
XADD先交换再累加.(结果在第一个操作数里)
XLAT字节查表转换.
BX指向一张256字节的表的起点,AL为表的索引值(0-255,即0-FFH);返回AL为查表结果.([BX+AL]->AL)
2.输入输出端口传送指令.
INI/O端口输入.(语法:
IN累加器,{端口号│DX})
OUTI/O端口输出.(语法:
OUT{端口号│DX},累加器)
输入输出端口由立即方式指定时,其范围是0-255;由寄存器DX指定时,其范围是0-65535.
3.目的地址传送指令.
LEA装入有效地址.
例:
LEADX,string;把偏移地址存到DX.
LDS传送目标指针,把指针内容装入DS.
例:
LDSSI,string;把段地址:
偏移地址存到DS:
SI.
LES传送目标指针,把指针内容装入ES.
例:
LESDI,string;把段地址:
偏移地址存到ESI.
LFS传送目标指针,把指针内容装入FS.
例:
LFSDI,string;把段地址:
偏移地址存到FSI.
LGS传送目标指针,把指针内容装入GS.
例:
LGSDI,string;把段地址:
偏移地址存到GSI.
LSS传送目标指针,把指针内容装入SS.
例:
LSSDI,string;把段地址:
偏移地址存到SS
I.
4.标志传送指令.
LAHF标志寄存器传送,把标志装入AH.
SAHF标志寄存器传送,把AH内容装入标志寄存器.
PUSHF标志入栈.
POPF标志出栈.
PUSHD32位标志入栈.
POPD32位标志出栈.
二、算术运算指令
ADD加法.
ADC带进位加法.
INC加1.
AAA加法的ASCII码调整.
DAA加法的十进制调整.
SUB减法.
SBB带借位减法.
DEC减1.
NEC求反(以0减之).
CMP比较.(两操作数作减法,仅修改标志位,不回送结果).
AAS减法的ASCII码调整.
DAS减法的十进制调整.
MUL无符号乘法.
IMUL整数乘法.
以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),
AAM乘法的ASCII码调整.
DIV无符号除法.
IDIV整数除法.
以上两条,结果回送:
商回送AL,余数回送AH,(字节运算);
或商回送AX,余数回送DX,(字运算).
AAD除法的ASCII码调整.
CBW字节转换为字.(把AL中字节的符号扩展到AH中去)
CWD字转换为双字.(把AX中的字的符号扩展到DX中去)
CWDE字转换为双字.(把AX中的字符号扩展到EAX中去)
CDQ双字扩展.(把EAX中的字的符号扩展到EDX中去)
三、逻辑运算指令
AND与运算.
OR或运算.
XOR异或运算.
NOT取反.
TEST测试.(两操作数作与运算,仅修改标志位,不回送结果).
SHL逻辑左移.
SAL算术左移.(=SHL)
SHR逻辑右移.
SAR算术右移.(=SHR)
ROL循环左移.
ROR循环右移.
RCL通过进位的循环左移.
RCR通过进位的循环右移.
以上八种移位指令,其移位次数可达255次.
移位一次时,可直接用操作码.如SHLAX,1.
移位>1次时,则由寄存器CL给出移位次数.
如MOVCL,04SHLAX,CL
8086/8088汇编语言指令集
数据传送指令集
MOV
功能:
把源操作数送给目的操作数
语法:
MOV 目的操作数,源操作数
格式:
MOV r1,r2
MOV r,m
MOV m,r
MOV r,data
XCHG
功能:
交换两个操作数的数据
语法:
XCHG
格式:
XCHG r1,r2 XCHG m,r XCHG r,m
PUSH,POP
功能:
把操作数压入或取出堆栈
语法:
PUSH 操作数 POP 操作数
格式:
PUSH r PUSH M PUSH data POP r POP m
PUSHF,POPF,PUSHA,POPA
功能:
堆栈指令群
格式:
PUSHF POPF PUSHA POPA
LEA,LDS,LES
功能:
取地址至寄存器
语法:
LEA r,m LDS r,m LES r,m
XLAT(XLATB)
功能:
查表指令
语法:
XLAT XLAT m
算数运算指令
ADD,ADC
功能:
加法指令
语法:
ADD OP1,OP2 ADC OP1,OP2
格式:
ADD r1,r2 ADD r,m ADD m,r ADD r,data
影响标志:
C,P,A,Z,S,O
SUB,SBB
功能:
减法指令
语法:
SUB OP1,OP2 SBB OP1,OP2
格式:
SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data
影响标志:
C,P,A,Z,S,O
INC,DEC
功能:
把OP的值加一或减一
语法:
INC OP DEC OP
格式:
INC r/m DEC r/m
影响标志:
P,A,Z,S,O
NEG
功能:
将OP的符号反相(取二进制补码)
语法:
NEG OP
格式:
NEG r/m
影响标志:
C,P,A,Z,S,O
MUL,IMUL
功能:
乘法指令
语法:
MUL OP IMUL OP
格式:
MUL r/m IMUL r/m
影响标志:
C,P,A,Z,S,O(仅IMUL会影响S标志)
DIV,IDIV
功能:
除法指令
语法:
DIV OP IDIV OP
格式:
DIV r/m IDIV r/m
CBW,CWD
功能:
有符号数扩展指令
语法:
CBW CWD
AAA,AAS,AAM,AAD
功能:
非压BCD码运算调整指令
语法:
AAA AAS AAM AAD
影响标志:
A,C(AAA,AAS) S,Z,P(AAM,AAD)
DAA,DAS
功能:
压缩BCD码调整指令
语法:
DAA DAS
影响标志:
C,P,A,Z,S
位运算指令集
AND,OR,XOR,NOT,TEST
功能:
执行BIT与BIT之间的逻辑运算
语法:
AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/d
ata NOT r/m
影响标志:
C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位
SHR,SHL,SAR,SAL
功能:
移位指令
语法:
SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL
影响标志:
C,P,Z,S,O
ROR,ROL,RCR,RCL
功能:
循环移位指令
语法:
ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL
影响标志:
C,P,Z,S,O
程序流程控制指令集
CLC,STC,CMC
功能:
设定进位标志
语法:
CLC STC CMC
标志位:
C
CLD,STD
功能:
设定方向标志
语法:
CLD STD
标志位:
D
CLI,STI
功能:
设定中断标志
语法:
CLI STI
标志位:
I
CMP
功能:
比较OP1与OP2的值
语法:
CMP r/m,r/m/data
标志位:
C,P,A,Z,O
JMP
功能:
跳往指定地址执行
语法:
JMP 地址
JXX
功能:
当特定条件成立则跳往指定地址执行
语法:
JXX 地址
注:
A:
ABOVE,当C=0,Z=0时成立
B:
BELOW,当C=1时成立
C:
CARRY,当弁时成立 CXZ:
CX寄存器的值为0(ZERO)时成立
E:
EQUAL,当Z=1时成立
G:
GREATER(大于),当Z=0且S=0时成立
L:
LESS(小于),当S不为零时成立
N:
NOT(相反条件),需和其它符号配合使用
O:
OVERFLOW,O=1时成立
P:
PARITY,P=1时成立
PE:
PARITY EVEN,P=1时成立
PO:
PARITY ODD,P=0时成立
S:
SIGN,S=1时成立
Z:
ZERO,Z=1时成立
LOOP
功能:
循环指令集
语法:
LOOP 地址
LOOPE(Z)
地址 LOOPNE(Z) 地址
标志位:
无
CALL,RET
功能:
子程序调用,返回指令
语法:
CALL 地址 RET RET n
标志位:
无
INT,IRET
功能:
中断调用及返回指令
语法:
INT n IRET
标志位:
在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆
栈中的标志值弹回寄存器
字符串操作指令集
MOVSB,MOVSW,MOVSD
功能:
字符串传送指令
语法:
MOVSB MOVSW MOVSD
标志位:
无
CMPSB,CMPSW,CMPSD
功能:
字符串比较指令
语法:
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而定
按功能排列
1.数据传送指令
80C51汇编指令集
助记符
说明
字节周期
代码
MOVA,Rn
MOVA,data
MOVA,@Ri
MOVA,#data
MOVRn,A
MOVRn,data
MOVRn,#data
MOVdata,A
MOVdata,Rn
MOVdata,data
MOVdata,@Ri
MOVdata,#data
MOV@Ri,A
MOV@Ri,data
MOV@Ri,#data
寄存器送A
直接字节送A
间接RAM送A
立接数送A
A送寄存器
直接数送寄存器
立即数送寄存器
A送直接字节
寄存器送直接字节
直接字节送直接字节
间接Rn送直接字节
立即数送直接字节
A送间接Rn
直接字节送间接Rn
立即数送间接Rn
1
2
1
2
1
2
2
2
2
3
2
3
1
1
2
1
1
1
1
1
2
1
1
1
2
2
2
2
1
2
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
MOVDPTR,#data1616位常数送数据指针
3
1
90
MOVC,bit
MOVbit,C
MOVCA,@A+DPTR
MOVCA,@A+PC
MOVXA,@Ri
MOVXA,@DPTR
MOVX@Ri,A
MOVX@DPTR,A
PUSHdata
POPdata
XCHA,Rn
XCHA,data
XCHA,@Ri
XCHDA,@Ri
直接位送进位位
进位位送直接位
A+DPTR寻址程序存贮字节送A
A+PC寻址程序存贮字节送A
外部数据送A(8位地址)
外部数据送A(16位地址)
A送外部数据(8位地址)
A送外部数据(16位地址)
直接字节进栈道,SP加1
直接字节出栈,SP减1
寄存器与A交换
直接字节与A交换
间接Rn与A交换
间接Rn与A低半字节交换
2
2
3
1
1
1
1
1
2
2
1
2
1
1
1
2
2
2
2
2
2
2
2
2
1
1
1
1
A2
92
93
83
E2;E3
E0
F2;F3
F0
C0
D0
C8—CF
C5
C6;C7
D6;D7
2.逻辑运算指令
助记符
说明
字节周期
代码
ANLA,Rn
ANLA,data
ANLA,@Ri
ANLA,#data
ANLdata,A
寄存器与到A
直接字节与到A
间接RAM与到A
立即数与到A
A与到直接字节
1
2
1
2
2
1
1
1
1
1
58—5F
55
56;57
54
52
ANLdata,#data立即数与到直接字节
3
2
53
ANLC,bit
ANLC,/bit
ORLA,Rn
ORLA,data
ORLA,@Ri
ORLA,#data
ORLdata,A
直接位与到进位位
直接位的反码与到进位位
寄存器或到A
直接字节或到A
间接RAM或到A
立即数或到A
A或到直接字节
2
2
3
2
2
2
2
2
2
2
1
1
1
1
82
B0
48—4F
45
46;47
44
42
ORLdata,#data立即数或到直接字节
2
1
43
ORLC,bit
ORLC,/bit
XRLA,Rn
XRLA,data
XRLA,@Ri
XRLA,#data
XRLdata,A
直接位或到进位位
直接位的反码或到进位位
寄存器异或到A
直接字节异或到A
间接RAM异或到A
立即数异或到A
A异或到直接字节
2
2
3
1
2
1
2
2
2
2
1
1
1
1
72
A0
68—6F
65
66;67
64
62
XRLdata,#data立即数异或到直接字节
2
1
63
SETBC
SETBbit
CLRA
CLRC
CLRbit
CPLA
CPLC
CPLbit
RLA
RLCA
进位位置1
直接位置1
A清0
进位位清0
直接位清0
A求反码
进位位取反
直接位取反
A循环左移一位
A带进位左移一位
1
2
3
1
2
1
1
2
1
1
1
1
2
1
1
1
1
1
1
1
D3
D2
E4
C3
C2
F4
B3
B2
23
33
RRA
RRCA
SWAPA
3.算术运算指令
A右移一位
A带进位右移一位
A半字节交换
1
1
1
1
1
1
03
13
C4
助记符
说明
字节周期代码
ADDA,Rn
寄存器加到A
1
128—2F
ADDA,data
ADDA,@Ri
ADDA,#data
直接字节加到A
间接RAM加到A
立即数加到A
2
1
2
1
1
1
25
26;27
24
ADDCA,Rn
寄存器带进位加到A
1
138—3F
ADDCA,data
ADDCA,@Ri
ADDCA,#data
SUBBA,Rn
SUBBA,data
SUBBA,@Ri
SUBBA,#data
INCA
直接字节带进位加到A
间接RAM带进位加到A
立即数带进位加到A
从A中减去寄存器和进位
从A中减去直接字节和进位
从A中减去间接RAM和进位
从A中减去立即数和进位
A加1
2
1
2
1
2
1
2
1
1
1
1
1
1
1
1
1
35
36;37
34
98—9F
95
96;97
94
04
INCRn
寄存器加1
1
108—0F
INCdata
INC@Ri
INCDPTR
DECA
直接字节加1
间接RAM加1
数据指针加1
A减1
2
1
1
1
1
1
2
1
05
06;07
A3
14
DECRn
寄存器减1
1
118—1F
DECdata
DEC@Ri
MULAB
DIVAB
DAA
3.转移指令
直接字节减1
间接RAM减1
A乘B
A被B除
A十进制调整
2
1
1
1
1
1
1
4
4
1
15
16;17
A4
84
D4
助记符
说明
字节周期代码
AJMPaddr11
LJMPaddr16
SJMPrel
绝对转移
长转移
短转移
2
3
2
2
2
2
*1
02
80
JMP@A+DPTR
JZrel
JNZrel
JCrel
JNCrel
JBbit,rel
JNBbit,rel
JBCbit,rel
CJNEA,data,rel
CJNEA,#data,rel
相对于DPTR间接转移
若A=0则转移
若A≠0则转移
若C=1则转移
若C≠1则转移
若直接位=1则转移
若直接位=0则转移
若直接位=1则转移且清除
直接数与A比较,不等转移
立即数与A比较,不等转移
1
2
2
2
2
3
3
3
3
3
2
2
2
2
2
2
2
2
2
2
73
60
70
40
50
20
30
10
B5
B4
CJNE@Ri,#data,rel立即数与间接RAM比较,不等转移
CJNERn,#data,rel立即数与寄存器比较不等转移
3
3
2
2
B6;B7
B8—BF
DJNZRn,rel
DJNZdata,rel
ACALLaddr11
LCALLaddr16
RET
RETI
NOP
按字母排列
1.数据传送指令
寄存器减1不为0转移
直接字节减1不为0转移
绝对子程序调用
子程序调用
子程序调用返回
中断程序调用返回
空操作
2
3
2
3
1
1
1
2
2
2
2
2
2
1
D8—DF
D5
*1
12
22
32
00
助记符
说明
字节周期代码
ACALLaddr11
绝对子程序调用
2
2
*1
ADDA,Rn
寄存器加到A
1
128—2F
ADDA,data
ADDA,@Ri
ADDA,#data
直接字节加到A
间接RAM加到A
立即数加到A
2
1
2
1
1
1
25
26;27
24
ADDCA,Rn
寄存器带进位加到A
1
138—3F
ADDCA,data
ADDCA,@Ri
ADDCA,#data
AJMPaddr11
直接字节带进位加到A
间接RAM带进位加到A
立即数带进位加到A
绝对转移
2
1
2
2
1
1
1
2
35
36;37
34
*1
ANLA,Rn
寄存器与到A
1
158—5F
ANLA,data
直接字节与到A
2
1
55
ANLA,@Ri
ANLA,#data
ANLdata,A
ANLdata,#data
ANLC,bit
ANLC,/bit
CJNEA,data,rel
CJNEA,#data,rel
间接RAM与到A
立即数与到A
A与到直