×

51汇编语言指令大全 单片机汇编语言

51汇编语言指令大全(51单片机汇编语言:位操作指令有哪些)

admin admin 发表于2023-03-15 01:33:07 浏览59 评论0

抢沙发发表评论

本文目录

51单片机汇编语言:位操作指令有哪些


数据位传送指令
MOV C, bit ;bit 可直接寻址位 C←(bit)
MOV bit,C ;C 进位位 (bit) ← C
位变量修改指令
CLR C ; 将C=0
CLR bit
CPL C ; 将C求反再存入C
CPL bit ; 将bit求反再存入bit
SETB C ; 将C=1
SETB bit ; (bit) ← 1
位变量逻辑指令
ANL C, bit ANL C, bit ORL C, bit ORL C, bit

汇编语言在51单片机中的所有指令有那些


单片机指令功能一览表
助记符 代码 说明
MOV A,Rn E8~EF 寄存器A
MOV A,direct E5 dircet 直接字节送A
MOV A,@Ri ER~E7 间接RAM送A
MOV A,#data 74 data 立即数送A
MOV Rn,A F8~FF A送寄存器
MOV Rn,dircet A8~AF dircet 直接字节送寄存器
MOV Rn,#data 78~7F data 立即数送寄存器
MOV dircet,A F5 dircet A送直接字节
MOV dircet,Rn 88~8F dircet 寄存器送直接字节
MOV dircet1,dircet2 85 dircet1 dircet2 直接字节送直接字节
MOV dircet,@Ro 86~87 间接RAM送直接字节
MOV dircet,#data 75 dircet data 立即数送直接字节
MOV @Ri,A F6~F7 A送间接RAM
MOV @Ri,#data 76~77 data 直接字节送间接RAM
MOV @Ri,#data 76~77 data 立即数送间接RAM
MOV DPTR,#data16 90 data 15~8 16位常数送数据指针
data7~0
MOVC A,@A+DPTR 93 由((A)+(DPTR))寻址的程序存贮
器字节选A
MOVC A,@A+PC 83 由((A)+(PC));寻址的程序存贮器字节送A
MOVX A,@Ri E2~E3 送外部数据(8位地址)送A
MOVX A,@DPTR E0 送外部数据(16位地址)送A
MOVX @Ri,A F2~F3 A送外部数据(8位地址)
MOVX @DPTR,A F0 A送外部数据(16位地址)
PUSH dircet C0 dircet 直接字节进栈,SP加1
POP dircet D0 dircet 直接字节退栈,SP减1
XCH A,Rn C8~CF 交换A和寄存器
XCH A,dircet C5 dircet 交换A和直接字节
XCH A,@Ri C6~C7 交换A和间接RAM
XCH A,@Ri D6~D7 交换A和间接RAM的低位
SWAP A C4
算术操作 (A的二个半字节交换)
ADD A,Rn 28~2F 寄存器加到A
ADD A,dircet 25 dircet 直接字节加到A
ADD A,@Ri 26~27 间接RAM加到A
ADD A,#data 24data 立即数加到A
ADD A,Rn 38~3F 寄存器和进位位加到A
ADD A,dircet 35dircet 直接字节和进位位加到A
ADD A,@Ri 36~37 间接字节和进位位加到A
ADD A,data 34 data 立即数和进位位加到A
ADD A,Rn 98~9F A减去寄存器和进位位
ADD A,dircet 95 dircet A减去直接字节和进位位
ADD A,@Ri 36~37 间接RAM和进位位加到A
ADD A,data 34 data 立即数和进位位加到A
SUBB A,Rn 98~9F A减去寄存器和进位位
SUBB A,dircet 95 dircet A减去直接字节和进位位
SUBB A,@Ri 96~97 A减去间接RAM和进位位
SUBB A,#data 94 data A减去立即数和进位位
INC A 04 A加1
INC Rn 08~0F 寄存器加1
INC dircet 05 dircet 直接字节加1
INC @Ri 06~07 间接RAM加1
DEC A 14 A减1
DEC Rn 18~1F 寄存器减1
DEC dircet 15 dircet 直接字节减1
DEC @Ri 16~17 间接RAM减1
INC DPTR A3 数据指针加1
MUL AB A4 A乘以B
DIV AB 84 A除以B
DA A D4 A的十进制加法调整
逻辑操作
ANL A,Rn 58~5F 寄存器“与”到A
ANL A,dircet 55 dircet 直接字节“与”到A
ANL A,@Ri 56~57 间接RAm“与”到A
ANL A,#data 54 data 立即数“与”到A
ANL dircet A 52 dircet A“与”到直接字节
ANL dircet,#data 53 dircet data 立即数“与”到直接字节
ORL A,Rn 48~4F 寄存器“或”到A
ORL A,dircet 45 dircet 直接字节“或”到A
ORL A,@Ri 46~47 间接RAM“或”到A
ORL A,#data 44 data 立即数“或”到A
ORL dircet,A 42 dircet A“或”到直接字节
ORL dircet,#data 43 dircet data 立即数“或”到直接字节
XRL A,Rn 68~6F 寄存器“异或”到A
XRL A,dircet 65 dircet 直接字节“异或”到A
XRL A,@Ri 66~67 间接RAM“异或”到A
XRL A,#data 64 data 立即数“异或”到A
XRL dircet A 62 dircet A“异或”到直接字节
XRL dircet,#data 63 dircet data 立即数“异或”到直接字节
CLR A E4 清零
CPL A F4 A取反
RL A 23 A左环移
RLC A 33 A通过进位左环移
RR A 03 A右环移
RRC A 13 A通过进位右环移
控制程序转移
ACALL addr 11 *1 addr(a7~a0) 绝对子程序调用
LCALL addr 16 12 addr(15~8) 长子程序调用
addr(7~0)
RET 22 子程序调用返回
RETI addr 11 32 中断调用返回
AJMP addr 11 △1 addr(a7~a6) 绝对转移
LJMP addr 16 02addr(15~8) 长转移
addr(7~0)
SJMP rel 80 rel 短转移,相对转移
JMP @A+DPTR 73 相对于DPTR间接转移
JZ rel 60 rel A为零转移
JNZ rel 70 rel A为零转移
CJNE A,dircet,rel B5 dircet rel 直接字节与A比较,不等则转移
CJNE A,#data,rel B4 data rel 立即数与A比较,不等则转移
CJNE A,Rn,#data,rel B8~BF data rel 立即数与寄存器比较,不等则转移
CJNE @Ri,#data,rel B6~B7 data rel 立即数与间接RAM比较,不等则转移
DJNZ Rn,rel D8~DF rel 寄存器减1,不为零则转移
DJNZ dircet,rel B5 dircet rel 直接字节减1,不为零则转移
NOP 00 空操作
*=a10a9a8l
△=a10a9a80
布尔变量操作
CLR C C3 清零进位
CLR bit C2 清零直接位
SETB C D3 置位进位
SETB bit D2 置位直接位
CPL C B3 进位取反
CPL bit B2 直接位取反
ANL C,bit 82 dit 直接数“与”到进位
ANL C,/bit B0 直接位的反“与”到进位
ORL C,bit 72 bit 直接位“或”到进位
ORL C,/bit A0 bit 直接位的反“或”到进位
MOV C,bit A2 bit 直接位送进位
MOV bit,C 92 bit 进位送直接位
JC rel 40 rel 进位位为1转移
JNC rel 50 rel 进位位为0转移
JB bit,rel 20 bit rel 直接位为1相对转移
JNB bit,rel 30 bit rel 直接位为0相对转移
JBC bit,rel 10 bit rel 直接位为1相对转移,然后清零该位
. 循环移位指令(4条)
RL A ;累加器A中的内容左移一位
RR A ;累加器A中的内容右移一位
RLC A ;累加器A中的内容连同进位位CY左移一位
RRC A ;累加器A中的内容连同进位位CY右移一位
. 累加器半字节交换指令(1条)
SWAP A ; 累加器中的内容高低半字节互换
. 求反指令(1条)
CPL A ; 累加器中的内容按位取反
. 清零指令(1条)
CLR A ; 0→(A),累加器中的内容清0
. 逻辑与操作指令(6条)
ANL A,data ;累加器A中的内容和直接地址单元中的内容执行与逻辑操作。结果存在寄存器A中。
ANL data,#data ;直接地址单元中的内容和立即数执行与逻辑操作。结果存在直接地址单元中。
ANL A,#data ;累加器A的内容和立即数执行与逻辑操作。结果存在累加器A中。
ANL A,Rn ;累加器A的内容和寄存器Rn中的内容执行与逻辑操作。结果存在累加器A中。
ANL data,A ;直接地址单元中的内容和累加器A的内容执行与逻辑操作。结果存在直接地址单元中。
ANL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行与逻辑操作。结果存在累加器A中。
. 逻辑或操作指令(6条)
这组指令的作用是将两个单元中的内容执行逻辑或操作。如果直接地址是I/O地址,则为“读—修改—写”操作。
ORL A,data ;累加器A中的内容和直接地址单元中的内容执行逻辑或操作。结果存在寄存器A中。
ORL data,#data ;直接地址单元中的内容和立即数执行逻辑或操作。结果存在直接地址单元中。
ORL A,#data ;累加器A的内容和立即数执行逻辑或操作。结果存在累加器A中。
ORL A,Rn ;累加器A的内容和寄存器Rn中的内容执行逻辑或操作。结果存在累加器A中。
ORL data,A ;直接地址单元中的内容和累加器A的内容执行逻辑或操作。结果存在直接地址单元中。
ORL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑或操作。结果存在累加器A中。
. 逻辑异或操作指令(6条)
XRL A,data ;累加器A中的内容和直接地址单元中的内容执行逻辑异或操作。结果存在寄存器A中。
XRL data,#data ;直接地址单元中的内容和立即数执行逻辑异或操作。结果存在直接地址单元中。
XRL A,#data ;累加器A的内容和立即数执行逻辑异或操作。结果存在累加器A中。
XRL A,Rn ;累加器A的内容和寄存器Rn中的内容执行逻辑异或操作。结果存在累加器A中。
XRL data,A ;直接地址单元中的内容和累加器A的内容执行逻辑异或操作。结果存在直接地址单元中。
XRL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑异或操作。结果存在累加器A中
控制转移类指令分析
. 无条件转移指令(4条)
LJMP addr16 ;addr16→(PC),给程序计数器赋予新值(16位地址)
AJMP addr11 ;(PC)+2→(PC),addr11→(PC10-0)程序计数器赋予新值(11位地址),(PC15-11)不改变
SJMP rel ;(PC)+ 2 + rel→(PC)当前程序计数器先加上2再加上偏移量给程序计数器赋予新值
JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值
. 条件转移指令(8条)
JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的内容为0,则转移到偏移量所指向的地址,否则程序往下执行
JNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的内容不为0,则转移到偏移量所指向的地址,否则程序往下执行
CJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的内容不等于直接地址单元的内容,则转移到偏移量所指向的地址,否则程序往下执行
CJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行
CJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行
CJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址单元中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行
布尔变量操作指令分析
. 位传送指令(2条)
MOV C,bit ;bit→CY,某位数据送CY
MOV bit,C ;CY→bit,CY数据送某位
. 位置位复位指令(4条)
CLR C ; 0→CY,清CY
CLR bit ; 0→bit,清某一位
SETB C ; 1→CY,置位CY
SETB bit ; 1→bit,置位某一位
. 位运算指令(6条)
ANL C,bit ;(CY)∧(bit)→CY
ANL C,/bit ;(CY)∧( )→CY
ORL C,bit ;(CY)∨(bit)→CY
ORL C,/bit ;(CY)∧()→CY
CPL C ;()→CY
CPL bit ;()→bir
. 位控制转移指令(5)
JC rel ; (CY)=1转移,(PC)+2+rel→PC,否则程序往下执行,(PC)+2→PC。
JNC rel ; (CY)=0转移,(PC)+2+rel→PC,否则程序往下执行,(PC)+2→PC。
JB bit, rel ; 位状态为1转移。
JNB bit, rel ; 位状态为0转移。
JBC bit, rel ; 位状态为1转移,并使该位清“0”。

