51单片机的汇编语言

51单片机的汇编语言操作指令总结

1.指令格式
【标号:】操作码 目的操作数 ,源操作数;注释
如:LOOP:MOV A, 33H;将33H输入到累加器A中

指令常用符号:
(1) Ri和Rn: R表示当前工作寄存器区中的工作寄存器, i表示0或1, 即R0和R1。 n表示0~7, 即R0~R7, 当前工作寄存器的选定是由PSW的RS1和RS0位决定的。
(2) #data: #表示立即数, data为8位常数。 #data是指包含在指令中的8位立即数。
(3) #data16: 包含在指令中的16位立即数。
(4) rel: 相对地址, 以补码形式表示的地址偏移量, 范围为-128~+127, 主要用于无条件相对短转移指令SJMP和所有的条件转移指令中。
(5) addr16: 16位目的地址。 目的地址可在全部程序存储器的64 KB空间范围内, 主要用于无条件长转移指令LJMP和子程序长调用指令LCALL中。
(6) addr11: 11位目的地址。 目的地址应与下条指令处于相同的2 KB程序存储器地址空间范围内, 主要用于绝对转移指令AJMP和子程序绝对调用指令ACALL指令中。
(7) direct: 表示直接寻址的地址, 即8位内部数据存储器RAM的单元地址(0~127), 或特殊功能寄存器SFR的地址。 对于SFR可直接用其名称来代替其直接地址。
(8) bit: 内部数据存储器RAM和特殊功能寄存器SFR中的可直接寻址位地址。
(9) @: 间接寻址寄存器或基地址寄存器的前缀, 如@Ri, @DPTR, 表示寄存器间接寻址。
(10) (X): 表示X中的内容。
(11) ((X)): 表示由X寻址的单元中的内容, 即(X)作地址, 该地址的内容用((X))表示。

2.ORG xxxxH命令
是指向程序不同功能固定入口。
如:0000H----系统复位入口 0013H—外中断1入口
0003H—外部中断0入口 001BH—T1溢出中断入口
000BH—T0溢出中断入口 0023H串口中断入口
3.数据传送类指令
(1)内部数据传送指令–内部RAM单元间的数据传送

以累加器A为目的的传送指令:
MOV A,Rn;指令中Rn表示工作寄存器R0~R7
MOV A,direct;direct是数据的直接地址
MOV A,@Ri;间接地址(A)<–>((Ri))
MOV A,#data;data就是数据直接赋给A

以直接地址为目的的传送指令:
MOV direct,A;(direct)<–(A)
MOV direct ,Rn;(direct)<–(Rn)
MOV direct1,direct2;(direct1)<—(direct2)
MOV direct,@Ri;(direct)<----((Ri))
MOV direct,#data;(direct)<–data

以通用寄存器Rn为目的的传送指令:
MOV Rn,A;(Rn)<—A
MOV Rn,direct;(Rn)<—(direct)
MOV Rn,#data;(Rn)<–data

以寄存器间接地址为目的的传送指令:
MOV @Ri,A;((Ri))<–(A)
MOV @Ri,direct;((Ri))<–(direct)
MOV @Ri,#data;((Ri))<–data

(2)16数据传送指令

MOV DPTR,#data16;(DPTR)<–data16
如:MOV DPTR,#1234H;高8位12H送到DPH寄存器中,低8位34H送到DPL寄存器中。

(3)数据交换指令

XCH A,Rn;(A)<–>(Rn)
XCH A,direct;(A)<–>(direct)
XCH A,@Ri;(A)<–>((Ri))

(4)半字节交换指令

XCHD A,@Ri;(A)3~0<–>((Ri)) 3~0
SWAP A;(A)3~0<–>(A) 7~4

(5)片外数据存储器传送指令

51单片机CPU对片外扩展的数据存储器RAM或I/O口进行数据传送, 必须采用寄存器间接寻址的方法, 通过累加器A来完成。
如:MOVX A,@Ri;(A)<–((Ri))用于片外RAM读取数据
MOVX @Ri,A;((Ri))<–(A)用于片外RAM写入数据

(6)ROM数据访问指令

程序存储器向累加器A传送数据指令, 又称查表指令。 它采用变址寻址方式, 把程序存储器(ROM或EPROM)中存放的表格数据读出, 传送到累加器A。
如:MOVC A,@A+DPTR;(A)<–((A)+(DPTR))
MOVC A,@A+PC;(A)<–((A)+(PC))
51单片机的汇编语言_第1张图片

(7)栈操作指令

入栈指令:
PUSH direct;(SP)<–(SP)+1 ,((SP))<–(direct)
出栈指令:
POP direct;(direct)<–((SP)),(SP)<–(SP)-1
51单片机的汇编语言_第2张图片

