历史上的今天
返回首页

历史上的今天

今天是:2025年08月13日(星期三)

正在发生

2019年08月13日 | 叁:51汇编指令系统

2019-08-13 来源:eefocus

8051单片机共有111条指令,指令按功能进行分类,分为5类:
1、数据传送类指令(28条)
2、算术运算类指令(24条)
3、逻辑运算和移位类指令(25条)
4、位操作类指令(17条)
5、控制转移类指令(17条)

数据传送类指令

数据传送类指令:把源操作数传送到指令锁指定的目标地址

助记符功能使用
MOV访问内部RAM、访问特殊功能寄存器MOV A,Rn ;(Rn)→A,表示将Rn中的内容给A
MOVX访问外部RAMMOVX A,@DPTR ;((DPTR))→A
MOVX @DPTR,A ;(A)→(DPTR)
MOVX A,@Rn ;((Rn))→A
MOVX @Rn,A ;(A)→(Rn)
MOVC访问程序存储器MOVC A,@A+DPTR ;((A)+(DPTR))→A 
MOVC A,@A+PC;((A)+(PC))→A
XCH字节交换XCH A,Rn;(A)→Rn,(Rn)→A 
XCH A,direct;(A)→direct,(direct)→A 
XCH A,@Rn;(A)→(Rn),(Rn)→A
XCHD半字节交换XCHD A,@Rn;高4位不变,低4位交换;
(A)3-0→(Rn)3-0,((Rn))3-0→A 3-0
PUSH入栈操作PUSH direct ;(SP)+1 → SP,(direct)→(SP)
POP出栈操作POP direct ;(direct)→(SP),(SP)+1 → SP

算术运算类指令

算术运算类指令共有24条,包括加、减、乘、除4种基本算术运算指令。算术指令用到的助记符共有8种:ADD、ADDC、INC、SUBB、DEC、DA、MUL、DIV。

1、普通加法指令(ADD)

ADDA,Rn;A←(A)+(Rn) 累加器中数据与寄存器中数据相加送入累加器
ADDA,direct;A←(A)+(direct) 累加器与直接寻址单元中数据相加送入累加器
ADDA,@Ri;A←(A)+((Ri)) 累加器与间接寻址单元中数据相加送入累加器
ADDA,#data;A←(A)+data 累加器中数据直接与立即数相加送入累加器

2、带进位加法指令

ADDCA,Rn;A←(A)+(Rn)+(Cy)
ADDCA,direct;A←(A)+(direct)+(Cy)
ADDCA,@Ri;A←(A)+((Ri))+(Cy)
ADDCA,#data;A←(A)+data+(Cy)

3、加1指令

INCA;A←(A)+1 累加器(A)中数据+1
INCRn;Rn←(Rn)+1 寄存器中数据+1
INCdirect;direct←(direct)+1 直接寻址单元中数据+1
INC@Ri;Ri←((Ri))+1 间接寻址单元中数据+1
INCDPTR;DPTR←(DPTR)+1 数据指针+1

4、带借位减法指令

SUBBA,Rn;A←(A)-(Rn)-(Cy)
SUBBA,direct;A←(A)-(direct)-(Cy)
SUBBA,@Ri;A←(A)-((Ri))-(Cy)
SUBBA,#data;A←(A)-data-(Cy)

5、减1指令

DECA;A←(A)-1 累加器(A)中数据-1
DECRn;Rn←(Rn)-1 寄存器中数据-1
DECdirect;direct←(direct)-1 直接寻址单元中数据-1
DEC@Ri;Ri←((Ri))-1 间接寻址单元中数据-1

6、乘法指令

MULAB;(A)×(B)→ BA

7、除法指令

DIVAB;(A)/(B)→ A(商)B(余数)

逻辑操作类指令

逻辑操作类指令包括:逻辑运算指令和移位类指令。

1、累加器A清零与取反指令

CLRA;对累加器A清“0”
CPLA;对累加器A按位取反

2、逻辑与指令

ANLA,Rn;A←(A)∧(Rn) 累加器与寄存器数据相与送入累加器
ANLA,direct;A←(A)∧(direct) 累加器与直接寻址单元数据相与送入累加器
ANLA,@Ri;A←(A)∧(Ri) 累加器与间接寻址单元数据相与送入累加器
ANLA,#data;A←(A)∧data 累加器与立即数相与送入累加器
ANLdirect,A;direct←(direct)∧(A) 累加器与直接寻址单元数据相与送入直接寻址单元
ANLdirect,#data;direct←(direct)∧data 直接寻址单元内容中数据与立即数相与送入直接寻址单元

