(完整版)51单片机汇编指令(全)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指令中常用符号说明
Rn当前寄存器区的8个工作寄存器R0~R7(n=0~7)
Ri当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1)
Direct8位内部数据寄存器单元的地址及特殊功能寄存器的地址
#data表示8位常数(立即数)
#data16表示16位常数
Add16表示16位地址
Addr11表示11位地址
Rel8位代符号的地址偏移量
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则转移
JB bit , rel;(bit)=1,转向PC+3+rel→PC,否则顺序执行PC+3→PC
JNB Jump if Bit is Not set 进位位为1则转移
JNB bit , rel;(bit)=0,转向PC+3+rel→PC,否则顺序执行PC+3→PC
JBC Jump if Bit is set and Clear bit指定位等于1转移并清该位
JBC bit , rel; (bit)=1,转向PC+3+rel→PC,同时0→bit否则顺序执行PC+3→PC
伪指令
ORG Origin 代码起始地址指令
ORG 0000H
MOV A , #0010H;这条指令从0000H这个地址单元开始写起
END End 汇编程序结束指令
END;汇编指令结束
DB字节定义伪指令
ORG 1000H
DB 01H , 02H;则(1000H)=01H,(1001H)=02H
ORG 1100H
DB ‘01’;则(1100H)=30H,30H是0的ASCII码,(1101H)=31H,31H是1的ASCII码DW双字节定义伪指令
ORG 2000H
DW 2546H , 0178H; (2000H)=25H, (2001H)=46H, (2002H)=01H, (2003H)=78H,
EQU数据赋值伪指令
X EQU n;将n的值赋给x
BIT位数据赋值伪指令
y BIT b;y是用户定义标号,b为0或1
MACRO宏指令
宏指令名MACRO 形式参数
······
代码段
······
ENDM;宏指令定义结束
寻址方式及相关的存储空间
寻址方式寻址范围
寄存器寻址R0~R7
A 、B、C(CY)、AB(双字节)、DPTR(双字节)、PC(双字节)直接寻址内部RAM低128字节
特殊功能寄存器
内部RAM位寻区的128个位
特殊功能寄存器中可寻址的位
寄存器间接寻址内部数据存储器RAM【@R0,@R1,@SP(仅PUSH,POP)】
内部数据存储器单元的低4位(@R0,@R1)
外部RAM或I/O口(@R0,@R1,@DPTR)
立即寻址程序存储器(常数)
程序存储器(@A+PC,@A+DPTR)
基寄存器加变址
寄存器间接寻址。