51单片机汇编指令

注: Rn与Ri中n=0 ~ 7,i=0 ~ 1,另外Cy是进位位,同时也是状态位,标志位

数据传送类指令

内部数据传送指令

助记符作用寻址方式机器周期字节数
MOV A,Rn将Rn的内容传送给A寄存器11
MOV A,directdirect是一个地址单元,将该地址的内容传送给A,例如:MOV A,50H直接12
MOV A @RiRi中存储了一个地址,将该地址的内容传送给A,例如:MOV A ,@R0寄存器间接11
MOV A #data将data传送到A,例如:MOV A,#00H立即数12
MOV Rn,A将A的内容传送到Rn中寄存器11
MOV Rn,directdirect是一个地址单元,将该地址的内容传送给Rn,例如:MOV R3,50H直接12
MOV Rn,#data将data传送到Rn,例如:MOV R3,#00H立即数12
MOV direct,A将A的内容传送到direct这个地址中,例如:MOV 50H,A寄存器12
MOV direct,Rn将Rn中的内容传送到direct这个地址中寄存器12
MOV direct2,direct1将diret1这个地址中的内容传送到direct2这个地址中直接23
MOV direct,@RiRi中存储的是一个地址,将这个地址的内容传送给direct这个地址中寄存器间接22
MOV direct,#data将data这个数据传送到direct这个地址中立即数23
MOV @Ri,ARi中存储的是一个地址,将A中的内容传送到这个地址中寄存器11
MOV @Ri,directRi存储的是一个地址,将direct这个地址中的数据传送到Ri存储的地址中直接22
MOV @Ri,#dataRi存储的是一个地址,将data传送到这个地址中,例如:MOV @R0,#00H立即数12
MOV DPTR,#data16将一个16位data16数据传送到DPTR数据指针中,高8位送入DPH,低8位送入DPL立即数23

外部数据传送指令

助记符作用寻址方式机器周期字节数
MOVX A,@DPTRDPTR中存放了一个地址,将该地址的数据传送到A寄存器间接21
MOVX A,@RiRi中存放了一个地址,将该地址的数据传送到A寄存器间接21
MOVX @DPTR,ADPTR中存放了一个地址,将A中的内容传送到该地址中寄存器21
MOVX @Ri,ARi中存放了一个地址,将A中的内容传送到这个地址中寄存器21

交换类指令

助记符作用寻址方式机器周期字节数
XCH A,Rn将Rn中的内容与A中的内容互换寄存器11
XCH A,direct将direct这个地址中的内容与A中的内容互换直接12
XCH A,@RiRi中存放的是一个地址,将该地址中的内容与A中的内容互换寄存器间接11
XCHD A,@RiRi中存放了一个地址,将该地址中的数据的低4位与A中数据的低4位相交换,高4位不变寄存器间接11
SWAP A将A中的数据的高4位与低4位相交换寄存器11

查表指令

助记符作用寻址方式机器周期字节数
MOVC A,@A+PC从PC指令地址开始偏移A个地址后,将该地址中的数据再传送给A变址寻址21
MOVC A,@A+DPTR从DPTR地址中偏移A个地址后再将该地址中的内容传送给A变址寻址21

堆栈操作指令

助记符作用寻址方式机器周期字节数
PUSH direct将direct 这个地址存放的数据入栈直接22
POP diret将栈顶数据存放在direct这个地址中直接22

注:在使用堆栈时,先要给SP赋初始值,该值是栈底地址,堆栈遵循先进后出的原则,每入栈一个数据后,SP会自加1,出栈时SP会自减1,另外也可对A,B寄存器进行入栈出栈操作,但是对于A寄存器,在赋值时可写A,但在出栈入栈时要写成ACC

算术运算类指令

普通加法指令

助记符作用
ADD A,Rn将A中的数据与Rn中的数据相加并将结果存放在A中
ADD A,direct将direct这个地址中的数据与A中的数据相加并将结果存放在A
ADD A,@RiRi存放了一个地址,将该地址的数据与A中的数据相加并将结果存放在A中
ADD A,#data将data与A中的数据相加并将结果存放在A中