3、逻辑或指令

ORLA,Rn;A←(A)∨(Rn) 累加器与寄存器数据相或送入累加器
ORLA,direct;A←(A)∨(direct) 累加器与直接寻址单元数据相或送入累加器
ORLA,@Ri;A←(A)∨(Ri) 累加器与间接寻址单元数据相或送入累加器
ORLA,#data;A←(A)∨data 累加器与立即数相或送入累加器
ORLdirect,A;direct←(direct)∨(A) 累加器与直接寻址单元数据相或送入直接寻址单元
ORLdirect,#data;direct←(direct)∨data 直接寻址单元内容中数据与立即数相或送入直接寻址单元

4、逻辑异或指令

XRLA,Rn;A←(A)⊕(Rn) 累加器与寄存器数据相异或送入累加器
XRLA,direct;A←(A)⊕(direct) 累加器与直接寻址单元数据相异或送入累加器
XRLA,@Ri;A←(A)⊕(Ri) 累加器与间接寻址单元数据相异或送入累加器
XRLA,#data;A←(A)⊕data 累加器与立即数相异或送入累加器
XRLdirect,A;direct←(direct)⊕(A) 累加器与直接寻址单元数据相异或送入直接寻址单元
XRLdirect,#data;direct←(direct)⊕data 直接寻址单元内容中数据与立即数相异或送入直接寻址单元

5、移位类指令

RLA;累加器A的内容向左循环移位1位
RLCA;累加器A的内容带进位标志向左循环移1位
RRA;累加器A的内容向右循环移1位
RRCA;累加器A的内容带进位标志向右循环移1位

循环左移指令示例图:RL A A7←A6←A5←A4←A3←A2←A1←A0 ↓ →---------------------------------------------↑

带进位循环右移指令示例图:RRC A
CY→A7→A6→A5→A4→A3→A2→A1→A0
↑ --------------------------------------------------←↓

位操作类指令

89C51单片机具有丰富的位操作指令,可以完成以位变量为对象的传送、运算、控制转移等操作。
1、位数据传送指令

MOVC,bit;Cy←(bit) 将直接寻址位的内容送入累加器CY中
MOVbti,C;bit→(Cy) 将CY 的内容传送到直接寻址位

注意: 两个可寻址位之间没有直接的传送指令,若要完成这种传送,可通过CY作为媒介间接传送。

例子:若要将30H位的数传送到20H位,则要执行下列指令:
MOV C,30H;
MOV 20H,C;

2、位变量修改指令

CLRbit;bit←0 对位地址清零
CPLC;Cy←(Cy取反) 对位累加器CY取反
CPLbit;bit←(bit取反) 对位地址取反
SETBC;Cy←1 对位累加器CY置1
SETBbit;bit←1 对位地址置1

**3、位变量逻辑指令**

ANLC,bit;Cy←(Cy)∧(bit) 位累加器CY与位地址相与送入位CY中
ORLC,bit;Cy←(Cy)∨(bit) 位累加器CY与位地址相或送入位CY中

控制转移类指令

控制转移类指令的功能主要是控制程序从原来顺序执行地址转移到其他指令地址上。这种转移可以通过程序跳转、调用子程序、子程序返回等途径完成。

1、无条件转移指令
无条件转移指令功能是:当程序执行无条件转移指令时,程序就无条件地转移到该指令所提供的地址上去。

指令说明
JMP rel默认情况下等同于 SJMP rel
SJMP relRel 是8位带符号数,转移范围为当前PC值的-128~+127共256个单元
AJMP addr11addr11 送入PC10~PC0,而PC15~PC11保持不变,转移范围2KB
LJMP addr16addr16 装入PC,转移范围64KB

2、条件转移指令

条件转移指令是依某种特定条件转移的指令。
条件满足时转移到新地址(标号处)。
条件不满足时则按顺序执行下一条指令。

分类指令说明
累加器A 判0转移JZ rel(A) = 0转移 到PC+rel处执行,否则顺序执行
累加器A 判0转移JNZ rel(A) ≠ 0转移 到PC+rel处执行,否则顺序执行
判位(bit)状态转移JB bit,relbit = 1转移到PC+rel处执行,否则顺序执行
判位(bit)状态转移JNB bit,relbit ≠ 1转移到PC+rel处执行,否则顺序执行
判位(bit)状态转移JBC bit,relbit = 1转移到PC+rel处执行,并将该位请0,否则顺序执行
判位(bit)状态转移JC rel进位位CY = 1转移到PC+rel处执行,否则顺序执行
判位(bit)状态转移JNC rel进位位CY ≠ 1转移到PC+rel处执行,否则顺序执行

