8051单片机常用指令

合集下载

8051汇编语言概述一 ) 指令分类 42个助记符,33种功能,共...

8051汇编语言概述一 ) 指令分类 42个助记符,33种功能,共...

3-3 数据传送类指令
数据传送操作是指把数据从源地址传送到目的地址, 源地址内容不变。共29条指令,使用8种助记符: 片内数据存储器传送指令MOV;
片外数据存储器传送指令MOVX;
程序存储器传送指令MOVC; 累加器交换指令 XCH、XCHD、SWAP; 堆栈操作指令 PUSH、 POP; 3-5
3-3-4 累加器交换指令
1) 字节交换指令XCH(3 条)
助记符格式
XCH A, Rn
机器码
11001rrrB
相应操作
A Rn
指令说明 机器周期
n=0~7 1 1
XCH A, direct 11000101B A (direct) direct
XCH A, @Ri
1100011iB data
MOV R2,#20h ;设臵传送次数 MOV DPTR,#TAB ;设臵数据源起始地址 MOV R0,#30H ;设臵目标起始地址 LOOP: MOV A, #00h ;设臵变址值 MOVC A, @A+DPTR ;读外部数据存储器 MOV @R0, A ;将数据传送到内部RAM INC R0 ;目标地址+1 INC DPTR ;源地址+1 DJNZ R2,LOOP ;传送个数判断
五)汇编语言的伪指令
伪指令不是真正的指令,它无对应的机器码,在汇编时不 产生目标程序,只是用来对汇编过程进行某种控制。 (p178)
1)ORG nnnnh ;设臵起始地址 例如: ORG 0030h mov a,#00h …… 2)END 汇编结束伪指令 3)EQU (data、bit)等值伪指令 例如:SDA EQU P1.0 ; sda bit P1.0 addr1 EQU 1000h ; addr1 data 1000h D5 EQU 5fh ; D5 data 5fh

8051单片机指令定义详解——ADDC A,(3)

8051单片机指令定义详解——ADDC A,(3)

8051 单片机指令定义详解——ADDC A,(3)8051 单片机指令定义详解(ADDC A,)ADDC A,功能:带进位的加法。

说明:执行ADDC 指令时,把src-byte 所代表的源操作数连同进位标志一起加到累加器A 上,并将结果置于累加器A 中。

根据运算结果,若在第7 位有进位生成,则将进位标志置1,否则清零;若第3 位有进位生成,则置辅助进位标志为1,否则清零。

如果是无符号整数相加,进位的置位显示当前运算结果发生溢出。

如果第6 位有进位生成而第7 位没有,或第7 位有进位生成而第6 位没有,则将OV 置1,否则将OV 清零。

在进位有符号整数相加运算的时候,OV 置位,表示两个正整数之和为一负数,或是两个负整数之和为一正数。

本类指令的源操作数允许4 种寻址方式:寄存器寻址、直接寻址、寄存器间接寻址、和立即寻址。

示例:假设累加器A 中的数据为0C3H(11000011B),R0 的值为0AAH(10101010B),进位标志为1,执行如下指令:ADDC A,R0累加器A 中的结果为6EH(01101101B),辅助进位标志AC 被清零,进位标志C 和溢出标志OV 被置1。

ADDC A,Rn 字节数:1 执行周期:1 机器吗:00110rrr 操作:(A)←(A) +(C)+(Rn)ADDC A, direct 字节数:2 执行周期:1 机器吗:00110101 aaaaaaaa 操作:(A)←(A)+(C)+(direct)ADDC A, @Ri 字节数:1 执行周期:1 机器吗:0010011i 操作:(A)。

80c51汇编语言指令

80c51汇编语言指令

80c51汇编语言指令80C51汇编语言是一种常用的低级程序设计语言,广泛应用于嵌入式系统中。

它是基于Intel 8051系列单片机的指令集架构,具有高效、灵活、可靠的特点。

本文将介绍80C51汇编语言的一些常用指令。

一、MOV指令MOV指令是80C51汇编语言中最基本、最常用的指令之一,用于将数据从一个寄存器或内存位置复制到另一个寄存器或内存位置。

例如,MOV A, #25H表示将立即数25H复制到A寄存器中。

二、ADD指令ADD指令用于执行两个操作数的相加运算,并将结果存储在目标操作数中。

例如,ADD A, R0表示将A寄存器和R0寄存器中的数据相加,并将结果存储在A寄存器中。

三、SUBB指令SUBB指令用于执行两个操作数的减法运算,并将结果存储在目标操作数中。

与ADD指令不同的是,SUBB指令会考虑进位位的值。

例如,SUBB A, R1表示将A寄存器中的数据减去R1寄存器中的数据,并将结果存储在A寄存器中。

四、MUL指令MUL指令用于执行两个操作数的乘法运算,并将结果存储在累加器A和可选的乘法寄存器B中。

例如,MUL AB表示将累加器A和B 中的数据相乘,并将结果存储在A和B中。

五、DIV指令DIV指令用于执行两个操作数的除法运算,并将结果存储在累加器A和可选的余数寄存器B中。

例如,DIV AB表示将累加器A和B 中的数据相除,并将商存储在A中,余数存储在B中。

六、JC、JNC指令JC指令用于在条件跳转时执行跳转操作,如果进位标志位(C)为1,则执行跳转。

JNC指令则相反,只有当进位标志位为0时才执行跳转。

七、JZ、JNZ指令JZ指令用于在条件跳转时执行跳转操作,如果零标志位(Z)为1,则执行跳转。

JNZ指令则相反,只有当零标志位为0时才执行跳转。