带进位位加法指令

助记符作用
ADDC A,Rn将A中的数据,Rn中的数据和进位位Cy相加并将结果存放在A中
ADDC A,direct将direct这个地址中的数据,A中的数据和进位位Cy相加并将结果存放在A中
ADDC A,@RiRi存放了一个地址,将该地址的数据,A中的数据和进位位Cy相加并将结果存放在A中
ADDC A,#data将data与A中的数据相加并将结果存放在A中

注:ADDC加法指令常用于多字节加法运算中,例如16位数,其低8位可由ADD指令相加,相加的结果若大于255将发生进位,即Cy=1,在相加这两个数的高8位时就必须加上这个进位位,故而使用ADDC指令。相加进位位,就比如说 0xff + 0x01,结果是0x0100,由于51单片机寄存器是8位的,那么相加的结果只能将低8位存入寄存器中,结果便是0,但此时发生了进位,进位位Cy=1。

减法指令

助记符作用
SUBB A,Rn用A中的值减去Rn中的值再减去进位位Cy并将结果存放在A中
SUBB A,direct用A中的值减去direct这个地址中的值再减去进位位Cy并将结果存放在A中
SUBB A,@RiRi中存放了一个地址,用A中的值减去这个地址中的值再减去进位位Cy并将结果存放在A中
SUBB A,#data用A中的值减去data再减去进位位Cy并将结果存放在A中

注:一般在用减法时先将进位位Cy清零 , CLR C

加1指令

助记符作用
INC AA中的值加1并将结果存放在A中
INC RnRn中的值加1并将结果存放在Rn中
INC direct将direct这个地址中的值加1并将结果存在direct这个地址中
INC @RiRi中存放了一个地址,将该地址中的数据加1并将结果仍存在这个地址中
INC DPTRDPTR指针指向的数据加1并存在DPTR中

减一指令

助记符作用
DEC AA中的值减1并将结果存放在A中
DEC RnRn中的值减1并将结果存放在Rn中
DEC direct将direct这个地址中的数据减1并将结果存放在direct这个地址中
DEC @RiRi中存放了一个地址,将该地址中的数据减1并将结果存放在这个地址中

乘除法指令

助记符作用
MUL AB将A中的值与B中的值相乘,积的高位存在B中,低位存在A中
DIV AB用A中的值除以B中的值,商存在A中,余数存在B中

逻辑运算类指令

逻辑与指令

助记符作用
ANL A,direct将A中的值与direct这个地址中的值相与并将结果存在A中
ANL A,Rn将A中的值与Rn中的值相与并将结果存在A中
ANL A,@RiRi中存放了一个地址,将该地址中的数据与A中的值相与并将结果存在A中
ANL A,#data将A中的值与data相与并将结果存在A中
ANL direct,A将direct这个地址中的值与A中的值相与并将结果存在direct这个地址中
ANL direct,#data将direct这个地址中的值与data相与并将结果存在direct这个地址中

逻辑或指令

助记符作用
ORL A,direct将A中的值与direct这个地址中的值相或并将结果存在A中
ORL A,Rn将A中的值与Rn中的值相或并将结果存在A中
ORL A,@RiRi中存放了一个地址,将该地址中的数据与A中的值相或并将结果存在A中
ORL A,#data将A中的值与data相或并将结果存在A中
ORL direct,A将direct这个地址中的值与A中的值相或并将结果存在direct这个地址中
ORL direct,#data将direct这个地址中的值与data相或并将结果存在direct这个地址中

逻辑异或指令

助记符作用
XRL A,direct将A中的值与direct这个地址中的值相异或并将结果存在A中
XRL A,Rn将A中的值与Rn中的值相异或并将结果存在A中
XRL A,@RiRi中存放了一个地址,将该地址中的数据与A中的值相异或并将结果存在A中
XRL A,#data将A中的值与data相异或并将结果存在A中
XRL direct,A将direct这个地址中的值与A中的值相异或并将结果存在direct这个地址中
XRL direct,#data将direct这个地址中的值与data相异或并将结果存在direct这个地址中

