指令中常用符号说明
Rn
当前寄存器区的8个工作寄存器R0~R7(n=0~7)
Ri
当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1)
Direct
8位内部数据寄存器单元的地址及特殊功能寄存器的地址
汇编指令汇总
#data
表示8位常数(立即数)
#data16
表示16位常数
Add16
表示16位地址
Addr11
表示11位地址
Rel
8位代符号的地址偏移量
Bit
表示位地址
@
间接寻址寄存器或基址寄存器的前缀
( )
表示括号中单元的内容
(( ))
表示间接寻址的内容
指令系统
数据传送指令(8个助记符)
助记符
中英文注释
MOV
Move 移动
MOV A , Rn        ;Rn→A,寄存器Rn的内容送到累加器A
MOV A , Direct    ;(direct)→A,直接地址的内容送A
MOV A ,@ Ri        ;(Ri)→A,RI间址的内容送A
MOV A , #data        ;data→A,立即数送A
MOV Rn , A        ;A→Rn,累加器A的内容送寄存器Rn
MOV Rn ,direct    ;(direct)→Rn,直接地址中的内容送Rn
MOV Rn , #data    ;data→Rn,立即数送Rn
MOV direct , A        ;A→(direct),累加器A中的内容送直接地址中
MOV direct , Rn    ;(Rn)→direct,寄存器的内容送到直接地址
MOV direct , direct    ;(direct)→direct,直接地址的内容送到直接地址
MOV direct , @Ri    ;((Ri))→direct,间址的内容送到直接地址
MOV direct , #data    ;8位立即数送到直接地址中
MOV @Ri , A        ;(A)→@Ri,累加器的内容送到间址中
MOV @Ri , direct    ;direct→@Ri,直接地址中的内容送到间址中
MOV @Ri , #data    ; data→@Ri ,8位立即数送到间址中
MOV DPTR , #data16    ;data16→DPTR,16位常数送入数据指针寄存器,高8位送入DPH,低8位送入DPL中(单片机中唯一一条16位数据传送指令)
(MOV类指令共16条)
MOVC
Move Cod 查表指令
MOVC A , @A+PC        ;PC+1→PC,(A+PC)→A
MOVC A , @A+DPTR    ;(A+DPTR) →A
(MOVC类指令共两条)
MOVX
Move External 与外部数据寄存区传送数据
MOVX A , @DPTR        ;(DPTR)→A,DPTR间址单元内容送A
MOVX @DPTR , A        ;A→(DPTR),A中内容送入DPTR间址单元
MOVX A , @Ri            ;(Ri)→A,Ri间址单元内容送A
MOVX @Ri , A            ;A→(Ri),A中内容送Ri间址单元
(MOVX类指令4条)
XCH
Exchange 交换指令
XCH A , Rn    ;RnA , Rn的内容与A的内容交换
XCH A , Direct    ; Direct A , 直接地址的内容与A的内容交换
XCH A , @Ri    ;(Ri)A , 间址的内容与A的内容交换
XCHD
Exchange Decimal十进制交换
XCHD A , @Ri    ;(Ri.3~Ri.0) A.3~A.0,间址内容低四位与A中内容低四位交换
SWAP
Swap 交换
SWAP A        ;A.3~A.0 A.7~A.4 , A中低四位与高四位内容交换
PUSH
Push 入栈
PUSH direct    ;SP+1SP , (direct)(SP)
            ;直接地址内容压入堆栈顶
POP
Pop 出栈
POP direct    ;(SP)(direct) , SP-1SP
            ;堆栈内容弹出到直接地址
算术运算类指令(7个助记符)
ADD
Add 加法运算
ADD A , Rn    ;A + RnA , A与Rn的内容相加,结果送到A中
ADD A , direct    ;(direct)+AA,A与直接地址的内容相加,结果送到A中
ADD A , @Ri    ;((Ri))+AA, A与间址中的内容相加,结果送到A中
ADD A , #data    ;data+AA,A与立即数相加,和送入A
ADDC
ADD with Carry 带进位加法
ADDC A , Rn        ;A + Rn+CYA , A与Rn的内容、进位状态相加,结果送到A中
ADDC A , direct    ;(direct)+A+CYA,A与直接地址的内容、进位状态相加,结果送到A中
ADDC A , @Ri        ;((Ri))+A+CYA, A与间址中的内容、进位状态相加,结果送到A中
ADDC A , #data    ;data+A+CYA,A与立即数、进位状态相加,和送入A
SUBB
Subbtract with Borrow 带进位减法
SUBB A , Rn        ;A-Rn-CYA,A减寄存器Rn的内容及进位标志,结果送A
SUBB A , direct    ; A-(direct)-CYA,A直接地址的内容及进位标志,结果送A
SUBB A , @Ri        ; A-((Ri))-CYA,A间址的内容及进位标志,结果送A
SUBB A , #data        ; A-data-CYA,A立即数及进位标志,结果送A
MUL
Multiply 乘法指令
MUL AB        ;A x BB和A,结果16位,高8位存入B,低8位存入A
            ;若结果大于FFH,则将溢出标志OV置1