51单片机汇编中SUBB带借位指令的意思


51单片机汇编中SUBB带借位指令的格式是:SUBB A, R(操作数),意思是累加器中的数减去源操作数所指出的数和进位位CY,其差值存放在累加器A中。运算结果影响PSW(程序状态标志寄存器)。

在多字节减法运算中,低字节被减数有时会向高位产生借位,此时CY(进位标志)置一,所以在此必须使用带借位减法指令。需要注意的是,进行单字节减法或多字节低8位减法运算时,应先把进位位清零。在80C51指令系统中没有不带借位的减法指令。

例如: SUBB 49H,58H;49H-58H,在这里是49H是被减数,带借位。

实际上减法运算在计算机中是补码相加。

扩展资料

汇编语言指令系统执行计算和控制过程:

单片机的几个主要组成部分,构成了单片机的硬件。所谓硬件(Hardware),就是看得到,摸得到的实体。但是,光有这样的硬件,还只是有了实现计算和控制功能的可能性。

单片机要真正地能进行计算和控制,还必须有软件(Software)的配合。软件主要指的是各种程序。只有将各种正确的程序“灌入”(存入)单片机,它才能有效地工作。

单片机所以能自动地进行运算和控制,正是由于人把实现计算和控制的步骤一步步地用命令的形式,即一条条指令(Instruction)预先存入到存贮器中,单片机在CPU的控制下,将指令一条条地取出来,并加以翻译和执行。就以两个数相加这一简单的运算来说,当需要运算的数已存入存贮器后,还需要进行以下几步:

第一步:把第一个数从它的存贮单元(Location)中取出来,送至运算器。

第二步:把第二个数从它所在的存贮单元中取出来,送至运算器;

第三步:相加; 

第四步:把相加完的结果,送至存贮器中指定的单元。


简述MCS—51汇编语言指令格式


  采用助记符表示的汇编语言指令格式如下:

  标号是程序员根据编程需要给指令设定的符号地址,可有可无;标号由1~8个字符组成,第一个字符必须是英文字,不能是数字或其它符号;标号后必须用冒号。

  操作码表示指令的操作种类,如MOV表示数据传送操作,ADD表示加法操作等。

  操作数或操作数地址表示参加运算的数据或数据的有效地址。操作数一般有以下几种形式:没有操作数项,操作数隐含在操作码中,如RET指令;只有一个操作数,如CPL A指令;有两个操作数,如MOV A,#00H指令,操作数之间以逗号相隔;有三个操作数,如CJNE A,#00H,NEXT指令,操作数之间也以逗号相隔。

  注释是对指令的解释说明,用以提高程序的可读性;注释前必须加分号。


51单片机指令集


51汇编语言指令集
符号定义表

符号 含义
Rn R0~R7寄存器n=0~7
Direct 直接地址,内部数据区的地址RAM(00H~7FH)
SFR(80H~FFH) B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0
@Ri 间接地址Ri=R0或R1 8051/31RAM地址(00H~7FH) 8052/32RAM地址(00H~FFH)
#data 8位常数
#data16 16位常数
Addr16 16位的目标地址
Addr11 11位的目标地址
Rel 相关地址
bit 内部数据RAM(20H~2FH),特殊功能寄存器的直接地址的位