3、比较转移指令

CJNEA,direct,rel;(A) ≠ (direct)转移
CJNEA,#data,rel;(A) ≠ data转移
CJNERn,#data,rel;(Rn) ≠ data转移
CJNE@Ri,#data,rel;((Ri)) ≠ data转移

4、循环转移指令

DJNZRn,rel;寄存器Rn减1不为0循环转移
DJNZdirect,rel;直接寻址单元direct减1不为0循环转移

指令时间计算

单片机每执行一条指令需要消耗一定的时间才能完成。假定执行一条指令需要时间T,则循环执行N次该指令就需要时间N×T,实际编程中,我们常用DJNZ这条指令实现软件演示的效果。

例:假定一条DJNZ指令需2us,一条MOV指令需1us,执行下面程序后,请问总共需要多长时间?

	  MOV   R7,#200  ;执行1次
DL1: MOV   R6,#250  ;执行200次
DL2:  DJNZ  R6,DL2   ;执行200×250次
      DJNZ  R7,DL1   ;执行200次1234

从上面可推断出,整个程序运行的时间
T = 201×1+200×251×2=100601us=100.601s

子程序调用及返回指令

在程序设计中,通常把具有一定功能的公用程序段编成子程序,当子程序需要使用时调用指令CALL,而在子程序的最后安排一条子程序返回指令RET,以便执行完子程序后能返回主程序继续执行。


1、调用指令CALL
调用指令CALL在发生程序转移前,先将PC的当前值压入堆栈,然后将子程序入口地址送入PC,使CPU转向执行子程序。

指令说明
CALL rel默认情况下等同于 ACALL rel
ACALL addr11addr11 送入PC10~PC0,而PC15~PC11保持不变,转移范围2KB
LCALL addr16addr16 装入PC,转移范围64KB

2、子程序返回指令RET** 子程序返回指令是把栈顶相邻两个单元的内容弹出送到PC,SP的内容减2,程序返回PC值所指的指令处执行。RET指令通常安排在子程序的末尾,使程序能从子程序返回到主程序。


3、中断返回指令RETI** RETI这条返回指令与RET指令完成的功能一样,都是使得子程序返回到主程序中来。但RETI指令比RET指令多做一件事情,就是在主程序返回之前,该条指令还将清除相应的中断标志位,以表示该中断已经响应完成了。 