DIV
Divide  除法指令
DIV AB        ;A÷B 商→A,余数→B
            ;若除数为0,结果不确定,则将溢出标志OV置1
INC
Increment 加1指令
INC A        ;A+1A,A加1,结果放在A
INC Rn        ; Rn +1 Rn, Rn加1,结果放在Rn
INC direct    ; (direct) +1 direct,直接地址的内容加1,结果放在该地址中
INC @Ri        ;((Ri))+1( Ri),间址中的内容加1,结果放在该间址中
INC DPTR        ;(DPTR)+1DPTR,数据指针内容加1,结果放在数据指针寄存器(DPTR)中
DEC
Decrement 减1指令
INC A        ;A-1A,A减1,结果放在A
INC Rn        ; Rn -1 Rn, Rn减1,结果放在Rn
INC direct    ; (direct) -1 direct,直接地址的内容减1,结果放在该地址中
INC @Ri        ;((Ri))-1( Ri),间址中的内容减1,结果放在该间址中
DA
Decimal Adjust  十进制加法调整指令
DA A            ;在加法指令后,把A中二进制码自动调整为BCD码
            ;DA  A只能更跟在ADD或ADDC加法指令后,不适用于减法
逻辑运算指令(9个助记符)
ANL
Logical And  逻辑与运算
ANL A , Rn        ; (A)与(Rn)→A, A的内容与Rn中的内容相与,结果放在A中
ANL A , direct        ; (A)与(direct)→A, A的内容与直接地址中的内容相与,结果放在A中
ANL A , @Ri        ; (A)与((Ri))→A, A的内容与间址的内容相与,结果放在A中
ANL A , #data        ; (A)与(data)→A, A的内容与立即数相与,结果放在A中
ANL direct , A        ; (direct)与(A)→direct, 直接地址中的内容相与A的内容相与,结果放在直                接地址中
ANL direct , #data    ;(direct)与#data→direct, 直接地址中的内容相与立即数相与,结果放在直                接地址中
ORL
Logical OR 逻辑或运算
ORL A , Rn        ; (A) 或(Rn)→A, A的内容与Rn中的内容相或,结果放在A中
ORL A , direct        ; (A) 或(direct)→A, A的内容与直接地址中的内容相或,结果放在A中
ORL A , @Ri        ; (A) 或((Ri))→A, A的内容与间址的内容相或,结果放在A中
ORL A , #data        ; (A) 或(data)→A, A的内容与立即数相或,结果放在A中
ORL direct , A        ; (direct) 或A)→direct, 直接地址中的内容相与A的内容相或,结果放在                    直接地址中
ORL direct , #data    ;(direct) 或#data→direct, 直接地址中的内容相与立即数相或,结果放在                    直接地址中
XRL
Logical exclusive or 逻辑异或运算
ORL A , Rn        ; (A) 异或(Rn)→A, A的内容与Rn中的内容相异或,结果放在A中
ORL A , direct        ; (A) 异或(direct)→A, A的内容与直接地址中的内容相异或,结果放在A中
ORL A , @Ri        ; (A) 异或((Ri))→A, A的内容与间址的内容相异或,结果放在A中
ORL A , #data        ; (A) 异或(data)→A, A的内容与立即数相异或,结果放在A中
ORL direct , A        ; (direct) 或A)→direct, 直接地址中的内容相与A的内容相异或,结果放                    在直接地址中
ORL direct , #data    ;(direct) 异或#data→direct, 直接地址中的内容相与立即数相异或,结果放在直接地址
RL
Rotate Left 循环左移指令
RL A            ;每执行一次,A中的内容左移一位
RR
Rotate Right 循环右移指令
RR A            ;每执行一次,A中的内容右移一位
RLC
Rotate Left with the Carry flag 带进位循环左移指令
RLC A        ;每执行一次,CY和A中的内容左移一位
RRC
Rotate Right with the Carry flag带进位循环又移指令
RRC A        ;每执行一次,CY和A中的内容右移一位
注意:循环移位指令只能对A中的内容进行移位操作
CPL
Complement 取反指令(求补指令)
CPL A        ;累加器内容按位取反,0变1,1变0
CLR
Clear 清零指令
CLR A        ;累加器清零(A各位全变为0)
控制转移指令(9个助记符)
LJMP
Long Jump 长跳转指令
LJMP add16        ;add16PC,无条件跳转到add16地址,可在64KB范围内转移
AJMP
Absolute Jump 绝对跳转指令
AJMP add11        ;add11PC,无条件跳转到add11地址,可在2KB范围内转移
SJMP
Short Jump 短跳转指令
SJMP rel            ;PC+2+relPC,rel是偏移量,8位有符号数(-127~127),可向前后跳转
                ±128个地址单元
