汇编指令
主要介绍汇编指令常用命令。
一、数据传送指令
| 数据传送指令 | |
|---|---|
| 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的博客!