八、CJNE指令CJNE指令用于在条件跳转时执行跳转操作,它比较两个操作数的值,并根据比较结果来确定是否执行跳转。

如果两个操作数相等,则不执行跳转;如果不相等,则执行跳转。

8051单片机指令

8051单片机指令

8051单片机指令8051单片机是一种经典的微控制器,使用广泛,特别适用于嵌入式系统开发。

在实际的编程过程中,了解并掌握8051单片机的指令集是非常重要的。

本文将介绍一些常用的8051单片机指令,帮助读者更好地理解和应用这些指令。

一、MOV指令MOV指令是8051单片机中最常用的指令之一,用于将数据从一个寄存器移动到另一个寄存器。

例如,MOV A, B表示将B寄存器的值移动到A寄存器中。

这个指令非常简单直观,容易理解和使用。

二、ADD指令ADD指令用于将两个数相加,并将结果存储到累加器。

例如,ADD A, B表示将A和B寄存器中的值相加,并将结果存储到A寄存器中。

这个指令非常有用,可以实现简单的数学运算。

三、SUB指令SUB指令用于计算两个数的差值,并将结果存储到累加器。

例如,SUB A, B表示将B寄存器的值从A寄存器的值中减去,并将结果存储到A寄存器中。

这个指令也非常常用,可以实现简单的减法运算。

四、MUL指令MUL指令用于计算两个数的乘积,并将结果存储到累加器和扩展寄存器中。

例如,MUL AB表示将A和B寄存器中的值相乘,并将低8位结果存储到累加器A中,将高8位结果存储到扩展寄存器B中。

这个指令非常有用,可以实现简单的乘法运算。

五、DIV指令DIV指令用于计算两个数的商和余数,并将结果存储到累加器和余数寄存器中。

例如,DIV AB表示将A和B寄存器中的值相除,并将商存储到累加器A中,余数存储到余数寄存器B中。

这个指令非常有用,可以实现简单的除法运算。

六、JMP指令JMP指令用于无条件跳转到指定的地址。

例如,JMP 2000H表示程序跳转到2000H地址处执行。

这个指令非常常用,可以实现程序的控制流跳转。

七、JC指令JC指令用于在进位标志位(Carry Flag)为1时跳转到指定的地址。

例如,JC 3000H表示当进位标志位为1时,程序跳转到3000H地址处执行。

这个指令非常有用,可以实现条件判断和分支跳转。

单片机第4章8051单片机指令系统

单片机第4章8051单片机指令系统

单片机第4章8051单片机指令系统在单片机的世界里,指令系统就如同指挥官手中的指令手册,指引着单片机完成各种复杂的任务。

8051 单片机的指令系统更是其中的重要组成部分,它为我们提供了丰富多样的指令,让我们能够灵活地控制单片机的运行。

8051 单片机的指令系统可以分为五大类,分别是数据传送指令、算术运算指令、逻辑运算指令、控制转移指令和位操作指令。

数据传送指令是指令系统中的基础,就像是在战场上调配物资一样。

它能够实现寄存器之间、寄存器与存储器之间、立即数与寄存器或存储器之间的数据传递。

比如 MOV 指令,它可以将一个数据从源地址传送到目的地址。

假设我们要将立即数 50H 传送到累加器 A 中,就可以使用指令“MOV A, 50H”。

这样,累加器 A 就存储了 50H 这个数值。

算术运算指令则像是在进行战斗中的兵力计算。

它包括加法、减法、乘法和除法等运算。

ADD 指令用于加法运算,SUBB 指令用于带借位的减法运算。

例如,我们要将累加器 A 中的值与寄存器 B 中的值相加,并将结果存放在累加器 A 中,就可以使用指令“ADD A, B”。

如果要进行带借位的减法运算,比如从累加器 A 中减去寄存器 B 中的值以及借位标志位 CY 的值,可以使用指令“SUBB A, B”。

逻辑运算指令就像是在制定战略时的思考逻辑。

AND 指令用于逻辑与操作,ORL 指令用于逻辑或操作,XRL 指令用于逻辑异或操作。

以 AND 指令为例,如果我们要将累加器 A 中的值与立即数 80H 进行逻辑与操作,并将结果存放在累加器 A 中,就可以使用指令“AND A, 80H”。

控制转移指令则是指挥战斗中的战略部署调整。

它可以改变程序的执行顺序,使单片机能够根据不同的条件执行不同的程序段。

比如 JZ 指令,如果累加器 A 的值为 0,则程序跳转到指定的地址;JC 指令,如果进位标志位 CY 为 1,则程序跳转到指定的地址。

位操作指令则专注于对单个位的操作,就像是在精细地调整战斗中的某个关键环节。

8051单片机的指令列表

8051单片机的指令列表
直接寻址单元减1
2
1
MUL AB
累加器乘寄存器B
1
4
DIV AB
累加器除以寄存器B
1
4







ANL A,Rn
累加器与寄存器
1
1
ANL A,@Ri
累加器与内部RAM单元
1
1
ANL A,#data
累加器与立即数
2
1
ANL A,direct
累加器与直接寻址单元
2
1
ANL direct,A
直接寻址单元与累加器
8051单片机的指令列表
为了便于查阅,现把8051单片机的指令列表整理如下:
类别
指令格式
功能简述
字节数
周期







MOV A,Rn
寄存器送累加器
1
1
MOV Rn,A
累加器送寄存器
1
1
MOV A,@Ri
内部RAM单元送累加器
1
1
MOV @Ri,A
累加器送内部RAM单元
1
1
MOV A,#data
立即数送累加器
2
1
ANL direct,#data
直接寻址单元与立即数
3
1
ORL A,Rn
累加器或寄存器
1
1
ORL A,@Ri
累加器或内部RAM单元
1
1
ORL A,#data
累加器或立即数
2
1
ORL A,direct
累加器或直接寻址单元
2
1