4.算术运算类指令
(1)加法指令

ADD A,#data;(A)<–(A)+#data
ADD A,direct;(A)<–(A)+(data)
ADD A,@Ri;(A)<–(A)+((Ri))
ADD A,Rn;(A)<–(A)+(Rn)

(2)带进位加法指令

ADDC A, #data ; (A) ← (A)+(CY)+#data
ADDC A, direct ; (A) ← (A)+(CY)+(direct)
ADDC A, @Ri ; (A) ← (A)+(CY)+((Ri))
ADDC A, Rn ; (A) ← (A)+(CY)+(Rn)

(3)带借位减法

SUBB A, #data ; (A) ← (A)-(CY)-#data
SUBB A, direct ; (A) ← (A)-(CY)-(direct)
SUBB A, @Ri ; (A) ← (A)-(CY)-((Ri))
SUBB A, Rn ; (A) ← (A)-(CY)-(Rn)

(4)十进制调整指令

十进制调整指令是一条对二—十进制的加法进行调整的指令。 两个压缩BCD码按二进制相加, 必须经过本条指令调整后才能得到正确的压缩BCD码和数, 实现十进制的加法运算。
如: 若(A)3~0>9或(AC)=1, 则(A)3~0←(A)3~0+06H
若(A)7~4>9或(CY)=1, 则(A)7~4←(A)7~4+06H

(5) 加1, 减1指令

加一:
INC A ; (A) ← (A)+1
INC direct ; (direct) ← (direct)+1
INC @Ri ; ((Ri)) ← ((Ri))+1
INC Rn ; (Rn) ← (Rn)+1
INC DPTR ; (DPTR) ← (DPTR)+1
减一:
DEC A ; (A) ← (A)-1
DEC direct ; (direct) ← (direct)-1
DEC @Ri ; ((Ri)) ← ((Ri))-1
DEC Rn ; (Rn) ← (Rn)-1

(6)乘、 除法指令

51单片机的汇编语言_第3张图片
51单片机的汇编语言_第4张图片

(7)逻辑运算

逻辑“与”运算指令:
ANL direct, A ; (direct) ← (direct)∧(A)
ANL direct, #data ; (direct) ← (direct)∧#data
ANL A, #data; (A) ← (A)∧#data
ANL A, direct ; (A) ← (A)∧(direct)
ANL A, @Ri ; (A) ← (A)∧((Ri))
ANL A, Rn ; (A) ← (A)∧(Rn)
逻辑“或”运算指令:
ORL direct, A ; (direct) ← (direct)∨(A)
ORL direct, #data; (direct) ← (direct)∨#data
ORL A, #data ; (A) ← (A)∨#data
ORL A, direct ; (A) ← (A)∨(direct)
ORL A, @Ri ; (A) ← (A)∨((Ri ))
ORL A, Rn ; (A) ← (A)∨(Rn)
逻辑“异或”运算指令:
XRL direct, A ; (direct) ← (direct) XRL direct, #data ; (direct) ← (direct)<#data
XRL A, #data ; (A) ← (A)<#data
XRL A, direct ; (A) ← (A)<(direct)
XRL A, @Ri ; (A) ← (A)<((Ri ))
XRL A, Rn ; (A) ← (A)<(Rn)
累加器A清零与取反指令:
CLR A ; (A) ← 00H
CPL A ; (A) ←(A反 )

(8)移位类指令

循环左移
RL A ; (A n+1) ← (An) , (A0) ← (A7) ,
带进位位循环左移
RLC A ; (A n+1) ← (An ), (CY) ← (A7 ), (A0 ) ← (CY)
循环右移
RR A ; (An) ← (A n+1 ), (A7 ) ← (A0)
带进位位循环右移
RRC A ; (An) ← (A n+1), (CY) ← (A0), (A7) ← (CY)

5.控制转移类指令
(1)无条件转移指令—执行该指令时无条件跳转

LJMP长转移指令:
三字节指令提供16位目标地址
如:在程序存储器中0000H单元存放一条指令:
LJMP 3000H;程序就会转到3000H位置

AJMP绝对转移指令:
双字节指令。程序转移的目的地址是由AJMP指令所在位置的地址PC值加上该指令字节数 2, 构成当前PC值。 取当前PC值的高 5 位与指令中提供的 11 位直接地址形成转移的目的地址。(AJMP指令由11位直接地址和00001构成,排列是高三位和低8位为直接地址,剩下的为00001.)
如:若初始PC值为1030H,其中存放了一条指令:AJMP 0456H ,则当前PC值为1032H,则高5位为00010,指令中提供的11位地址为10001010110,则跳转到0001 0100 0101 011051单片机的汇编语言_第5张图片

