主要介绍汇编指令常用命令。

一、数据传送指令
数据传送指令
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 空操作