单片机除法指令

单片机除法指令

单片机是一种微型计算机,它集成了处理器核心、内存和可编程输入输出端口在一个芯片上。

在单片机编程中,除法指令是用于执行两个数相除的算术操作。

不同的单片机架构可能有不同的除法指令集,但大多数都提供了基本的整数除法功能。

以下是一些常见的单片机架构及其对应的除法指令:1.8051单片机: 8051单片机使用8位微控制器,其指令集中包含了除法指令。

例如,DIV AB指令用于将累加器A中的值除以寄存器B中的值,商存放回累加器A,余数存放在累加器B。

2.PIC单片机:在PIC单片机(如PIC16系列)中,除法操作通常通过库函数来实现,而不是直接的硬件指令。

例如,可以使用div函数来执行除法操作。

3.ARM单片机: ARM架构的单片机(如基于Cortex-M系列)提供了更为复杂的除法指令。

例如,SDiv指令用于有符号整数除法,而UDiv 用于无符号整数除法。

这些指令可以处理32位或64位的操作数。

4.AVR单片机: AVR单片机(如Atmega系列)使用ATmega指令集,其中包括DIV指令,用于无符号整数除法。

这个指令将寄存器r0和r1的内容除以r24和r25的内容,结果存放回r0和r1。

5.MSP430单片机: MSP430单片机使用的是MSP430指令集,其中包括16位和32位的除法指令。

例如,div.w #num指令用于将工作寄存器W的内容除以立即数num,结果存放回工作寄存器W。

在使用除法指令时,需要注意以下几点:•数据大小:确保操作数的大小与指令匹配。

例如,如果指令是为8位操作数设计的,那么确保你的数据不会溢出8位的范围。

•除数为零:在执行除法操作前,检查除数是否为零,以避免运行时错误。

•符号:如果你的单片机支持有符号除法,确保正确处理正负号。

•精度:根据需要选择合适的数据类型和精度。

在某些情况下,可能需要使用浮点除法。

单片机的除法指令是编程中的基本操作之一,它们使得单片机能够进行各种数学计算和数据处理任务。

8051单片机21个特殊功能寄存器和指令汇总

8051单片机21个特殊功能寄存器和指令汇总

MCS-51单片机21个特殊功能寄存器(52系列是26个)不连续地分布在128个字节的SF R存储空间中,地址空间为80H-FFH,在这片SF R空间中,包含有128个位地址空间,地址也是80H-FFH,但只有83个有效位地址,可对11个特殊功能寄存器的某些位作位寻址操作(这里介绍一个技巧:其地址能被8整除的都可以位寻址)。

在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有R OM,用来存放程序,有R AM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。

在单片机中有一些独立的存储单元是用来控制这些器件的,被称之为特殊功能寄存器(SF R)。

这样的特殊功能寄存器51单片机共有21个并且都是可寻址的列表如下(其中带*号的为52系列所增加的特殊功能寄存器):分别说明如下:1、ACC---是累加器,通常用A表示这是个什么东西,可不能从名字上理解,它是一个寄存器,而不是一个做加法的东西,为什么给它这么一个名字呢?或许是因为在运算器做运算时其中一个数一定是在ACC中的缘故吧。

它的名字特殊,身份也特殊,稍后在中篇中我们将学到指令,可以发现,所有的运算类指令都离不开它。

自身带有全零标志Z,若A=0则Z=1;若A≠0则z=0。

该标志常用作程序分枝转移的判断条件。

2、B--一个寄存器在做乘、除法时放乘数或除数,不做乘除法时,随你怎么用。

3、PSW-----程序状态字。

这是一个很重要的东西,里面放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理。

它的各位功能请看下表:下面我们逐一介绍各位的用途CY:进位标志。

8051中的运算器是一种8位的运算器,我们知道,8位运算器只能表示到0-255,如果做加法的话,两数相加可能会超过255,这样最高位就会丢失,造成运算的错误,怎么办?最高位就进到这里来。

这样就没事了。

8051单片机指令大全

8051单片机指令大全
2 ADD A,direct 直接地址单元的内容加到累加器
3 ADD A,@Ri 间接ROM 的内容加到累加器
4 ADD A,#data 立即数加到累加器
5 ADDC A,Rn 寄存器内容带进位加到累加器
6 ADDC A,direct 直接地址单元的内容带进位加到累加器
16 MOV DRTR,#dat16 16 位立即数送入地址寄存器
17 MOVC A,@A+DPTR 以DPTR为基地址变址寻址单元中的数据送入累加器
18 MOVC A,@A+PC 以PC 为基地址变址寻址单元中的数据送入累加器
19 MOVX A,@Ri 外部RAM(8 位地址)送入累加器
6 ANL direct,#data 直接地址单元与立即数相“与”
7 ORL A,Rn 累加器与寄存器相“或”
8 ORL A,direct 累加器与直接地址单元相“或”
9 ORL A,@Ri 累加器与间接RAM 单元单元相“或”
10 ORL A,#data 累加器与立即数相“或”
单片机汇编指令大全
1 MOV A,Rn 寄存器内容送入累加器
2 MOV A,direct 直接地址单元中的数据送入累加器
3 MOV A,@Ri 间接RAM 中的数据送入累加器
4 MOV A,#tata 立即数送入累加器
5 MOV Rn,A 累加器内容送入寄存器
6 MOV Rn,direct 直接地址单元中的数据送入寄存器
7 MOV Rn,#data 立即数送入寄存器
8 MOV direct,A 累加器内容送入直接地址单元
9 MOV direct,Rn 寄存器内容送入直接地址单元

