汇编指令
主要介绍汇编指令常用命令。
一、数据传送指令
数据传送指令 | |
---|---|
MOV | (Move)对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送 |
MOVX | (Move External RAM)对外部存储器的数据传送 |
XCH | (Exchange)字节交换 |
XCHD | (Exchange Low-order Digit)低半字节交换 |
PUSH | (Push onto Stack)入栈 |
POP | (Pop from Stack)出栈 |
二、算术运算指令
算术运算指令 | |
---|---|
ADD | (Addition)加法 |
ADDC | (Add with Carry)带进位加法 |
SUBB | (Subtract with Borrow)带借位减法 |
DA | (Decimal Adjust)十进制调整 |
INC | (Increment)加1 |
DEC | (Decrement)减1 |
MUL | (Multiplication Multiply)乘法 |
DIV | (Division Divide)除法 |
三、逻辑运算类指令
逻辑运算类指令 | |
---|---|
ANL | (AND Logic)逻辑与 |
ORL | (OR Logic)逻辑或 |
XRL | (Exclusive-OR Logic)逻辑异或 |
CLR | (Clear)清零 |
CPL | (Complement)取反 |
RL | (Rotate left)循环左移 |
RLC | (RL throught the carry flag)带进位循环左移 |
SWAP | (Swap)低4位与高4位交换 |
四、控制转移类指令
控制转移类指令 | |
---|---|
ACCALL | (Absolute subroutine Call)子程序绝对调用 |
LCALL | (Long subrout Call)子程序常调用 |
RET | (Return from Interruption)子程序返回 |
RET1 | (Return from Interruption)中断返回 |
SJMP | (Short jump)短转移 |
AJMP | (Absolute jump)绝对转移 |
LJMP | (Long Jump)长转移 |
CJNE | (Compare Jump if Not Equal)比较不等则转 |
DJNZ | (Decrement Jump if Not Zero)减1不为0则转 |
JZ | (Jump if zero)结果为0则跳转 |
JNZ | (Jump if Not Zero)结果不为0则跳转 |
JC | (Jump if Not carry flag is set)有进位则转移 |
JB | (Jump if the Bit is set)位为1则转移 |
JNB | (Jump if the Bit is Not set)位为0则转移 |
JBC | (JB and Clear the bit)位为1则转并清除该位 |
NOP | (No Operation)空操作 |
五、位操作指令
位操作指令 | |
---|---|
CLR | 位清零 |
SETB | (Set Bit)位置1 |
六、常用伪指令
常用伪指令 | |
---|---|
1.ORG 16位地址此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址 | |
2.【标号】DB 字节数据项表:奖项表中的字节数据存放到从标号开始的连续字节单元中。 | 例如SEG:DB 88H, 100,”7” ,”C” |
3.【标号】DW 双字节数据项表:定义16位地址表,16地址按低位地址存低位字节,高位地址存高位字节。 | 例如TAB:DW 1234H, 7BH |
4.名字 EQU 表达式 或名字=表达式:用于给一个表达式赋值或给字符串起名字。之后名字可用作程序地址,数据地址或立即数地址使用。名字必须是一字母开头的字母数据串。 | 例如:COUNT=10或SPACE EQU 10H |
5.名字 DATA 直接字节地址:给8位外部RAM单元起个名字,名字必须是一字母开头的字母数据串。同一单元可起多个名字。 | 例如:ERROR DATA 80H |
6.XDATA直接字节地址:给8位外部RAM起个名字,名字规定同DATA伪指令。、 | 例如:IO_POTR XDATA OCF04H |
7.名字 Bit 指令:给一位可寻址的位单元起个名字,规定同DATA伪指令。 | 例如SWT BIT 30H |
8.【标号】END:指出源程序到此结束,汇编对其后的程序语句不予理睬。源程序只在主程序最后使用一个END。 |
七、指令集
指令集(111条)
1、数据传送指令
数据传送指令 | (30条) |
---|---|
MOV A,Rn | 寄存器送 A |
MOV A,data | 直接字节送A |
MOV A,@Ri | 间接RAM送A |
MOV A,#data | 立接数送A |
MOV Rn,A | A送寄存器 |
MOV Rn,data | 直接数送寄存器 |
MOV Rn,#data | 立即数送寄存器 |
MOV data,A | A送直接字节 |
MOV data,Rn | 寄存器送直接字节 |
MOV data,data | 直接字节送直接字节 |
MOV data,@R | 间接Rn送直接字节 |
MOV data,#data | 立即数送直接字节 |
MOV @Ri,A | A送间接Rn |
MOV @Ri,data | 直接字节送间接Rn |
MOV @Ri,#data | 立即数送间接Rn |
MOV DPTR,#data16 | 16位常数送数据值针 |
MOV C,bit | 直接位送进位位 |
MOV bit,C | 进位位送直接位 |
MOVC A,@A+DPTR | A+DPTR 寻址程序存贮字节送A |
MOVC A,@A+PC | A+PC 寻址程序存贮字节送A |
MOVC A,@Ri | 外部数据送A(8位地址) |
MOVX A,@DPTR | 外部数据送A(16位地址) |
MOVX @Ri,A | A 送外部数据(8位地址) |
MOVX @DPTR,A | A 送外部数据(16位地址) |
PUSH data | 直接字节进栈道,SP加1 |
POP data | 直接字节出栈,SP减1 |
XCH A,Rn | 寄存器与A交换 |
XCH A,data | 直接字节与A交换 |
XCH A,@Ri | 间接Rn与A交换 |
XCHD A,@Ri | 间接Rn与A低半字节交换 |
2、逻辑运算指令
逻辑运算指令 | (35条) |
---|---|
ANL A,Rn | 寄存器于到A |
ANL A,data | 直接字节与到A |
ANL A,@Ri | 间接RAM与到A |
ANL A,#data | 立即数与到A |
ANL data,A | A与到直接字节 |
ANL data,#data | 立即数与到直接字节 |
ANL C,bit | 直接位与到进位位 |
ANL C,/bit | 直接位的反码与到进位位 |
ORL A,Rn | 寄存器或到A |
ORL A,data | 直接字节或到A |
ORL A,@Ri | 间接RAM或到A |
ORL A,#data | 立即数或到A |
ORL data,A | A或到直接字节 |
ORL data,#data | 立即数或到直接字节 |
ORL C,bit | 直接位或到进位位 |
ORL C,/bit | 直接位的反码或到进位位 |
XRL A,Rn | 寄存器异或到A |
XRL A,data | 直接字节异或到A |
XRL A,@Ri | 间接RAM异或到A |
XRL A,#data | 立即数异或到A |
XRL data,#data | 立即数或到直接字节 |
XRL data,A | A异或到直接字节 |
SETB C | 进位置1 |
SETB bit | 直接位置1 |
CLR A | A清0 |
CLR C | 进位位清0 |
CLR bit | 直接位清0 |
CPL A | A 求反码 |
CPL C | 进位位取反 |
CPL bit | 直接位取反 |
RL A | A循环左移一位 |
RLC A | A 带进位左移一位 |
RR A | A 右移一位 |
RRC A | A 带进位右移一位 |
SWAP A | A半字节交换 |
3、算术运算指令
算术运算指令 | (24条) |
---|---|
ADD A,Rn | 寄存器加到A |
ADD A,data | 直接字节加到A |
ADD A,@Ri | 间接RAM加到A |
ADD A,#data | 立即数加到A |
ADDC A,Rn | 寄存器带进位加到A |
ADDC A,data | 直接字节带进位加到A |
ADDC A,@Ri | 间接RAM带进位加到A |
ADDC A,#data | 立即数带进位加到A |
SUBB A,Rn | 从A中减去寄存器和进位 |
SUBB A,data | 从A中减去直接字节和进位 |
SUBB A,#data | 从A中减去立即数和进位 |
INC A | A加1 |
INC Rn | 寄存器加1 |
INC data | 直接字节加1 |
INC @Ri | 间接RAM加1 |
INC DPTR | 数据指针加1 |
DEC A | A减1 |
DEC Rn | 寄存器减1 |
DEC data | 直接字节减1 |
DEC @Ri | 间接RAM减1 |
MUL AB | A乘B |
DIV AB | A被B除 |
DA A | A十进制调整 |
4、转移指令
转移指令 | (22条) |
---|---|
AJMP addr 11 | 绝对转移 |
LJMP addr 16 | 长转移 |
SJMP rel | 短转移 |
JMP @A+DPTR | 相对DPTR间接转移 |
JZ rel | 若A=0则转移 |
JNZ rel | 若A不等于0则转移 |
JC rel | 若C=1则转移 |
JNC rel | 若C不等于1则转移 |
JB bit,rel | 若直接位=1则转移 |
JNB bit,rel | 若直接位=0则转移 |
JBC bit,rel | 若直接位=1则转移且清零 |
CJNE A,data,rel | 直接数与A比较,不等转移 |
CJNE A,#data,rel | 立即数与A比较,不等转移 |
CJNE @Ri,#data,rel | 立即数与间接RAM比较,不等转移 |
CJNE Rn,#data,rel | 立即数与寄存器比较,不等转移 |
DJNZ Rn,rel | 寄存器减1不为0转移 |
DJNZ data,rel | 直接字节减1不为0转移 |
ACALL addr 11 | 绝对子程序调用 |
LCALL addr 16 | 子程序调用 |
RET | 子程序调用返回 |
RETI | 中断程序调用返回 |
NOP | 空操作 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Valen的博客!