循环移位指令

助记符作用
RL A将A中的值按二进制循环左移,即第0位变为第1位,以此类推,第7位变为第0位
RLC A带进位循环左移,即进位位Cy变为A中的值的第0位,原第0位变为第1位,以此类推,第7位变为标志位Cy
RR A将A中的值按二进制循环右移,即第7位变为第6位,以此类推,第0位变为第7位
RRC A带进位循环右移,即进位位Cy变为A中的值的第7位,原第7位变为第6位,以此类推,第0位变为标志位Cy

位操作类指令

注:在单片机中要对某个引脚进行操作,这个引脚就是一个位bit,例如将P1.1引脚置1,可用 SETB P1.1

位传送指令

助记符作用
MOV C,bit将bit的值传送到标志位Cy中
MOV bit,C将标志位Cy的值传送到bit中

位置位和位复位指令

助记符作用
CLR C将标志位Cy清0
CLR bit将bit清0
SETB C将标志位Cy置1
SETB bit将bit置1

位运算指令

助记符作用
ANL C,bit将标志位Cy与bit相与并将结果存到标志位Cy中
ANL C,/bit将bit取反和标志位Cy相与并将结果存到标志位Cy中
ORL C,bit将标志位Cy与bit相或并将结果存到标志位Cy中
ORL C,/bit将bit取反和标志位Cy相或并将结果存到标志位Cy中
CPL C将标志位Cy取反
CPL bit将bit取反

位转移指令

助记符作用
JB bit,rel如果bit的值位1,则程序跳到当前指令地址+rel这个位置继续执行,否则顺序执行
JNB bit ,rel如果bit的值位0,则程序跳到当前指令地址+rel这个位置继续执行 ,否则顺序执行
JBC bit ,erl如果bit的值位1,则程序跳到当前指令地址+rel这个位置继续执行并将bit清0,否则顺序执行

判断Cy标志指令

助记符作用
JC dstdst表示一个标识符,如果Cy的值为1,程序跳到dst所标识的位置继续执行 ,否则顺序执行
JNC dstdst表示一个标识符,如果Cy的值不为1,程序跳到dst所标识的位置继续执行 ,否则顺序执行

例:

SETB  C
JC    dst
MOV   A,	#01H
dst:
MOV   A,	#02H
END

控制转移类指令

无条件转移指令

助记符作用范围
LJMP dstdst表示一个标识符,程序无条件跳转到dst这个位置继续执行任意位置
AJMP dstdst表示一个标识符,程序无条件跳转到dst这个位置继续执行2KB
SJMP dstdst表示一个标识符,程序无条件跳转到dst这个位置继续执行-128~127字节以内
JMP @A+DPTR程序无条件跳转到A与DPTR和这个地址位置开始执行64KB

例:

MOV    A,	#03H
LJMP   dst
MOV    A,	#01H
dst:
MOV    A,	#02H
END

条件转移指令

助记符作用范围
JZ dstdst是一个标识符,如果A的值为0,程序跳转到dst这个位置开始执行,否则顺序执行-128~127字节
JNZ dstdst是一个标识符,如果A的值不为1,程序跳转到dst这个位置开始执行,否则顺序执行-128~127字节
CJNE A,#data,dstdst是一个标识符,如果A的值与data不相等,程序跳转到dst这个位置开始执行,否则顺序执行 ;如果A的值小于data,Cy=1,否则Cy=0-128~127字节
CJNE Rn,#data,dstdst是一个标识符,如果Rn的值与data不相等,程序跳转到dst这个位置开始执行,否则顺序执行 ;如果A的值小于data,Cy=1,否则Cy=0-128~127字节
CJNE @Ri,#data,dstdst是一个标识符,Ri存放了一个地址,如果这个地址存放的值与data不相等,程序跳转到dst这个位置开始执行,否则顺序执行 ;如果这个地址存放的值小于data,Cy=1,否则Cy=0-128~127字节
CJNE A,direct,dstdst是一个标识符,如果A的值与direct的值不相等,程序跳转到dst这个位置开始执行,否则顺序执行 ;如果A的值小于direct的值,Cy=1,否则Cy=0-128~127字节
DJNZ Rn,dstdst是一个标识符,将Rn的值先减1,如果此时Rn的值不为0,程序跳转到dst这个位置开始执行,否则顺序执行,常用作循环中-128~127字节
DJNZ direct,dstdst是一个标识符,将direct这个地址的值先减1,如果此时direct这个地址的值不为0,程序跳转到dst这个位置开始执行,否则顺序执行-128~127字节