8051单片机指令详解

8051单片机指令详解

数据传递类指令(1)以累加器为目的操作数的指令MOV A,RnMOV A,directMOV A,@RiMOV A,#data第一条指令中,Rn代表的是R0-R7。

第二条指令中,direct就是指的直接地址,而第三条指令中,就是我们刚才讲过的。

第四条指令是将立即数data送到A中。

下面我们通过一些例子加以说明:MOV A,R1 ;将工作寄存器R1中的值送入A,R1中的值保持不变。

MOV A,30H ;将内存30H单元中的值送入A,30H单元中的值保持不变。

MOV A,@R1 ;先看R1中是什么值,把这个值作为地址,并将这个地址单元中的值送入A中。

如执行命令前R1中的值为20H,则是将20H单元中的值送入A中。

MOV A,#34H ;将立即数34H送入A中,执行完本条指令后,A中的值是34H。

(2)以寄存器Rn为目的操作的指令MOV Rn,AMOV Rn,directMOV Rn,#data这组指令功能是把源地址单元中的内容送入工作寄存器,源操作数不变。

(3)以直接地址为目的操作数的指令MOV direct,A 例: MOV 20H,AMOV direct,Rn MOV 20H,R1MOV direct1,direct2 MOV 20H,30HMOV direct,@Ri MOV 20H,@R1MOV direct,#data MOV 20H,#34H(4)以间接地址为目的操作数的指令MOV @Ri,A 例:MOV @R0,AMOV @Ri,direct MOV @R1,20HMOV @Ri,#data MOV @R0,#34H(5)十六位数的传递指令MOV DPTR,#data168051是一种8位机,这是唯一的一条16位立即数传递指令,其功能是将一个16位的立即数送入DPTR中去。

其中高8位送入DPH,低8位送入DPL。

例:MOV DPTR,#1234H,则执行完了之后DPH中的值为12H,DPL中的值为34H。

8051单片机for循环的汇编指令

8051单片机for循环的汇编指令

8051单片机是一种十分经典的单片机产品,它的应用非常广泛。

在程序设计中,for循环是一种十分常见的结构,今天我们就来讨论一下在8051单片机中,如何使用汇编指令来实现for循环。

1. for循环的基本原理在C语言中,for循环的基本结构通常为:```cfor (初始化表达式; 条件表达式; 更新表达式) {循环体}```其中,初始化表达式用于初始化循环控制变量,条件表达式用于判断是否进入循环,更新表达式用于更新循环控制变量的值。

在8051单片机中,我们需要将这个逻辑转化为对应的汇编指令序列。

2. 实现for循环的汇编指令在8051单片机中,通常使用DJNZ(Decrement and Jump ifNot Zero)指令来实现for循环。

DJNZ指令有两个操作数,第一个操作数为目标位置区域,第二个操作数为循环计数器。

其基本格式为: ```DJNZ A, target```其中,A为循环计数器,target为跳转的目标位置区域。

该指令的作用是将A减一,如果A不为零,则跳转到目标位置区域执行,否则继续执行下一条指令。

3. for循环的汇编实现示例下面是一个简单的例子,演示了如何在8051单片机中使用汇编指令实现for循环:```assemblyMOV R0, #10 ; 初始化循环计数器,设置循环次数为10LOOP: ; 循环开始标签; 循环体; 在这里编写循环体的汇编指令; ...DJNZ R0, LOOP ; 循环计数器减一,如果不为零则跳转到LOOP标签```在这个示例中,使用MOV指令将立即数10加载到R0寄存器中,作为循环次数的初始值。

然后通过DJNZ指令进行循环,当R0不为零时跳转到LOOP标签执行循环体中的指令,直到循环结束。

4. 注意事项在使用汇编指令实现for循环时,需要注意一些细节:- 循环计数器的选择:在8051单片机中,有多个寄存器可以用作循环计数器,如R0、R1等。

需要根据具体的应用场景和程序需求来选择合适的寄存器。

3--8051单片机指令系统.

3--8051单片机指令系统.
MOVX A,@Ri ;A ← ((Ri)) MOVX @Ri,A ;(Ri)← A 寻址范围是片外256BRAM。
MOVX A,@DPTR;A ← ((DPTR)) MOVX @DPTR,A;(DPTR) ← A 寻址范围是片外64KBRAM。
7.读程序存储器(查表指令)
注:数据表格放在程序存储器中(只有两条指令)。 ①近程查表指令(256B) MOVC A,@A+PC;A ← ((A)+(PC)) 只能查找指令所在地址以后256B范围内的常数或代码。
ORL C ,32H ;C←C∨32H
返回本节
3.2.8 寻址空间及符号注释
1.寻址空间:每种寻址方式可涉及的存储器空间
寻址方式 立即数寻址 直接寻址 寄存器寻址 寄存器间接寻址
变址寻址 相对寻址 位寻址
源操作数寻址空间 程序存储器ROM 片内RAM低128B、SFR 工作寄存器R0---R7、A、B、C、DPTR 片内RAM低128B[@R0、@R1] 片外RAM [@R0、@R1、 @DPTR] 程序存储器[@A+PC、 @A+DPTR] 程序存储器256B范围(PC+偏移量) 片内RAM的20H—2FH字节地址、部分SFR
返回本章首页
3.2.1 立即数寻址
• 指令中直接给出操作数的寻址方式。立即操作数用 前面加有#号的8位或16位数来表示。 例如:MOV A,# 60H;A←60H MOV DPTR,# 3400H;DPTR←3400H MOV 30H,# 40H ;30H单元←40H
• 上述三条指令执行完后,累加器A中数据为立即数据 60H,DPTR寄存器中数据为3400H,30H单元中数 据为立即数40H。
direct所指出的片内存储单元中 。

