指令中常用符号说明
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 ;RnA , 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+1SP , (direct)(SP) ;直接地址内容压入堆栈顶 | |
POP | Pop 出栈 |
POP direct ;(SP)(direct) , SP-1SP ;堆栈内容弹出到直接地址 | |
●算术运算类指令(7个助记符) | |
ADD | Add 加法运算 |
ADD A , Rn ;A + RnA , A与Rn的内容相加,结果送到A中 ADD A , direct ;(direct)+AA,A与直接地址的内容相加,结果送到A中 ADD A , @Ri ;((Ri))+AA, A与间址中的内容相加,结果送到A中 ADD A , #data ;data+AA,A与立即数相加,和送入A | |
ADDC | ADD with Carry 带进位加法 |
ADDC A , Rn ;A + Rn+CYA , A与Rn的内容、进位状态相加,结果送到A中 ADDC A , direct ;(direct)+A+CYA,A与直接地址的内容、进位状态相加,结果送到A中 ADDC A , @Ri ;((Ri))+A+CYA, A与间址中的内容、进位状态相加,结果送到A中 ADDC A , #data ;data+A+CYA,A与立即数、进位状态相加,和送入A | |
SUBB | Subbtract with Borrow 带进位减法 |
SUBB A , Rn ;A-Rn-CYA,A减寄存器Rn的内容及进位标志,结果送A SUBB A , direct ; A-(direct)-CYA,A直接地址的内容及进位标志,结果送A SUBB A , @Ri ; A-((Ri))-CYA,A间址的内容及进位标志,结果送A SUBB A , #data ; A-data-CYA,A立即数及进位标志,结果送A | |
MUL | Multiply 乘法指令 |
MUL AB ;A x BB和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+1A,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)+1DPTR,数据指针内容加1,结果放在数据指针寄存器(DPTR)中 | |
DEC | Decrement 减1指令 |
INC A ;A-1A,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 ;add16PC,无条件跳转到add16地址,可在64KB范围内转移 | |
AJMP | Absolute Jump 绝对跳转指令 |
AJMP add11 ;add11PC,无条件跳转到add11地址,可在2KB范围内转移 | |
SJMP | Short Jump 短跳转指令 |
SJMP rel ;PC+2+relPC,rel是偏移量,8位有符号数(-127~127),可向前后跳转 ±128个地址单元 | |
JMP | Jump 跳转指令 |
JMP @A+DPTR ;A+DPTRPC,属于散转指令,无条件转向A与DPTR内容相加后形成的新 地址 | |
JZ | Jump if acc is Zero累加器为零转移 |
JZ rel ;A=0转向PC+2+relPC,A≠0,顺序执行 | |
JNZ | Jump if acc is Not Zero累加器不为零转移 |
JNZ rel ;A≠0转向PC+2+relPC,A=0,顺序执行 | |
CJNE | Compare and Jump if Not Equal比较不相等则转移 |
CJNE A , direct , rel ;A≠(direct)转向PC+3+relPC,否则顺序执行(PC+3 PC) ;(A)>(direct)CY=0, (A)<(direct)CY=1 CJNE A , #data , rel ;A≠(data)转向PC+3+relPC,否则顺序执行(PC+3 PC) ;(A)>(data)CY=0,( A)<(data)CY=1 CJNE Rn , #data , rel ; Rn≠(data)转向PC+3+relPC,否则顺序执行(PC+3 PC) ; (Rn) >(data)CY=0, (Rn) <(data)CY=1 CJNE @Ri , #data , rel ;((Ri))≠(data)转向PC+3+relPC,否则顺序执行(PC+3 PC) ; ((Ri))>(data)CY=0, ((Ri)) <(data)CY=1 | |
DJNE | Decrement and Jump if Not Zero 减1不为0则转移 |
DJNE Rn , rel ;Rn-1Rn, Rn≠0转向PC+2+relPC,否则顺序执行(PC+2PC) DJNZ direct , rel ;(direct-1)direct, direct≠0转向PC+2+relPC,否则顺序执行 (PC+2PC) | |
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 ;0C,清零累加器 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则转移 |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论