JMP
Jump 跳转指令
JMP @A+DPTR    ;A+DPTRPC,属于散转指令,无条件转向A与DPTR内容相加后形成的新
                地址
JZ
Jump if acc is Zero累加器为零转移
JZ rel        ;A=0转向PC+2+relPC,A≠0,顺序执行
JNZ
Jump if acc is Not Zero累加器不为零转移
JNZ rel        ;A≠0转向PC+2+relPC,A=0,顺序执行
CJNE
Compare and Jump if Not Equal比较不相等则转移
CJNE A , direct , rel        ;A≠(direct)转向PC+3+relPC,否则顺序执行(PC+3 PC)
                    ;(A)>(direct)CY=0, (A)<(direct)CY=1
CJNE A , #data , rel        ;A≠(data)转向PC+3+relPC,否则顺序执行(PC+3 PC)
                    ;(A)>(data)CY=0,( A)<(data)CY=1
CJNE Rn , #data , rel    ; Rn≠(data)转向PC+3+relPC,否则顺序执行(PC+3 PC)
                    ; (Rn) >(data)CY=0, (Rn) <(data)CY=1
CJNE @Ri , #data , rel    ;((Ri))≠(data)转向PC+3+relPC,否则顺序执行(PC+3 PC)
                    ; ((Ri))>(data)CY=0, ((Ri)) <(data)CY=1
DJNE
Decrement and Jump if Not Zero 减1不为0则转移
DJNE Rn , rel            ;Rn-1Rn, Rn≠0转向PC+2+relPC,否则顺序执行(PC+2PC)
DJNZ direct , rel        ;(direct-1)direct, direct≠0转向PC+2+relPC,否则顺序执行
                    (PC+2PC)
LCALL
Long Call 长条用指令
LCALL addr16            ;调用程序入口地址为addr16的之程序
ACALL
Absolute Call短调用
ACALL addr11            ;调用程序入口地址为addr11的之程序
RET
Return
RET                    ;放在子程序最后,使程序准确返回到主程序断点处
RETI
Return from Interrupt
RETI                    ;中断返回指令,能清楚优先级状态
NOP
No Operation 空操作指令
NOP                    ;空操作,产生一个机器周期延时
位操作指令
MOV
Move 数据传送指令
MOV C , bit            ;(bit)→C,寻址位的状态送入C
MOV bit , C            ;(C)→bit,C的转态送入地址中
CLR
Clear 清零指令
CLR C        ;0C,清零累加器
CLR bit        ;清零直接寻址位
CPL
Complement 取反指令(求补指令)
CPL C        ;c取反
CPL bit        ;直接寻址位取反
SETB
Set Bit 置位
SETB C        ;C置1
SETB bit        ;直接寻址位置1
ANL
And Logical 与逻辑运算
ANL C , bit    ;直接寻址位与C相与,结果放在C
ANL C , /bit    ; 直接寻址位与非C相与,结果放在C
ORL
OR Logical 或逻辑运算
ORL C , bit    ;直接寻址位与C相或,结果放在C
ORL C , /bit    ; 直接寻址位与非C相或,结果放在C
JC
Jump if Carry is set 进位位为1则转移
JC rel        ;C=1,转向PC+2+rel→PC,否则顺序执行PC+2→PC
JNC
Jump if Carry is Not set 进位位为不为1则转移
JNC rel        ;C=0,转向PC+2+rel→PC,否则顺序执行PC+2→PC
JB
Jump if Bit is set 进位位为1则转移