51单片机汇编指令表

51单片机汇编指令表

以下是一些常见的51单片机(如8051系列)的汇编指令:
1. 数据传送指令:
- MOV:将一个数据或寄存器的值移动到另一个寄存器或存储器位置。

- MOVC:将数据从外部代码存储器复制到累加器或寄存器。

2. 算术运算指令:
- ADD:将累加器与另一个寄存器或存储器中的值相加。

- SUB:从累加器中减去另一个寄存器或存储器中的值。

- INC:将累加器或寄存器的值加1。

- DEC:将累加器或寄存器的值减1。

3. 逻辑运算指令:
- ANL:对累加器和另一个寄存器或存储器中的值进行逻辑与操作。

- ORL:对累加器和另一个寄存器或存储器中的值进行逻辑或操作。

- XRL:对累加器和另一个寄存器或存储器中的值进行逻辑异或操作。

- CPL:对累加器或寄存器中的值进行按位取反操作。

4. 条件分支指令:
- CJNE:比较两个值,并在不相等时跳转到指定的地址。

- DJNZ:递减累加器或寄存器,并在结果不为零时跳转到指定的地址。

5. 跳转指令:
- JMP:无条件跳转到指定的地址。

- SJMP:短跳转,跳转到相对于当前地址的指定偏移量。

- AJMP:绝对跳转,跳转到指定的地址。

- LCALL:长调用,将当前地址入栈并跳转到指定的子程序地址。

6. 位操作指令:
- SETB:将某个位设置为1。

- CLR:将某个位清零。

- JB:如果某个位为1,则跳转到指定地址。

- JNB:如果某个位为0,则跳转到指定地址。

第三章8051单片机指令系统

第三章8051单片机指令系统
• 布尔处理操作类指令又称位操作指令。
返回本节
3.1.2 指令格式
• 在MCS-51指令中,一般指令主要由操作码、操作数 组成。 指令格式为:操作码 [目的操作数][,源操作数]
• 指令应具有以下功能: (1)操作码指明执行什么性质和类型的操作。例如,
数的传送、加法、减法等。 (2)操作数指明操作的数本身或者是操作数所在的地
返回本节
3.2.2 直接寻址
• 指令中直接给出操作数地址的寻址方式,能 进行直接寻址的存储空间有SFR寄存器和片 内RAM的128个单元。
例如:MOV A,P1; A←(P1) 把SFR中P1口的内容送A。
MOV A,30H ;A←(30H) 注意解释字段中加括号和不加括号的区别! • 30H为直接给出的内部RAM的地址。
返回本节
3.2.3 寄存器寻址
• 以通用寄存器的内容为操作数的寻址方式。 通用寄存器指A、B 、DPTR以及R0~R7 。 例如:MOV A,R0;A ←(R0) CLR A ;A←0 INC DPTR;DPTR←DPTR+1 ADD A,R5;A←(A)+(R5)
返回本节
3.2.4 寄存器间接寻址
direct所指出的片内存储单元中 。
4.以间接地址为目的操作数
MOV @Ri,A ;(Ri) ← A MOV @Ri,direct ;(Ri) ←(direct) MOV @Ri,#data ;(Ri) ← #data 例如:设(30H)=6FH,R1=40H,
MOV @R1,30H, 结果30H单元中数据取出送入R1间接寻址的 40H单元,(40H)=6FH。
A←(A+PC) 这种寻址方式多用于查表操作。
程序存储器

8051单片机汇编指令速查表分解

8051单片机汇编指令速查表分解

8051系列单片机汇编语言指令速查表说明:1)Ri, Rn指当前工作寄存器,i,n = 0 – 7,当前工作寄存器由程序状态字寄存器PSW的2个位RS1, RS0决定MCS-51使用汇编语言指令,它共有44个操作码助记符,33种功能,其操作数有#data、direct、Rn、@Ri等。

这里介绍指令助记符及其相关符号的记忆方法。

一、助记符号的记忆方法1、表格列举法把44个指令助记符按功能分为五类,每类列表记忆。

此处从略,请读者自己总结。

2、英文还原法单片机的操作码助记符是该指令功能的英文缩写,将缩写还原成英语原文,再对照汉语有助于理解其助记符含义,从而加强记忆。

例如:增量INC-Incremect 减量DNC-Decrement 短转移SJMP-Short jump长转移LJMP-Long jump 比较转移CJNE-Compare jump not equality绝对转移AJMP-Absolute jump 空操作NOP-No operation交换XCH-Exchange 加法ADD-Addition乘法MUL-Multiplication 除法DIV-Division左环移RL-Rotate left 进位左环移RLC-Rotate left carry右环移RR-Rotate right 进位右环移RRC-Rotate right carry3、功能模块记忆法单片机的44个指令助记符,按所属指令功能可分为五大类,每类又可以按功能相似原则为2~3组。

这样,化整为零,各个击破,实现快速记忆。

1)数据传送组。

2)加减运算组MOV 内部数据传送ADD 加法MOVC 程序存储器传送ADDC 带进位加法MOVX 外部数据传送SUBB 带进位减法3)逻辑运算组。

4)子程序调用组。

ANL 逻辑与LCALL 长调用ORL 逻辑或ALALL 绝对调用XRL 逻辑异或RET 子程序返回二、指令的记忆方法1、指令操作数的有关符号MCS-51的寻址方式共有七种:立即数寻址、直接寻址、寄存器寻址、寄存器间址、变址寻址、相对寻址、位寻址。