SJMP短转移指令:
先使程序计数器PC加1两次(即:取出指令码),然后把加2后的地址和rel相加作为目标转移地址。
特例:SJMP $就是SJMP 0FEH,因为0FEH为-2补码,所以转移后地址为PC+2-2还是为0FEH,无限循环。

JMP散转指令:
如JMP @A+DPTR;就是将累加器A中的8位数与DPTR中的16位数相加后装入当前的PC中,然后转移到PC所指的位置。51单片机的汇编语言_第6张图片

(2)条件跳转指令

累加器判零转移指令:
JZ rel ;若 (A)=0, 则 (PC) ← (PC)+2+rel ,若 (A)≠0, 则 (PC) ← (PC)+2 为0时跳转
JNZ rel ; 若 (A)≠0, 则 (PC) ← (PC)+2+rel, 若 (A)=0, 则 (PC) ← (PC)+2 不为0时跳转

比较转移指令:
CJNE A, #data , rel : 累加器内容与立即数比较, 不等则转移;
CJNE A, direct, rel : 累加器内容与内部RAM(包括特殊功能寄存器)内容比较, 不等则转移;
CJNE @Ri, #data, rel : 内部RAM内容与立即数比较, 不等则转移;
CJNE Rn, #data, rel :工作寄存器内容与立即数比较, 不等则转移

减 1 条件转移指令:
DJNZ direct, rel ; (direct)← (direct)-1 , 若(direct)=0, 则(PC) ← (PC)+3, 否则, (PC) ← (PC)+3+rel
DJNZ Rn, rel ; (Rn) ← (Rn)-1 , 若(Rn)=0, 则(PC) ← (PC)+2,否则, (PC) ← (PC)+2+rel

6.子程序调用及返回指令

子程序调用指令:
有长调用指令LCALL和绝对调用指令ACALL两条, LCALL和ACALL指令类似于转移指令LJMP和AJMP, 不同之处在于它们在转移前要把执行完该指令的PC内容自动压入堆栈后, 才将addr16(或addr11)送往PC, 即把子程序的入口地址装入PC。
返回指令:
一条是对应两条调用指令的子程序返回指令RET; 另一条是对应从中断服务程序的返回指令RETI
RET ; (PC15~8)← ((SP)) , (SP) ← (SP)-1 ,(PC7~0)← ((SP)) , (SP) ← (SP)-1
RETI ; (PC15~8)← ((SP)) , (SP) ← (SP)-1 , (PC7~0)← ((SP)) , (SP) ← (SP)-1
空操作指令:
NOP ; (PC) ← (PC)+1它控制CPU不做任何操作, 仅仅是消耗这条指令执行所需要的一个机器周期的时间

7.位操作指令

位数据传送指令:
一个时指定位单元,另一个必须时累加器CY位
MOV C,bit;(CY)<–(bit)
MOV bit,C;(bit)<–(CY)

CLR清零指令:
如CLR P1.0;就是将P1.0处的端口清零
CLR C;(CY)<–0,就是将进位信号CY清零

SETB置一指令:
如SETB P1.0;就是将P1.0处的端口值置一

位逻辑指令
ANL C, bit ; (CY) ← (CY)∧( bit )
ANL C, / bit ; (CY) ← (CY)∧( bit非 )
ORL C, bit ; (CY) ← (CY)∨ (bit )
ORL C, / bit ; (CY) ← (CY)∨( bit非)
CPL bit ; (bit) ← ( bit非 )
CPL C ; (CY) ← ( C非 )

位条件转移指令:
(1) 以CY内容为条件的双字节双周期转换指令。
JC rel ; 若(CY)=1, 则(PC) ← (PC)+2+rel转移
否则, (PC) ← (PC)+2 顺序执行
JNC rel ; 若(CY)=0, 则(PC) ← (PC)+2+rel转移
否则, (PC) ← (PC)+2顺序执行
(2) 以位地址内容为条件的三字节双周期转移指令。
JB bit, rel ;若(bit)=1, 则(PC) ← (PC)+3+rel转移
否则, (PC) = (PC)+3 顺序执行
JNB bit, rel ;若(bit)=0, 则(PC) ← (PC)+3+rel转移
否则, (PC) ← (PC)+3 顺序执行
JBC bit, rel ;若(bit)=1, 则(PC) ← (PC)+3+rel, (bit)←0
否则, (PC) ← (PC)+3 顺序执行

你可能感兴趣的:(51单片机汇编语言)