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))
(7)栈操作指令
⼊栈指令:
PUSH direct;(SP)<–(SP)+1 ,((SP))<–(direct)
出栈指令:
POP direct;(direct)<–((SP)),(SP)<–(SP)-1
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)乘、 除法指令
(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)<A
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位置
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论