8051单片机常用指令

8051单片机常用指令

3.2.1数据传送与交换类指令共有28条指令,包括以A,Rn,DPTR,直接地址单元,间接地址单元为目的的操作数的指令;访问外部RAM的指令;读程序存储器的指9.堆栈操作3.2 分类指令在介绍各条分类指令之前,将指令中的操作数及注释中的符号说明如下。

Rn:当前指定的工作寄存器组中的Ro-R7(其中n=0,1,2,…,7)。

Ri:当前指定的工作寄存器组中的RO,R1(其中i=0,1)。

(Ri):Ri间址寻址指定的地址单元。

((Ri)):Ri间址寻址指定地址单元中的内容。

dir:8位直接字节地址(在片内RAM和SFR存储空间中)。

#data8:8位立即数。

#datal6:16位立即数。

addrl6:16位地址值。

addrll:11位地址值。

bit:位地址(在位地址空间中)。

rel:相对偏移量(一字节补码数)。

下面介绍各条分类指令的主要功能和操作,详细的指令操作说明及机器码形式可见附录。

3.2.1数据传送与交换类指令共有28条指令,包括以A,Rn,DPTR,直接地址单元,间接地址单元为目的的操作数的指令;访问外部RAM的指令;读程序存储器的指令;数据交换指令以及准栈操作指令。

9.堆栈操作PUSH dir ;SP十1-6P,(dir)一(SP)POP dir ;((SP))一dir,SP-1--P ,例1 SP=07H,(35H)=55H,指令PUSH 35H执行后,55H送入08H地址单元,SP=08H。

例2 SP=13H,(13H)= 1FH,指令POP 25H执行后,1FH压入25H地址单元,SP此时为12H。

综合例把片内RAM中50H地址单元中的内容与40H地址单元中的内容互换。

方法一(直接地址传送法):MOV A ,50H数据传送与交换类指令是各类指令中数量最多、使用最频繁的一类指令,编程时应能十分熟练地灵活运用3.2.2算术运算类指令共有24条指令,主要包括加、减、乘、除、增量、减量和十进制调整等指令。

单片机setb指令

单片机setb指令

单片机setb指令一、引言单片机是一种集成电路,它包含了处理器、存储器、输入输出接口等多种功能。

在单片机编程中,setb指令是一种常用的指令,它可以将某个IO口置高。

本文将对setb指令进行详细介绍。

二、setb指令的概述setb指令是8051系列单片机中的一个汇编指令,其功能为将某个IO 口置高。

其语法如下:setb bit其中,bit为需要置高的IO口的位地址。

三、setb指令的使用方法1. 确定需要置高的IO口在使用setb指令之前,首先需要确定需要置高的IO口。

在8051系列单片机中,每个IO口都有一个唯一的位地址。

例如P0口的位地址为80H,P1口的位地址为90H等。

2. 编写程序编写程序时,需要使用汇编语言,并在程序中调用setb指令。

以下是一个简单示例代码:MOV P0, #00H ; 将P0端口初始化为低电平SETB P0.0 ; 将P0.0端口置高END ; 程序结束以上代码中,首先将P0端口初始化为低电平,并使用SETB P0.0将P0.0端口置高。

四、setb指令与其他相关指令的比较在单片机编程中,除了setb指令外,还有其他一些相关的指令,例如clr、mov等。

下面将对这些指令进行简要比较。

1. setb与clr指令setb指令用于将某个IO口置高,而clr指令则用于将某个IO口置低。

两者功能相反,但使用方法类似。

2. setb与mov指令mov指令是单片机编程中最基本的汇编指令之一,其功能为将数据从一个寄存器或内存位置复制到另一个寄存器或内存位置。

而setb指令则只能用于IO口的置高操作。

五、setb指令的注意事项1. setb指令只能用于将某个IO口置高,不能用于将某个IO口置低。

2. 在使用setb指令之前,需要确定需要置高的IO口的位地址。

3. 在编写程序时,需要使用汇编语言,并在程序中调用setb指令。

六、结论本文对单片机中常用的setb指令进行了详细介绍。

通过学习本文内容,读者可以了解到setb指令的概述、使用方法以及与其他相关指令的比较等内容。

51单片机djnz指令用法

51单片机djnz指令用法

51单片机djnz指令用法DJNZ(Decrement and Jump if Not Zero),即减一并跳转指令,是8051单片机中的一条有条件跳转指令。

该指令用于将一个存储器寄存器的值减一,然后检查是否不等于零,如果不等于零则跳转到指定的目标地址,如果等于零则执行下一条指令。

先来看看DJNZ指令的语法:DJNZ d, offset其中,d表示一个寄存器或直接寻址的存储器操作数,offset表示有符号的跳转偏移量。

d可以是R0-R7,也可以是内部RAM的一个地址。

下面是DJNZ指令的执行步骤:1. 将d所表示的存储器寄存器的值减一。

2. 检查减一后的值是否不等于零,如果不等于零则继续执行下一条指令;如果等于零则跳转到offset指定的目标地址。

DJNZ指令的作用是通过循环控制实现特定的计算或操作。

通常将其与INC或DEC指令配合使用,可以实现简单的计数、累加或累减功能。

下面是一个例子,演示如何使用DJNZ指令实现一个简单的循环计数器:```ORG 0MOV R0, #10 ; 设置计数器初始值为10LOOP:INC A ; A寄存器自增DJNZ R0, LOOP ; 通过DJNZ指令判断R0是否为0,如果非零则跳转到LOOP处继续循环...```上述代码中,首先将计数器R0的值设为10,然后通过INC指令将A寄存器的值自增,然后使用DJNZ指令判断R0是否为0。