指令介绍

指令 字节 周期 动作说明
算数运算指令
1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果存回累加器
2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器
3.ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结果存回累加器
4.ADD A,#data 2 1 将累加器与常数相加,结果存回累加器
5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相加,结果存回累加器
6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C相加,结果存回累加器
7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C相加,结果存回累加器
8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果存回累加器
9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借位C,结果存回累加器
10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借位C,结果存回累加器
11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借位C,结果存回累加器
12.SUBB A,#data 2 1 将累加器的值减常数值减借位C,结果存回累加器
13.INC A 1 1 将累加器的值加1
14.INC Rn 1 1 将寄存器的值加l
15.INC direct 2 1 将直接地址的内容加1
16.INC @Ri 1 1 将间接地址的内容加1
17.INC DPTR 1 1 数据指针寄存器值加1
说明:将16位的DPTR加1,当DPTR的低字节(DPL)从FFH溢出至00H时,会使高字节(DPH)加1,不影响任何标志位
18.DEC A 1 1 将累加器的值减1
19.DEC Rn 1 1 将寄存器的值减1
20.DEC direct 2 1 将直接地址的内容减1
21.DEC @Ri 1 1 将间接地址的内容减1
22.MUL AB 1 4 将累加器的值与B寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回B寄存器
说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器。如果积大于FFH,则溢出标志位(OV)被设定为1,而进位标志位为0
23.DIV AB 1 4 将累加器的值除以B寄存器的值,结果的商存回累加器,余数存回B寄存器
说明:无符号的除法运算,将累加器A除以B寄存器的值,商存入A,余数存入B。执行本指令后,进位位(C)及溢出位(OV)被清除为0
24.DA A 1 1 将累加器A作十进制调整,
若(A) 3-0》9或(AC)=1,则(A) 3-0←(A)3-0+6
若(A) 7-4》9或 (C)=1,则(A) 7-4←(A)7-4+6
逻辑运算指令
25.ANL A,Rn 1 1 将累加器的值与寄存器的值做AND的逻辑判断,结果存回累加器
26.ANL A,direct 2 1 将累加器的值与直接地址的内容做AND的逻辑判断,结果存回累加器
27.ANL A,@Ri 1 1 将累加器的值与间接地址的内容做AND的逻辑判断,结果存回累加器
28.ANL A,#data 2 1 将累加器的值与常数做AND的逻辑判断,结果存回累加器
29.ANL direct,A 2 1 将直接地址的内容与累加器的值做AND的逻辑判断,结果存回该直接地址
30.ANL direct,#data 3 2 将直接地址的内容与常数值做AND的逻辑判断,结果存回该直接地址
31.ORL A,Rn 1 1 将累加器的值与寄存器的值做OR的逻辑判断,结果存回累加器
32.ORL A,direct 2 1 将累加器的值与直接地址的内容做OR的逻辑判断,结果存回累加器
33.ORL A,@Ri 1 1 将累加器的值与间接地址的内容做OR的逻辑判断,结果存回累加器
34.ORL A,#data 2 1 将累加器的值与常数做OR的逻辑判断,结果存回累加器
35.ORL direct,A 2 1 将直接地址的内容与累加器的值做OR的逻辑判断,结果存回该直接地址
36.ORL direct,#data 3 2 将直接地址的内容与常数值做OR的逻辑判断,结果存回该直接地址
37.XRL A,Rn 1 1 将累加器的值与寄存器的值做XOR的逻辑判断,结果存回累加器
38.XRL A,direct 2 1 将累加器的值与直接地址的内容做XOR的逻辑判断,结果存回累加器
39.XRL A,@Ri 1 1 将累加器的值与间接地扯的内容做XOR的逻辑判断,结果存回累加器
40.XRL A,#data 2 1 将累加器的值与常数作XOR的逻辑判断,结果存回累加器
41.XRL direct,A 2 1 将直接地址的内容与累加器的值做XOR的逻辑判断,结果存回该直接地址
42.XRL direct,#data 3 2 将直接地址的内容与常数的值做XOR的逻辑判断,结果存回该直接地址
43.CLR A 1 1 清除累加器的值为0
44.CPL A 1 1 将累加器的值反相
45.RL A 1 1 将累加器的值左移一位
46.RLC A 1 1 将累加器含进位C左移一位
47.RR A 1 1 将累加器的值右移一位
48.RRC A 1 1 将累加器含进位C右移一位
49.SWAP A 1 1 将累加器的高4位与低4位的内容交换。(A)3-0←(A)7-4
数据转移指令
50.MOV A,Rn 1 1 将寄存器的内容载入累加器
51.MOV A,direct 2 1 将直接地址的内容载入累加器
52.MOV A,@Ri 1 1 将间接地址的内容载入累加器
53.MOV A,#data 2 1 将常数载入累加器
54.MOV Rn,A 1 1 将累加器的内容载入寄存器
55.MOV Rn,direct 2 2 将直接地址的内容载入寄存器
56.MOV Rn,gdata 2 1 将常数载入寄存器
57.MOV direct,A 2 1 将累加器的内容存入直接地址
58.MOV direct,Rn 2 2 将寄存器的内容存入直接地址
59.MOV direct1, direct2 3 2 将直接地址2的内容存入直接地址1
60.MOV direct,@Ri 2 2 将间接地址的内容存入直接地址
61.MOV direct,#data 3 2 将常数存入直接地址
62.MOV @Ri,A 1 1 将累加器的内容存入某间接地址
63.MOV @Ri,direct 2 2 将直接地址的内容存入某间接地址
64.MOV @Ri,#data 2 1 将常数存入某间接地址
65.MOV DPTR,#data16 3 2 将16位的常数存入数据指针寄存器
66.MOVC A,@A+DPTR 1 2 (A) ←((A)+(DPTR))
累加器的值再加数据指针寄存器的值为其所指定地址,将该地址的内容读入累加器
67.MOVC A,@A+PC 1 2 (PC)←(PC)+1;(A)←((A)+(PC))累加器的值加程序计数器的值作为其所指定地址,将该地址的内容读入累加器
68.MOVX A,@Ri 1 2 将间接地址所指定外部存储器的内容读入累加器(8位地址)
69.MOVX A,@DPTR 1 2 将数据指针所指定外部存储器的内容读入累加器(16位地址)
70.MOVX @Ri,A 1 2 将累加器的内容写入间接地址所指定的外部存储器(8位地址)
71.MOVX @DPTR,A 1 2 将累加器的内容写入数据指针所指定的外部存储器(16位地址)
72.PUSH direct 2 2 将直接地址的内容压入堆栈区
73.POP direct 2 2 从堆栈弹出该直接地址的内容
74.XCH A,Rn 1 1 将累加器的内容与寄存器的内容互换
75.XCH A,direct 2 1 将累加器的值与直接地址的内容互换
76.XCH A,@Ri 1 1 将累加器的值与间接地址的内容互换
77.XCHD A,@Ri 1 1 将累加器的低4位与间接地址的低4位互换
布尔代数运算
78.CLR C 1 1 清除进位C为0
79.CLR bit 2 1 清除直接地址的某位为0
80.SETB C 1 1 设定进位C为1
81.SETB bit 2 1 设定直接地址的某位为1
82.CPL C 1 1 将进位C的值反相
83.CPL bit 2 1 将直接地址的某位值反相
84.ANL C,bit 2 2 将进位C与直接地址的某位做AND的逻辑判断,结果存回进位C
85.ANL C,/bit 2 2 将进位C与直接地址的某位的反相值做AND的逻辑判断,结果存回进位C
86.ORL C,bit 2 2 将进位C与直接地址的某位做OR的逻辑判断,结果存回进位C
87.ORL C,/bit 2 2 将进位C与直接地址的某位的反相值做OR的逻辑判断,结果存回进位C
88.MOV C,bit 2 1 将直接地址的某位值存入进位C
89.MOV bit,C 2 2 将进位C的值存入直接地址的某位
90.JC rel 2 2 若进位C=1则跳至rel的相关地址
91.JNC rel 2 2 若进位C=0则跳至rel的相关地址
92.JB bit,rel 3 2 若直接地址的某位为1,则跳至rel的相关地址
93.JNB bit,rel 3 2 若直接地址的某位为0,则跳至rel的相关地址
94.JBC bit,rel 3 2 若直接地址的某位为1,则跳至rel的相关地址,并将该位值清除为0
程序跳跃
95.ACALL addr11 2 2 调用2K程序存储器范围内的子程序
96.LCALL addr16 3 2 调用64K程序存储器范围内的子程序
97.RET 1 2 从子程序返回
98.RETI 1 2 从中断子程序返回
99.AJMP addr11 2 2 绝对跳跃(2K内)
100.LJMP addr16 3 2 长跳跃(64K内)
101.SJMP rel 2 2 短跳跃(2K内)-128~+127字节
102.JMP @A+DPTR 1 2 跳至累加器的内容加数据指针所指的相关地址
103.JZ rel 2 2 累加器的内容为0,则跳至rel所指相关地址
104.JNZ rel 2 2 累加器的内容不为0,则跳至rel所指相关地址
105.CJNE A,direct,rel 3 2 将累加器的内容与直接地址的内容比较,不相等则跳至rel所指的相关地址
106.CJNE A,#data,rel 3 2 将累加器的内容与常数比较,若不相等则跳至rel所指的相关地址
107.CJNE @Rn,#data,rel 3 2 将寄存器的内容与常数比较,若不相等则跳至rel所指的相关地址
108.CJNE @Ri,#data,rel 3 2 将间接地址的内容与常数比较,若不相等则跳至rel所指的相关地址
109.DJNZ Rn,rel 2 2 将寄存器的内容减1,不等于0则跳至rel所指的相关地址
110.DJNZ direct,rel 3 2 将直接地址的内容减1,不等于0则跳至rel所指的相关地址
111.NOP 1 1 无动作