例:

MOV    A,	#02H
JZ     dst
MOV    B,	#01H
dst:
MOV    B,	#02H
END

调用和返回指令

助记符作用范围
ACALL namename表示子程序名,该指令表示调用子程序2KB
LCALL namename表示子程序名,该指令表示调用子程序任意位置
RET该指令表示调用子程序结束,子程序返回
RETI该指令表示中断结束,中断返回

例:

MOV   A,	#02H
MOV   B,	#03H
ACALL ADD_AB
MOV   R0,	A
SJMP  $		  //程序卡在这个位置

ADD_AB:
ADD   A,	B
RET

END

空操作

助记符作用机器周期
NOP空操作1

伪指令

ORG

ORG  1000H
MOV  A,#00H

规定程序块或数据块存放的起始地址,示例中表示MOV A,#00H存放在1000H开始的单元中

END
汇编语言源程序结束标志

DB

ORG  1000H
TAB:
DB  02H,'B',"abc"

将指令后的数据依次存放在指定的地址单元中。示例中TAB的地址为1000H,故而从该地址开始的单元依次存放02H,B的ASCII码,a的ASCII码,b的ASCII码,c的ASCII码

DW

ORG  1000H
TAB:
DW   3000H, 80H

该指令后的数据为2个字节,存放数据时类似DB,高位在前,低位在后。示例中TAB的地址为1000H,那么1000H存放30H,1001H存放00H,1002H存放00H,1003H存放80H

DS

ORG   1000H
TAB:
DS    1FH

该指令用于保留存储单元用作备用空间,示例中TAB的地址为1000H,,从1000H开始预留32个存储字节空间(1000H~101FH)

EQU

DLY:	EQU	3200H
TAB:	EQU	DLY

将该指令后的值赋给本语句的标号。示例中:DLY的地址是3200H,并将TAB的地址设置为DLY的地址,即TAB的地址也是3200H

BIT

DLY1:	BIT	31H
DIY2:	BIT 32H

将位地址赋给本语句的标号,示例中:DLY1和DLY2当作位地址31H和32H。

  • 59
    点赞
  • 414
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
C51单片机是由英特尔公司设计的8051系列单片机的一种,它采用C语言和汇编语言混合编程。汇编指令是C51单片机的指令集合,用于编写汇编程序。 C51单片机汇编指令包含了各种指令,用于执行不同的操作。这些指令包括数据传输指令、算术运算指令、逻辑运算指令、位操作指令、跳转指令、中断指令等等。这些指令可以实现对存储器和寄存器的读写、对数据的运算、逻辑判断、程序的跳转等操作。 在编写汇编程序时,使用汇编指令可以很方便地找到需要的指令,了解指令的功能和使用方法。对于初学者来说,汇编指令可以作为学习的参考资料。 汇编指令的内容一般按照指令的功能分类,每个指令都有对应的助记符、操作码和描述。助记符是指令的缩写形式,操作码是指令的机器码形式,描述是指令的功能和使用说明。 通过熟练掌握汇编指令,可以编写出高效、可靠的汇编程序。同时,还可以根据指令对已有的汇编程序进行修改和优化。但需要注意的是,由于C51单片机汇编指令较为庞大,初学者在使用时可能会感到困惑,因此建议结合学习资料和实践来理解和使用指令。 总而言之,C51单片机汇编指令是学习和编写汇编程序的重要参考资料,它提供了各种指令的功能和使用方法,帮助程序员实现对单片机的控制和操作。对于使用C51单片机进行开发的工程师和学生来说,掌握汇编指令是必不可少的技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值