如果不为0,则跳转到LOOP处继续循环,否则执行循环之外的代码。

通过这种方式,可以实现循环计数器的功能。

在使用DJNZ指令时,需要注意以下几点:1. DJNZ指令只能用于有符号跳转,即offset是一个有符号的跳转偏移量。

范围为-128到+127。

2. DJNZ指令只能用于有限的寻址方式,包括直接寻址、间接寻址、寄存器的直接寻址和间接寻址。

3. DJNZ指令不能用于累加寄存器A。

总之,DJNZ指令是8051单片机中一条实用的有条件跳转指令,它通过将一个存储器寄存器的值减一,并判断减一后的值是否为零,来实现循环控制和条件判断的功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.2.1数据传送与交换类指令共有28条指令,包括以A,Rn,DPTR,直接地址单元,间接地址单元为目的的操作数的指令;访问外部RAM的指令;读程序存储器的指9.堆栈操作3.2 分类指令在介绍各条分类指令之前,将指令中的操作数及注释中的符号说明如下。

Rn:当前指定的工作寄存器组中的Ro-R7(其中n=0,1,2,…,7)。

Ri:当前指定的工作寄存器组中的RO,R1(其中i=0,1)。

(Ri):Ri间址寻址指定的地址单元。

((Ri)):Ri间址寻址指定地址单元中的内容。

dir:8位直接字节地址(在片内RAM和SFR存储空间中)。

#data8:8位立即数。

#datal6:16位立即数。

addrl6:16位地址值。

addrll:11位地址值。

bit:位地址(在位地址空间中)。

rel:相对偏移量(一字节补码数)。

下面介绍各条分类指令的主要功能和操作,详细的指令操作说明及机器码形式可见附录。

3.2.1数据传送与交换类指令共有28条指令,包括以A,Rn,DPTR,直接地址单元,间接地址单元为目的的操作数的指令;访问外部RAM的指令;读程序存储器的指令;数据交换指令以及准栈操作指令。

9.堆栈操作PUSH dir ;SP十1-6P,(dir)一(SP)POP dir ;((SP))一dir,SP-1--P ,例1 SP=07H,(35H)=55H,指令PUSH 35H执行后,55H送入08H地址单元,SP=08H。

例2 SP=13H,(13H)= 1FH,指令POP 25H执行后,1FH压入25H地址单元,SP此时为12H。

综合例把片内RAM中50H地址单元中的内容与40H地址单元中的内容互换。

方法一(直接地址传送法):MOV A ,50H数据传送与交换类指令是各类指令中数量最多、使用最频繁的一类指令,编程时应能十分熟练地灵活运用3.2.2算术运算类指令共有24条指令,主要包括加、减、乘、除、增量、减量和十进制调整等指令。

其中,大多数指令都同时以A为源操作数之一和目的操作数。

1.加说明:借位位来自程序状态字PSW中的进位位C,只是在作减法运算时,被用作借位位。

例 A=38H,R1=20H,(20H)=23H,C=1 指令SUBB A,@R1执行后,A=14H。

4.乘法MUL AB ;A×B-BA说明:本指令实现8位无符号乘法。

A,B中各放一个8位乘数,指令执行后,16位积的高位在B中,低位在A中。

例 A=50H,B=40H,指令MUL AB执行后,A=00H,B=32H5.除法DIV AB ;A÷ B-商在A中,余数在B中说明:本指令实现8位无符号除法。

A放被除数,B放除数,指令执行后,A中为商,B 中为余数。

若除数B=00H,则指令执行后,溢出标志OV=1,且A,B内容不变。

例1 A=28H,B=12H,指令DIV AB执行后,A=02H,B=04H。

例2 A=08H,B=09H,指令DIV AB执行后,A=00H,B=08H。

综合例1 把在R4和R5中的两字节数取补(高位在R4中)CLR CMOV A , R5CPL AINC AMoV R5, AMoV A, R4CPL AADDC A, #00HMOV R4,ASJMP $综合例2 把R7中的无符号数扩大10D倍(设原数小于25D)MOV A ,R7MOV B ,#0AHMUL ABMoV R7, ASJMP $综合例3 把R1R0和R3R2中的2个4位跃D数相加,结果送入R5R4中,如有进位则存于进位位C中。

CLR CMOV A,R0ADD A,R2DA AMOV R4,AMOV A,R1ADDC A,R3DA AMOV R5,ASjMP $在MCS-51系列单片机的算术运算类指令中,乘除法指令是许多8位微处理器和一些8位单片机所没有的,执行时间为4个机器周期。

这种指令对编制比较复杂的运算程序,例如,比例-积分-微分(PID)运算、浮点运算、多字节数乘除运算等是经常要用到的。

3.2.3逻辑运算与循环类指令共有24条指令。

逻辑运算指令主要包括逻辑"与"、"或"、"异或"、求反和清零;循环指令则都是对A的大循环操作,包括有左、右方向以及带与不带进位位的不同循环方式。

例A=16H,指令RR A执行后,A=0BH。

综合例把R2R3中的16位补码数(高位在R2中)右移一位,并不改变符号。

MOV A ,R2MOV C ,ACC.7 ;把符号位存入进位位CRRC AMOV R2, AMOV A, R3RRC AMOV R3 , ASJMP $3.2.4子程序调用与转移类指令共有14条指令。

子程序调用类有绝对调用和长调用两种;转移类分为无条件转移和条件转移两组。

无条件转移包括绝对转移、长转移、短转移和间接转移;条件转移包括结果为零、结果为非零、减一后结果为非零以及两数不相等的转移条件,它们全部采用相对转移的方式。