51单片机汇编语言


reti是中断子程序的返回命令!
假设执行的主程序是反复执行的循环程序,与中断子程序无关。在主程序循环的过程中有中断响应,则结束主程序的一切循环,而去执行中断子程序,执行到RETI则说明中断子程序执行完毕,跳回主程序继续执行主程序的循环。

51单片机,使用汇编语言,访问内部数据存储单元时,使用什么指令


51单片机访问内部数据存储单元指令是:
1、访问内部寄存器
MOV A,direct(比如30H)
MOV direct,A
MOV direct,direct
MOV A,@R0
ADD A,direct
ADDC A,dIrect
SUBB A,direct
等等
2、访问内部扩展存储器
MOVX A,@R0
MOVX @R0,A
MOVX A,@DPTR
MOVX @DPTR,A

关于51汇编,子程序返回指令


MCS-51单片机汇编语言中,没有SP这条指令,只有针对SP操作的指令。51单片机中SP是堆栈指针寄存器,存放着当前堆栈地址。堆栈用于存储子程序调用、中断程序调用时程序返回的地址,或者用来临时保存某一寄存器的值。除了初始化堆栈时直接给SP赋值,SP显式存在,其它的对SP有影响的指令,对SP的操作都是隐式的,就是说SP并不出现在指令操作数当中。例如:MOVSP,#80H;初始堆栈指针,(SP)=80HLCALLXXXX;调用XXXX处的子程序,下一条指令PC值压栈,(SP)=(SP)+2NOP;子程序返回时,RET指令从堆栈中弹出PC值,所以会返回到这里,(SP)=(SP)-2PUSHACC;累加器A的内容压栈保存,(SP)=(SP)+1POPB;堆栈内保存的累加器A的内容弹出到B寄存器中,(SP)=(SP)-1使用PUSH、POP指令使用堆栈,要注意进出栈的匹配,否则将引起不可预期的后果。