4、空操作指令NOP** 空操作也是CPU控制指令,它没有使程序转移的功能。只消耗一个机器周期的时间,即此时PC+1。常用于程序的等待或时间的延迟。 ``` ******************************************************************/ * 

【课程4】 ****单片机汇编指令系统的应用*********** * 

【说 明】 ****通过本例程了解单片机的汇编指令系统,并进行程序的编写 * 

【描 述】 ****实现两个立即数FCH和52H相加 ******************************************************************/ ORG 0000H Start: MOV A,#0FCH ;计算FCH+52H=? MOV R0,#52H ADD A,R0 JC L1 ;判断CY,如果CY=1,跳到L1处执行 MOV 30H,#00H JMP L2 L1: MOV 30H,#01H L2: MOV 31H,A

  MOV	A,#0FCH	
  ANL	A,R0	;计算两数相与
  MOV	P0,A
  MOV	A,#0FCH	
  ORL	A,R0	;计算两数相或
  MOV	P1,A
  MOV	A,#0FCH	
  XRL	A,R0	;计算两数异或
  MOV	P2,A
  MOV	A,#0FCH
  CPL	A	;对FCH数取反
  MOV	P3,A
  RL	A	;左移1位
  RL	A	;左移1位
  RL	A	;左移1位
  RL	A	;左移1位
  MOV   P3,A    
  END


推荐阅读

史海拾趣

Astec [Astec America, Inc]公司的发展小趣事

随着全球环保意识的不断提高,Astec也开始关注绿色环保和可持续发展问题。公司积极采用环保材料和节能技术,推出了一系列绿色电源产品。同时,Astec还加大了对环保技术的研发力度,努力在保持产品性能的同时,降低生产过程中的能耗和排放。这些举措不仅有助于公司应对环保法规的挑战,还提升了公司的社会形象。

Amveco Toroidal Power Products公司的发展小趣事

Amveco Toroidal Power Products公司成立于XXXX年,初始阶段主要专注于环形变压器的研发与生产。创始人凭借对环形变压器技术的深入了解和市场需求的敏锐洞察,带领团队克服了初创期的种种困难,成功开发出了具有高效能、低噪音特点的环形变压器产品,并赢得了客户的初步认可。随着市场口碑的逐渐积累,公司的业务规模开始稳步扩大。

DAQ Electronics LLC公司的发展小趣事

DAQ Electronics LLC公司成立于XX年,由一群热衷于数据采集技术的工程师创立。当时,市场上对于高精度、高效率的数据采集设备需求日益增长,但现有产品往往无法满足。创始人们凭借对技术的深刻理解和敏锐的市场洞察力,决定自主研发数据采集硬件,并成立了DAQ Electronics LLC公司。他们凭借有限的资金和资源,开始了艰苦的创业之旅。

Bel Fuse公司的发展小趣事

进入XXXX年代,电子行业经历了深刻的变革,新兴技术的涌现给传统企业带来了挑战。Bel Fuse也面临着市场需求的变化和竞争压力的增加。为了应对这些变革,公司进行了战略调整,将重点放在了连接器、电源、磁性元件和电路保护产品等领域。通过加大研发力度和市场推广,Bel Fuse成功实现了产品升级和市场拓展。

广州奥松公司的发展小趣事

奥松电子拥有一支近200名工程师组成的专职研发团队,并配备了超过7000㎡的研发实验室。实验室中配置了步进式投影光刻机、双面光刻机等先进设备,为公司的产品研发提供了有力的支持。这些设备不仅满足了产品研发、小试以及中试各个阶段的试验条件,也为公司的技术创新提供了坚实的基础。

Chips And Technologies Inc公司的发展小趣事

在创立初期,C&T就展现出了强大的技术创新能力。公司不断推出新产品,这些产品不仅性能卓越,而且具有高度的集成性和稳定性,深受市场欢迎。此外,C&T还积极与业界合作,推动技术标准的制定和完善,为整个行业的发展做出了重要贡献。

问答坊 | AI 解惑

大众电脑编码大全

[分享]大众电脑编码大全 奥迪A6 2.8L                 01)3B0 907 551 BF 2.8L V6/5V G01 001    CODING:04552   02)4B0 92 ...…

查看全部问答>

嵌入式数字多媒体终端硬件平台的设计与实现

来源:电子设计应用  作者:国防科学技术大学ATR三室 田素芬 张家口通信学院 冉茂儒 引言     随着信息时代的到来,信息技术尤其是计算机多媒体技术与网络技术飞速发展,语音教室在各种学校都已有了广泛的应用。现存的语音教学 ...…

查看全部问答>

预测

本帖最后由 paulhyde 于 2014-9-15 09:10 编辑 共同学习  …

查看全部问答>

奥特曼Zigbee读书日记(二)--OSAL系统框架专题

9. TI协议栈所用系统框架探讨。 51的系统往往不是太大,但是几十K的程序,也足以让一个初学者望而却步。我们首先忽略C语言本身的难度,光是系统框架也让生手读起来很吃力,再加上这种到处是API跟\"define\"的程序,还没有正式学习协议部分就已经让 ...…

查看全部问答>

求89c52烧录软件

那位用这个,发给兄弟伙了...谢了...1005450581…

查看全部问答>

如何读写51程序

我想知道8051是如果从电脑下载到51芯片中的,我的板子是52,看了下芯片资料是用P30 P31串口写入的,就算烧写的时候,PSEN脚要拉低电平,这是怎么被拉低的,找了每天每找到 而且烧写的软件是用的驱动程序,这么复杂,应该不要用驱动就能送数据到51 ...…

查看全部问答>

CEdit控件不能输入

从CWnd继承一个类CInputInfoWnd,在CInputInfoWnd用Create动态创建Edit控件m_editTest,此Edit控件上可以看到输入光标,但不能输入任何东西?…

查看全部问答>

2007年E题 开关稳压电源方案、原理图、程序

本帖最后由 paulhyde 于 2014-9-15 03:46 编辑 2007年E题 开关稳压电源方案、原理图、程序    …

查看全部问答>

proteus错误,请各位大侠指教

ERROR: [U1_VM2] \'1.8V VCore\' (2.73V) is outside specified range (1.65V-1.95V)如何配置才能通过仿真…

查看全部问答>