绝对于程序调用和绝对转移指令的机器码形式比较特殊,操作码不是在前面而是在中间,并且调用和转移的范围都只在2K地址范围内,这在使用时应予以注意。

1.绝对调用ACALL addrll ;addrll一PC0-10,PC11-16不变说明:①调用范围本指令在2K地址范围内的子程序调用。

本指令实现的操作将不改变原PC的高5位(PC1l-15),仅把11位地址addrll送入PC的低11位(PC0-10),以此确定子程序的入口地址。

由于整个64K程序存储器空间被分成32个基本2K地址范围(见表2.1),编程时,必须保证紧接AC从L 指令后面的那一条指令的第一字节与被调用于程序的入口地址在同一2K范围内,否则将不能使用ACALL指令实现这种调用。

②机器码形式本指令为二字节指令。

设子程序入口地址addrll的各位是a10a9a8a7a6a5a4a3a2a1a。

,则ACALL指令的二进制机器码为a10a9a810001a7a6a5a4a3a2a1a0,其中10001为ACALL指令的操作码。

例子程序调用指令ACALL在程序存储器中的首地址为0100H,子程序入口地址为0250H。

试确定能否使用ACALL指令实现调用?如果能使用,确定该指令的机器码。

解因为ACALL指令的首地址在0100H,而ACALL是2字节指令,所以下一条指令的首地址在0102H。

由表2.1可见,0102H和0250H在同一2K地址范围内,故可用ACALL调用。

调用入口地址为0250H的ACALL指令的机器码形式为:0101000101010000B=5150H2,长调用LCALL addrl6 ;addrl6一PCo-l5说明:本指令为64K程序存储器空间中的全范围子程序调用指令,子程序入口地址可在64K地址空间中的任一处。

本指令为3字节指令。

3.无条件转移指令(1)绝对转移AJMP addrll ;addrll一PC0-10说明:①转移范围本指令为2K地址范围内的转移指令。

对转移目的地址的要求与ACALL指令中对于程序入口地址的要求相同。

②机器码形式本指令为2字节指令。

设addrll的各位是a10a9a8a7a6a5a4a3a2a1a0,则指令AJMP addrll的二进制机器码为al0a9a800001a7a6a5a4a3a2ala0。

例绝对转移指令AJMP在程序存储器中的首地址为2500H,要求转移到2250H 地址处执行程序,试确定能否使用AJMP指令实现转移?如能实现,其指令的机器码形式是什么?解因为AJMP指令的首址为2500H,其下一条指令的首址为2502H,由表2.1可见,2502H与转移目的地址2250H在同一2K地址范围内,故可用AJMP指令实现程序的转移。

指令的机器码:0100000l01010000B=4150H(2)长转移LJMP addrl6 ;addrl6一PC0-15说明:本指令为64K程序存储器空间的全范围转移指令。

转移地址可为16位地址值中的任一值。

本指令为3字节指令。

(3)短转移SJMP rel ;PC十2十rel-PC说明:本指令为一页地址范围内的相对转移指令。

因为肥l为l字节补码(偏移量),且SJMP rel 指令为2字节指令,所以转移范围为一126D一十129D。

(4)间接转移JMP @A十DPTR ;A十DPTR-PC例1 A=02H,DPTR=2000H,指令JMP @A十DPTR执行后,PC=2002H。

也就是说,程序转移到2002H地址单元去执行。

例2现有一段程序:MOV DPTR ,#TABLEJMP @A十DPTRTABLE:AJMP RoUT0AJMP RoUTlAJMP RoUT2::AJMP ROUTn根据JMP @A十DPTR指令的操作可知,当A=00H时,程序转入到地址ROUT0处执行;当A=02H时,转到ROUTl处执行……。

可见这是一段多路转移程序,进入的路数由A确定。

因为AJMP指令是2字节指令,所以要求A必定为偶数。

4.条件转移指令(1)累加器为零(非零)转移JZ rel ;A=0则转移(PC十2十rel一PC);A≠0程序顺序执行JNZ rel ;A≠0 则转移(PC+2+rel-PC);A=0程序顺序执行(2)减一非零转移DJNZ Rn,rel; ;Rn一1-Rn,Rn≠ o,则转移(PC十2十re- PC);Rn=0,程序顺序执行DJNZ dir,rel;(dir)一l-dir,(dir)≠0则转移(PC十3十rel-PC);(dir)=o,程序顺序执行说明:UNZ Rn,rel是2字节指令,而DJNz dir,rel是3字节指令,所以在满足转移的条件后,前者是PC十2十rel一PC,而后者是PC十3十rel 一PC。

例试说明下列一段程序运行后A中的结果。

MOV 23H,# 0AH说明:①CJNE指令都是3字节指令。

②若第一操作数大于或等于第二操作数,则影响标志C=0(如指令CJNE A,dir,rel中A>=(dir)等);若第一操作数小于第二操作数,则C=l(如指令CJNE A,dir,rel中A<(d5r)等)。

利用对C的判断,可使这几条指令实现两操作数相等与否的判断,还可完成两数大小的比较。

例1 R7=56H,指令CJNE R7,#34H,$十08H执行后,程序转移到放本条CJNE指令的首地址($)加08H后的地址单元去执行。

例2 安排程序,要求读Pl端口上的信息,若不为55H则程序停着等待,只有到P1端口为55H时,程序往下顺序执行。

程序为:MOV A, #55HCJNE A, P1,$ '5.相对偏移量rel的求法在短转移和条件转移中,用偏移量rel和转移指令所处的地址值来计算转移的目的地址。

相关文档
最新文档