51单片机寻址方式资料讲解
单片机指令系统的寻址方式
单片机指令系统的寻址方式要正确执行指令,就必需能得到正确的操作数和操作码。
操作码字段在机器里的表示比较简洁,只需对每一种操作指定确定的二进制代码就可以了。
指令的操作数字段的状况就比较简单,操作数可能就在指令中,也有可能在寄存器或存储器中,这此设备内的数据要正确进行操作就要在指令中指出其地址,查找操作数地址的方法称为寻址方式。
51系列单片机指令系统的寻址方式有以下7种。
一、马上寻址在这种寻址方式中,指令中跟在操作码后面的一个字节就是实际操作数。
在这种寻址方式中,指令中跟在操作码后面的一个字节就是实际操作数。
马上数前面必需有符号“#”。
例:MOV A, #0FFH ; FFH →(A)将马上数FFH送入累加器A。
这条指令为双字节指令,操作数FFH以指令形式存放在程序存储器内。
二、直接寻址直接寻址就是在指令中包含了操作数的地址,该地址直接给出了参与运算或传送的数据所在的字节单元或位。
直接寻址方式中操作数存储的空间有三种。
(1)访问内部低128个字节单元(00H~7FH),指令中直接给出地址。
例:MOV A, 70H ; 70H)→(A)把RAM 70H单元中的内容送累加器A。
(2)访问特别功能寄存器,只能用直接寻址方式进行访问。
例:MOV IE, #85H ; 85H→(IE)。
IE为特别功能寄存器,其字节地址为A8H。
(3)位地址空间的访问,指令中以位名称或者位地址的形式给出。
例:MOV C, 00H ; 将00H单元的内容→进位位C。
三、寄存器寻址寄存器寻址是指以某一个可寻址的寄存器的内容为操作数。
寄存器寻址指令中,操作数域中给出的是操作数所在的寄存器,寄存器的内容才是本条指令的操作数。
四个寄存器组共有32个通用寄存器,但指令中使用的是当前工作寄存器组,因此在使用寄存器寻址指令前,必需先将RS0,S1位置位,确定当前工作寄存器组。
例:MOV A, Ri ;(Ri)→(A)。
四、寄存器间接寻址在这种寻址方式中,操作数所指定的寄存器中存放的不是操作数本身,而是操作数的地址。
第三章 MCS-51单片机的寻址方式和指令系统
由此可把数据传送指令分成三部分
(一)内部数据传送(通用传送指令)
1.以A为目的操作数
MOV A,Rn MOV A,@Ri ;A← (Rn) ;A←((Ri))
双字节
11101rrr 1110011i
MOV A,direct ;A←(direct) 11100101 direct
MOV A,#data ;A←#data 例: MOV A,@R1 若(R1)=20H,(20H)=62H 结果:(A)=62H 11100100 data
指令MOVC A,@A+DPTR;执 行示意图
结果:(ACC)=64H
六、相对寻址
以当前PC的内容为基准,加上指令给出的 偏移量(rel)形成新的PC值(转移地址) 的寻址方式。
转移地址=目的地址 =当前(PC)+rel
目的地址=PC当前值十rel 目的地址=转移指令的PC值+2(或3)十rel 目的地址=转移指令地址+转移指令字节数+rel
单周期:64 双周期:45 四周期:2
若fosc=12MHz, 大多指令执行 仅1μs
按照指令的功能分5大类
一、数据传送类指令(29条) 二、算术运算类指令(24条) 三、逻辑操作类指令(24条) 四、控制转移类指令(17条) 五、位操作类指令 (17条)
在描述指令系统的功能时,常用符号介绍:
@——间址符号,如@Ri,@DPTR 13. / ——位操作数的前缀,表示对该位操作 数取反,如/bit。 14. (×)——由×寻址的单元中的内容。 15. ((X))——由X的内容作为地址的存 储单元的内容。 16. ← ——箭头右边的内容取代箭头左边的 内容。
12.
一、数据传送类指令(29条)
第三讲51单片机存储器及寻址方式
TMOD 定时器方式寄存器
部分专用寄存器介绍
1) 程序状态字寄存器PSW C AC F0 RS1 RS0 OV F1 P
C:为进位标志,AC:半进位标志,F0 、 F1为用户标志, RS1和RS0为当前工作寄存器组的选择位,OV 是溢出标志 位, P是奇偶标志位。
2)ACC:累加器 3)DPTR:地址寄存器
B ACC PSW TH2* TL2* RCAP2H* RCAP2L* T2MOD* T2CON* IP P3 专 IE 用 WDTRST 寄 P2 存 SBUF 器 SCON 区 P1 SFR TH1 TH0 TL1 TL0 TMOD TCON PCON DP1H DP1L DPH DPL SP P0
工作寄存器区: 00H~1FH
30H 2FH
用户RAM区
位寻址区:
20H~2FH
20H 1FH 18H 17H
位寻址区 (位地址00H~7FH)
第3组工作寄存器区R0~R7
用户RAM区: 30H~7FH
第2组工作寄存器区R0~R7 10H 0FH 第1组工作寄存器区R0~R7 08H 07H 第0组工作寄存器区R0~R7 00H
二、数据存储器
工作寄存器区
地址:00H~1FH,32B;
4组:每组为8个8位寄存器
R0~R7;
由PSW中的RS1,RS0选择 当前工作寄存器。
RS1RS0与工作寄存器的关系
工作寄存器选择
组
0 1 2
RS1 RS0 R0
0 0 1 0 1 0 00H 08H 10H
R1
01H 09H 11H
假定R1寄存器的内容是 60H,则其功能是以 R1寄存 器的内容60H为地址,将60H地址单元的内容与累加器A 中的数相“与”,其结果仍存放在A中。
MCS-51单片机指令系统的寻址方式
MCS-51单片机指令系统的寻址方式1、寄存器寻址寄存器寻址方式可用于访问选定寄存器区的8个工作寄存器R0~R7。
由指令操作码的低3位指示所用的寄存器,寄存器A、B、DPTR和C 位(位处理机的累加器)也可作为寻址的对象。
2、直接寻址直接寻址是访问特别功能寄存器的唯一方法。
它也用于访问内部RAM(低128个字节)。
采纳直接寻址方式的指令是双字节指令,其中第一个字节是操作码,其次个字节是内部RAM或特别功能寄存器的直接地址。
3、寄存器间接寻址寄存器间接寻址方式可用于访问内部RAM或外部数据存储器。
这种寻址方式是由指令指定某一寄存器的内容作为操作数的地址。
访问内部RAM或外部数据存储器的低256个字节时,可采纳R0或R1作为间址寄存器。
4、马上寻址采纳马上寻址方式的指令是双字节的。
第一个字节是操作码,其次字节就是操作数。
因此,操作数就是存放在程序存储器内的常数。
5、基址寄存器加变址寄存器间址寻址这种寻址方式用于访问程序存储器的一个单元,该单元的地址是基址寄存器(DPTR或PC)的内容与变址寄存器A的内容之和。
例如指令“MOVC A,@A+DPTR”,其中A的原有内容为05H,DPTR的内容为4000H,该指令执行的结果是把程序存储器4005H单元的内容传送给累加器A。
6、相对寻址相对寻址用于访问程序存储器,它只消失在相对转移指令中。
相对寻址是将程序计数器PC中的当前值与指令其次字节所给出的数据(该数据也称为偏移量)相加,其和为跳转指令的转移地址。
转移地址也称为转移目的地址。
偏移量是一有符号数,其取值范围为-128~+127。
7、位寻址位寻址是指对片内RAM的位寻址区(20H~2FH)和可以位寻址的专用寄存器进行位操作时的寻址方式。
这种寻址方式与直接寻址方式的形式和执行过程基本相同。
在进行位操作时,借助于进位C作为操作的位累加器,操作数直接给出该位的地址,然后依据操作码的性质对其进行位操作。
MCS51寻址方式
(4)立即寻址方式 • 立即寻址:操作数在指令中直接给出
例1:8位立即数操作 MOV A, #3AH ; MOV A,#data
例2:16位立即数操作 MOV DPTR, #data16 ;
2020/5/2
(5)变址间接寻址方式 • 变址间接寻址:以DPTR或PC作为基址寄存器,以累
通用形式:MOVX指令,例:MOVX A, DPTR; (3)外部RAM的低256字节,除用上面的DPTR,还可
用间址寄存器R0和R1去寻找片外RAM的低256字节 ;通用形式:MOVX 指令及Ri(i=1或0); (4)堆栈操作指令(PUSH和POP), 以堆栈指针( SP)作间址寄存器的间接寻址方式。
7FH
例1:MOV A, R0;
ACC
若(R0)=55H
AAH
例2:书P47
2020/5/2
55H AAH
R0 55H 00H
片内低128字节RAM
• 寄存器间接寻址的范围: (1)内部RAM低128字节,通用形式:MOV指令及 Ri(i
=1或0); (2)外部RAM的64K空间,使用间址寄存器:DPTR;
2020/5/2
2020/5/2
MCS-51存储器映像图
• 寻址:在单片机的存储空间中寻找指令规定的 操作数据的地址,并将操作数取出来。通常是 根据指令的源操作数来决定寻址方式的。
• MCS-51单片机中共有7种寻址方式。 见书P46表3.3
2020/5/2
(1)寄存器寻址方式
• 寄存器寻址:操作数在寄存器中,其中寄存器 包括:当前工作寄存器组R0~R7或A、B、 DPTR等
2020/5/2
专用寄存器的寻址位在指令中的表达方式(4种): 1、 直接使用位地址 2、 使用位名称 3、 使用单元地址加位数 4、 使用专用寄存器符号加位数
单片机学习:51单片机寻址方式详解
单片机学习:51单片机寻址方式详解51单片机是对所有兼容Intel 8031指令系统的单片机的统称。
该系列单片机的始祖是Intel 8031单片机,后来随着Flash rom 技术的发展,8031单片机取得了长足的发展,成为了应用最广泛的8位单片机之一。
51单片机是基础入门的一个单片机,并且还是应用最广泛的一种。
今天我们主要讲讲51单片机的寻址方式。
【指令】指令是人们向计算机发的一种命令,一条指令对应着一种操作。
【指令系统】CPU所能执行的全部指令的集合。
CPU能够执行多少条指令是由CPU的内部结构所决定的。
不同的CPU,其指令系统不同。
【指令的表示方法】指令在机器中必须以机器码(二进制码)的形式出现。
在书写指令时,通常有两种方法:1. 在计算机发展的初期,人们用机器码书写指令,这一阶段成为机器语言阶段。
优点:用机器码书写的程序,计算机可以直接识别和运行。
缺点:书写时容易出错,不容易记忆。
2. 为了克服机器语言的缺点,人们用符号书写指令:指令由操作码和操作数组成。
优点:容易理解和记忆。
缺点:计算机不能直接识别和运行。
汇编语言程序必须转换成机器语言程序,转换方法有两种:手工转换:查表符号指令——机器码指令——MEM汇编程序:符号指令——机器——机器码指令——MEM【寻址方式】寻址方式由操作码和操作数组成。
操作码:决定CPU执行何种操作操作数:就是操作对象,无论何种指令其操作的对象都是数据。
数据:数据在指令中有2种表示方法:1.数本身;2.数所在的地方指出操作数所在的方式就是寻址方式。
【51单片机寻址的方式】每一种计算机都具有多种寻址方式,寻址方式的多少是反映指令系统优劣的主要指标之一。
51单片机有7种寻址方式:1. 立即寻址2. 直接寻址3. 寄存器间址4. 寄存器寻址5. 变址寻址(基址寄存器+变址寄存器间接寻址)6. 相对寻址7. 位寻址【立即寻址】指令的操作数存放在程序存储器中,操作数紧跟在操作码后面。
MCS-51系列单片机寻址方式
程序存储器
SFR
PC
10010011 操作码 A
1XEXH
030FH
XX
DPH 02H 02F1H DPL F1H
ALU
02F1H +1EH=030FH
7
6、相对寻址(一)
相对寻址以PC当前值(PC当前值是执行完指令后的值,也就 是当前指令的PC值+指令所占的字节数)作为基地址,与指令 中给定的偏移量rel相加,所得的结果作为程序的转移地址, 指令中的偏移量rel是一个用补码表示的8位带符号数。相对 寻址用于相对转移指令中,如:
MCS-51系列单片机寻址方 式
寻址方式:计算机指令中操作数(按地址)获取的方式 MCS-51系列单片机提供了7种寻址方式,如果一条指令 中包含多个操作数,就可能用到一种以上的寻址方式
1、立即寻址 2、直接寻址 3、寄存器寻址 4、寄存器间接寻址 5、变址寻址 6、相对寻址 7、位寻址
1
1、立即寻址(一)
8
6、相对寻址(二)
程序存储器
PC 0100H PC+1 0101H PC+2 0102H
60H 30H
操作码
偏移量 rel=30H
PC 01032H
PC 0123H XX
ALU 0102H +30H= 0132H
9
7、位寻址
MCS-51系列单片机中有专用的位运算指令,可以对位寻址区的每一 个位进行数据传送、逻辑运算等操作,如:
R5 XX
A XX
5
4、寄存器间接寻址
在指令的操作码中包含了某一工作寄存器的地址(可用作地 址指针的工作寄存器是@Ri:R0、R1),而操作数地址则存 放在该寄存器中,如:
MS51单片机
如PSW.3
例如:MOV C, 37H; (Cy) ← (37H)
二、寻址空间及举例
寻址空间见表3-1
例3-1 将D5H位的内容送入Cy,可用几种方式表达?
(1) MOV C, D5H (2) MOV C, D0H.5 (3) MOV C, F0 (4) MOV C, PSW.5
目的地址=PC当前值+rel=起始地址+转移指令 本身字节数+rel
相对偏移量rel是有符号的8位二进制数,用补 码表示。
例如:程序存储器1068H地址单元开始存放双字节指令 SJMP 30H,执行后PC当前值为(PC)←(PC) +2=1068H+2=106AH,则跳转目的地地址为
106AH+30H=109AH
例3.2 判断下列指令个操作数的寻址方式
(1) MOV (2) MOV (3) MOV (4) MOV
A, #65H @ R1, 65H 30H, R2 C, 20H
(5) DJNZ R2, (6) MOV 60H, (7) MOVC A,
LOOP @R1
@A+DPTR
例如: MOVC A,@A+DPTR;((A)+(DPTR))→(A)
6、相对寻址
相对寻址只出现在相对转移指令中。相对转移 指令执行时,是以当前的PC值加上指令中给出 的相对偏移量rel而形成转移目的地址。
PC的当前值是执行完相对转移指令后的PC值, 实际上是紧接转移指令下面一条指令的地址。
7、位寻址
位寻址适用于可以进行单独位操作的指 令,指令中直接给出位地址寻找位操作 数。
51单片机寻址方式文档资料
以当前PC值为基准地址,加上指令的 偏移量“rel”,结果为目标地址。rel为 有符号补码数,范围:-128~+127
寻址空间: 程序存储器
指令的三种形式: 一般为双字节或三字节指令
操作码 rel
操作码 直接地址
rel
操作码 立即数 rel
22
例: SJMP rel 操作:跳转到的目的地址 = 当前16位PC值 + rel
20
例: MOVC A,@A+DPTR 设(A)= 0FH (DPTR)= 2400H
PC
RO
A
9M3H
操作码 ×0F×H
DP 2T4R00H
PC
……
240F × ×
“读”
H
MOVC
PSEN A,@A+DPTR
ALU
21
6、相对寻址
Relative Addressing
相对寻址
寻址指令 执行地址 目标地址
3) 规定工作寄存器只有R0和R1才用于间接寻 址
4)规定用MOV指令访问片内RAM,用MOVX访问 外部RAM
19
5、基址寄存器加变址寄存器间接寻址 基址寄存器加变址寄存器间接寻址: 以DPTR或PC作基址寄存器,A作变址寄存器 两者相加形成操作数地址。 寻址空间: 程序存储器(@A+DPTR、@A+PC) 指令形式: 操作码
总共
128 个可 按位 寻址 的位
28
小结: 寻址方式与相应的寻址空间
方式
寄存器
利用的变量 R0~R7,A,B
CY,DPTR
直接寻址
direct
寄存器间址
立即数 基址加变址 相对寻址
@R0, @R1, SP @R0, @R1 ,@DPTR
51单片机寻址方式资料讲解
51单片机寻址方式51单片机的寻址方式寻址方式:指定操作数所在单元的方法。
在我们学习的8051单片机中,有7种寻址方法,下面我们将逐一进行分析。
一、立即寻址用“#”作前缀MOV A,#20H在这种寻址方式中,指令多是双字节的。
立即数就是存放在程序存储器中的常数,换句话说就是操作数(立即数)是包含在指令字节中的。
例如: MOV A,#3AH这条指令的指令代码为74H、3AH,是双字节指令,这条指令的功能是把立即数3AH送入累加器A中。
MOV DPTR,#8200H在前面学单片机的专用寄存器时,我们已学过,DPTR是一个16位的寄存器,它由DPH及DPL两个8位的寄存仅供学习与交流,如有侵权请联系网站删除谢谢2器组成。
这条指令的意思就是把立即数的高8位(即82H)送入DPH寄存器,把立即数的低8位(即00H)送入DPL寄存器。
二、直接寻址指令中直接给出操作数的地址。
MOV A,30H;这条指令中操作数就在30H单元中,也就是30H 是操作数的地址,并非操作数。
MOV 30H,DPH在80C51单片机中,直接地址只能用来表示内部数据存储器、位地址空间以及特殊功能寄存器,具体的说就是:1、内部数据存储器RAM低128单元。
在指令中是以直接单元地址形式给出。
我们知道低128单元的地址是00H-7FH。
在指令中直接以单元地址形式给出这句话的意思就是这0-127共128位的任何一位,例如0位是以00H这个单元地址形式给出、1位就是以01H单元地址给出、12 7位就是以7FH形式给出。
2、位寻址区。
20H-2FH地址单元。
仅供学习与交流,如有侵权请联系网站删除谢谢33、特殊功能寄存器。
专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出。
例如下面我们分析的一条指令 MOV IE,#85H 前面的学习我们已知道,中断允许寄存器IE的地址是80H,那么也就是此指令也可以以 MOV 80H,#85H的形式表述。
51系列单片机的寻址方式
51系列单⽚机的寻址⽅式AT89C51单⽚机能直接认识和执⾏的机器指令有255条,有7种寻址⽅式,即⽴即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。
1. 直接寻址:指令中直接给出参与操作的数据的地址,该地址⼀般⽤direct表⽰。
汇编指令:MOV A,direct该指令的功能是将⽚内RAM地址direct单元中的内容(参与操作的数据)传送到累加器A中,双字节指令。
2. ⽴即寻址:指令中直接给出参与操作的数据,称⽴即数,⽤data表⽰。
在汇编语⾔中,为标明⽴即数,为data加前缀”#”。
⽴即数可以是8位和16位⼆进制数,分别⽤#data和#data16表⽰。
汇编语⾔指令:MOV A,#data该指令将⽴即数data传送到累加器A中,双字节指令。
3. 寄存器寻址:参与操作的数据存放在寄存器中,汇编指令中直接以寄存器名来表⽰参与操作的数据地址,寄存器包括⼯作寄存器R0~R7、累加器A、AB、数据指针DPTR和位运算寄存器C。
汇编语⾔指令:MOV A,Rn ;n=0~7该指令将Rn中的内容传送到累加器A中,单字节指令。
4. 寄存器间接寻址:寄存器间接寻址为⼆次寻址,第⼀次寻址得到寄存器的内容为(Ri)或(DPTR),第⼆次寻址是将第⼀次寻址得到的寄存器内容作为地址,并在其中存、取参与操作的数据。
汇编语⾔中,寄存器前缀@是寄存器间接寻址的标志,有@Ri、@DPTR等。
汇编语⾔指令:MOV A,@Ri ;i=0、1该指令是将Ri中的内容作为地址,再将该地址中的内容传送到累加器A中,单字节指令。
5. 变址寻址:间接寻址由两个寄存器提供。
若由A、PC提供,在汇编语⾔指令中寻址地址表⽰为@A+PC;若由A和DPTR提供,在汇编语⾔指令中寻址地址为@A+DPTR。
其中,PC或DPTR被称为基址寄存器,A被称为变址寄存器,基址与变址相加为16位⽆符号加法。
若变址寄存器A中内容加基址寄存器DPTR(或PC)中内容时,低8位有进位,则该进位直接加到⾼位,不影响进位标志。
MCS-51单片机寻址方式小结
MCS-51单片机寻址方式小结MCS-51单片机寻址方式小结MCS-51单片机寻址方式小结20__-08-2920:34:02|分类:エ程|标签:|字号大中小订阅MCS-51单片机指令系统共使用7中寻址方式,包括寄存器寻址、直接寻址、立即数寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址等。
寻址方式定义操作数存放(1)通用寄存器R0~R7;寄存器于寄存器中,(2)部分专用寄存器,例如累加器A、寄存器B以寻址指令中给出数据指针DPTR等名寄存器存放操作数的(1)内部RAM中的低128地址单元,地址范围为内存单元地址00H~FFH;直接寻址直接写在指令中立即数操作数直接寻址写在指令中(2)专用寄存器。
专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出。
源操作数为立即数,立即数前面必须加“#”号,以区别立即数和直接地址(1)内部RAM的低128字节。
对内部RAM的低128字节单元的间接寻址,只能使用R0或R1做间将存放操作接寻址寄存器,其通过形式为@Ri(i=0或1);MOVP1,#55HMOVDPTR,#20__HMOVR1,20HMOVA,P1CLRAMOVP1,R4MOVA,R1寻址区域指令举例数的内存单元(2)外部RAM的64K字节。
对外部RAM的64KMOVA,@R0寄存器的地址放在寄字节的间接寻址,使用DPTR作间接寻址寄存器,MOVXA,@DPTR间接寻址存器中,指令其形式为@DPTR;MOVXA,@R0中只给出该寄(3)外部RAM的低256字节。
外部RAM的低256存器字节是一个特殊的寻址区,除了可以使用DPTR作间接寻址寄存器外,还可以使用R0或R1作间接寻址寄存器将基寄存器变址寻址与变址寄存器的内容相(1)变址寻址是专门针对程序存储器的寻址方式,所以只能对程序存储器进行寻址,寻址范围为64K字节;MOVCA,@A+PC加,结果作为操作数的地址(2)变址寻址指令只有2条:MOVCA,@A+PCMOVCA,@A+DPTR将程序计数器PC的当前内容与指令相对寻址中的操作数相加,其结果作为跳转指令的转移地址(1)内部RAM的位寻址区,地址范围是20H~2FH,共16个RAM单元,每个单元包括8个位,共按位进行的位寻址操作(2)特殊功能寄存器SFR中的11个寄存器可以位寻址,包括83个位计128个位,位地址为00H~7FH;MOVC,0D0HMOVC,0DOH.0MOVC,PMOVC,PSW.0专门为改变程序执行方向而设置的SJMP54H扩展阅读:课题MCS-51型单片机的寻址方式广告灯设计软件部分课题MCS-51型单片机的寻址方式授课方式:讲授教学目的:1.让学生了解汇编语言指令的格式;2.让学生掌握单片机指令的7种寻址方式。
51系列单片机寻址方式
51系列单片机寻址方式同的寻址方式。
1 立即数寻址指令中直接给出操作数的寻址方式称为立即数寻址。
在51系列单片机指令系统中,立即数用前面加“#”号的8位数表示(#data,如#30H)或16位数(#data16,如#2052H)表示。
举例说明立即数寻址方式,以传送指令为例。
例:MOV A, #80H ;80H——>AMOV DPTR, #2000H ;2000H——>DPTR2 直接寻址指令中直接给出操作数地址(dir)的寻址方式称为直接寻址。
寻址对象为:1 内部数据存储器,在指令中以直接地址表示;2特殊功能寄存器SFR,在指令中用寄存器名称表示。
下面举例说明。
例:MOV A, 25H ;内部RAM的(25H)——>AMOV P0, #45H ;45H——>P0 ,P0为直接寻址的SFRMOV 30H,20H ;内部RAM的(20H)——>(30H)3 寄存器寻址以通用寄存器的内容为操作数的寻址方式称为寄存器寻址。
通用寄存器包括:A、B、DPTR、R0~R7。
其中B寄存器仅在乘法、除法指令中为寄存器寻址,在其它指令中为直接寻址。
A寄存器可以寄存器寻址,又可以直接寻址(此时写作ACC)。
直接寻址和寄存器寻址的差别在于,直接寻址是操作数所在的字节地址(占一个字节),寄存器寻址是寄存器编码出现在指令码中。
寄存器寻址速度比直接寻址要快。
除上面所指的几个寄存器外,其它特殊功能寄存器一律为直接寻址。
例:MOV A, R0 ;R0——>A,R0为寄存器寻址MUL AB ;A×B——>BA,A,B为寄存器寻址MOV B, R0 ;R0——>B,R0为寄存器寻址,B为直接寻址PUSH ACC ;A的内容入栈,A为直接寻址ADD A, ACC ;A为寄存器寻址,ACC为直接寻址4 寄存器间接寻址以寄存器中的内容为地址,该地址的内容为操作数的寻址方式称为寄存器间接寻址。
MCS51单片机指令系统1指令格式和寻址方式
MCS51单片机指令系统1 指令格式和寻址方式1.1 指令格式及符号定义指令:即命令,人们给计算机的命令。
指令有两种表示方式:机器码——机器语言(机器能直接识别)助记符——汇编语言(供设计人员使用)机器码和助记符一一对应,汇编语言可汇编机器语言,机器语言可反汇编为汇编语言。
一台计算机所有指令的集合为指令系统,不同的 CPU的指令系统互不兼容,基于不同 单片机(含 CPU)的汇编语言应用程序不能直接移植。
MCS-51 单片机的指令格式一般由标号、操作码、操作数和注释四个部分组成。
如下: (标号:) 操作码 (操作数) ;(注释)标号:表示该指令所在的地址。
由英文字母加数字组成,一般每个程序段的第一条指令 和转移指令的目的指令前须有一个标号。
操作码:规定指令操作性质的编码。
每条指令必有一操作码,而标号、操作数和注释可 以根据情况选择有或无。
操作数:参与操作的数据或数据所在的地址。
注释:该指令的操作说明,便于阅读程序。
例如:一条完整汇编指令LOOP : MOV A , #20H ; 把数20H 送入累加器A 中翻译成机器码则为LOOP : 74 20; 操作码规定的操作性质是将紧跟该操作码(74H)的 数(20H)送入累加器A中(E0H单元)。
20H为操作数MCS-51 单片机汇编程序书写格式范例地址 机器码目标程序) 标号 汇编程序注释ORG 2000H ; 伪指令(汇编程序开始) 2000H 74H 20H START : MOV A , #20H ; 把数20H 送入累加器A 中 2002H 04H INC A ; 把A 的内容加一后送A2003H 24H 30H ADD A , #30H ; 把A 的内容加30H 后送A. . . .xxxxH 80H FEH LOOP : SJMP $ ; 循环END 伪指令(汇编程序结束) 在本书种,汇编指令中的符号约定如下:Rn(0~7):当前选中的8 个工作寄存器R0~R7;Ri(i=0,1):当前选中的用于间接寻址的两个工作寄存器R0、R1;Direct:8位直接地址,可以是内部RAM 单元地址(00H~7FH),或是特殊功能寄存 器(SFR)地址(80H~FFH)#data:指令中的8位立即数;#data16:指令中的16位常数;addrl6:16位地址;addr11:11位地址;bit: 位地址,内部RAM(20H~2FH)或是特殊功能寄存器(SFR)中的可寻址位;rel:指令中的8位带符号偏移量,用于相对转移指令中,取值范围在128~+127 之间;(X):表示由X所指定的某寄存器或单元的内容;[(Index)]:表示由地址寄存器Index内容所指定的单元的内容。
51单片机寻址方式
51单片机寻址方式在单片机的世界里,寻址方式就像是寻找宝藏的地图和指南。
对于51 单片机而言,掌握好寻址方式是深入理解其工作原理和进行有效编程的关键。
51 单片机的寻址方式主要包括立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址这七种。
首先来聊聊立即寻址。
在立即寻址中,操作数直接包含在指令中。
这就好比你已经知道了宝藏的确切位置,指令中给出的就是这个确切的“位置”。
比如“MOV A,50H”这条指令,其中“50H”就是立即数,单片机直接使用这个数进行操作,速度快,效率高。
直接寻址是另一种常见的方式。
它直接给出操作数所在的存储单元地址。
就像是告诉你宝藏在哪个房间,你直接去那个房间就能找到。
例如“MOV A,50H”,这里的“50H”表示的是内部数据存储器的地址,单片机通过这个地址去获取数据。
寄存器寻址则是通过指定寄存器来获取操作数。
寄存器就像是你的贴身口袋,数据就在里面,取用方便。
比如“MOV A,R0”,这里就是把寄存器 R0 中的内容送到累加器 A 中。
寄存器间接寻址稍微有点复杂。
它是通过寄存器中的内容作为地址,再去寻找操作数。
这有点像通过一个中间人告诉你宝藏的位置。
比如“MOV A,@R0”,先看 R0 中的值,把这个值当作地址,然后从这个地址中取出数据送到 A 中。
变址寻址则在访问程序存储器中的数据表格时非常有用。
它通过基址寄存器(DPTR 或 PC)与变址寄存器(A)的相加来得到操作数的地址。
可以想象成你从一个起点出发,根据特定的变化规则找到最终的目标。
相对寻址常用于跳转指令。
它是基于当前程序计数器(PC)的值加上一个相对偏移量来确定目标地址。
这就像你在一条路上,根据当前位置和一个相对距离来找到下一个要去的地方。
最后是位寻址。
在 51 单片机中,有一部分存储单元可以按位进行操作。
这就像是能够精确地找到宝藏箱子上的特定锁扣。
比如“SETB20H0”,就是把内部数据存储器 20H 单元的第 0 位设置为 1。
MCS-51单片机寻址方式
7 位寻址
位寻址是在指令中直接给出操作数的位地址。
① 直接位地址 【例】:MOV C,0D5H ;PSW的位5(位地址D5H)
② 点操作符. 【例】:MOV C,PSW.5
JMP @A+DPTR
;PC←(A)+(DPTR)
前两条指令是在程序存储器中取操作数; 第三条指令是要获得程序的跳转地址,实现程序的转移。
【例】:
MOV A, #22H MOV DPTR, #63A0H MOV A, @A+DPTR ;A←((A)+(DPTR))
6 相对寻址
相对寻址以程序计数器PC的当前值作为基地址,与指令中给出 的相对偏移量rel进行相加,把所得之和作为程序的转移地 址.。
【例】:MOV A,R0
;A←(R0)
可用于寄存器寻址的寄存器有: (1)四组工作寄存器R0~R7共32个。 (2)部分特殊功能寄存器A、B、DPTR等。
3 寄存器间接寻址
指令指定寄存器的名字,寄存器的内容为操作数的存储器地址。
标志为寄存器名字前加“@”符号。 不同的存储空间要用不同的寄存器,规定如下:
假设(3456H)=99H,指令运行后(A)=99H。
4 直接寻址
指令中直接给出操作数的存储器地址,操作数在存储器中。
【例】:MOV A,52H
;A←(52H)
5 变址寻址
基址寄存器加变址寄存器的间接寻址 三条变址指令
MOVC A, @A+PC ;A←((A)+(PC))
MOVC A, @A+DPTR ;A←((A)+(DPTR))
8051指令寻址方式介绍
程序存储器
DPTR 2000H A
10H
2000H
2010H
64H
64H(10H)
图4 变址寻址示意图
返回本节
2.6 相对寻址
以当前程序计数器PC的内容为基础,加上指 令给出的一字节补码数(偏移量)形成新的 PC值的寻址方式。 相对寻址用于修改PC值,主要用于实现程序 的分支转移。 例如,SJMP 08H ;PC←PC+2+08H 指令操作示意图如图5所示。
程序存储器 PC 2000H SJMP 08H 08H 200AH 2000H+2 (2000H) 200AH
图5 相对寻址示意图
返回本节
2.7 位寻址
位寻址只能对有位地址的单元作位寻址操 作。 位寻址其实是一种直接寻址方式,不过其地 址是位地址。 例如:SETB 10H ;将10H位置1若22H 单元中存放着数据40H,22H单元的D0位的位 地 址 为 10H , 执 行 上 述 指 令 后 ( 22H ) =41H。 又如:MOV 32H,C ;32H←进位位C
返回本节
2 寻址方式
2.1 立即寻址 2.2 直接寻址 2.3 寄存器寻址 2.4 寄存器间接寻址 2.5 变址寻址 2.6 相对寻址 2.7 位寻址
返回本章首页
2.1 立即寻址
指令中直接给出操作数的寻址方式。立即操 作数用前面加有#号的8位或16位数来表示。 例如:MOV A,# 60H ;A←#60H ;30H单元←#40H MOV DPTR,# 3400H ;DPTR←#3400H MOV 30H,# 40H 上述三条指令执行完后,累加器A中数据为立 即数据60H,DPTR寄存器中数据为3400H, 30H单元中数据为立即数40H。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机寻址方式51单片机的寻址方式寻址方式:指定操作数所在单元的方法。
在我们学习的8051单片机中,有7种寻址方法,下面我们将逐一进行分析。
一、立即寻址用“#”作前缀MOV A,#20H在这种寻址方式中,指令多是双字节的。
立即数就是存放在程序存储器中的常数,换句话说就是操作数(立即数)是包含在指令字节中的。
例如: MOV A,#3AH这条指令的指令代码为74H、3AH,是双字节指令,这条指令的功能是把立即数3AH送入累加器A中。
MOV DPTR,#8200H在前面学单片机的专用寄存器时,我们已学过,DPTR是一个16位的寄存器,它由DPH及DPL两个8位的寄存仅供学习与交流,如有侵权请联系网站删除谢谢2器组成。
这条指令的意思就是把立即数的高8位(即82H)送入DPH寄存器,把立即数的低8位(即00H)送入DPL寄存器。
二、直接寻址指令中直接给出操作数的地址。
MOV A,30H;这条指令中操作数就在30H单元中,也就是30H 是操作数的地址,并非操作数。
MOV 30H,DPH在80C51单片机中,直接地址只能用来表示内部数据存储器、位地址空间以及特殊功能寄存器,具体的说就是:1、内部数据存储器RAM低128单元。
在指令中是以直接单元地址形式给出。
我们知道低128单元的地址是00H-7FH。
在指令中直接以单元地址形式给出这句话的意思就是这0-127共128位的任何一位,例如0位是以00H这个单元地址形式给出、1位就是以01H单元地址给出、12 7位就是以7FH形式给出。
2、位寻址区。
20H-2FH地址单元。
仅供学习与交流,如有侵权请联系网站删除谢谢33、特殊功能寄存器。
专用寄存器除以单元地址形式给出外,还可以以寄存器符号形式给出。
例如下面我们分析的一条指令 MOV IE,#85H 前面的学习我们已知道,中断允许寄存器IE的地址是80H,那么也就是此指令也可以以 MOV 80H,#85H的形式表述。
大家来分析下面几条指令:MOV 65H,A ;将A的内容送入内部RAM的65H单元地址中MOV A,direct ;将直接地址单元的内容送入A中MOV direct,direct;将直接地址单元的内容送直接地址单元MOV IE,#85H ;将立即数85H送入中断允许寄存器IE 前面我们已学过,数据前面加了“#”的,表示后面的数是立即数(如#85H,就表示85H就是一个立即数),数据前面没有加“#”号的,就表示后面的是一个地址地址(如,MOV 65H,A这条指令的65 H就是一个单元地址)。
仅供学习与交流,如有侵权请联系网站删除谢谢4操作数存放在工作寄存器R0 ~ R7中,或寄存器B中。
MOV A,R2寄存器寻址的寻址范围是:1、4个工作寄存器组共有32个通用寄存器,但在指令中只能使用当前寄存器组(工作寄存器组的选择在前面专用寄存器的学习中,我们已知道,是由程序状态字PSW中的RS1和RS0来确定的),因此在使用前常需要通过对PSW中的RS1、RS0位的状态设置,来进行对当前工作寄存器组的选择。
2、部分专用寄存器。
例如,累加器A、通用寄存器B、地址寄存器D PTR和进位位CY。
寄存器寻址方式是指操作数在寄存器中,因此指定了寄存器名称就能得到操作数。
例如:MOV A,R0这条指令的意思是把寄存器R0的内容传送到累加器A中,操作数就在R0中。
INC R3这条指令的意思是把寄存器R3中的内容加1仅供学习与交流,如有侵权请联系网站删除谢谢5从前面的学习中我们应可以理解到,其实寄存器寻址方式就是对由P SW程序状态字确定的工作寄存器组的R0-R7进行读/写操作。
4、寄存器间接寻址指令中寄存器的内容作为操作数存放的地址,指令中间接寻址寄存器前用“@”表示前缀。
寄存间接寻址方式是指寄存器中存放的是操作数的地址,即操作数是通过寄存器间接得到的,因此称为寄存器间接寻址。
A:MCS-51单片机规定工作寄存器的R0、R1做为间接寻址寄存器。
用于寻址内部或外部数据存储器的256个单元。
为什么会是256个单元呢?我们知道,R0或者R1都是一个8位的寄存器,所以它的寻址空间就是2的八次方=256。
例:MOV R0,#30H ;将值30H加载到R0中MOV A,@R0 ;把内部RAM地址30H内的值放到累加器A中MOVX A,@R0 ;把外部RAM地址30H内的值放到累加器A中仅供学习与交流,如有侵权请联系网站删除谢谢6B:大家想想,如果用DPTR做为间址寄存器,那么它的寻址范围是多少呢?DPTR是一个16位的寄存器,所以它的寻址范围就是2的十六次方=65536=64K。
因用DPTR做为间址寄存器的寻址空间是64K,所以访问片外数据存储器时,我们通常就用DPTR做为间址寄存器。
例:MOV DPTR,#1234H ;将DPTR值设为1234H(16位) MOVX A,@DPTR ;将外部RAM或I/O地址12 34H内的值放到累加器A中C:在执行PUSH(压栈)和POP(出栈)指令时,采用堆栈指针SP作寄存器间接寻址。
例:PUSH 30H ;把内部RAM地址30H内的值放到堆栈区中堆栈区是由SP寄存器指定的,如果执行上面这条命令前,SP为60 H,命令执行后会把内部RAM地址30H内的值放到RAM的61H内。
那么做为寄存器间接寻址用的寄存器主要有哪些呢?我们前面提到的有四个,R0、R1、DPTR、SP寄存器间接寻址范围总结:仅供学习与交流,如有侵权请联系网站删除谢谢7A、内部RAM低128单元。
对内部RAM低128单元的间接寻址,应使用R0或R1作间址寄存器,其通用形式为@Ri(i=0或1)。
B、外部RAM 64KB。
对外部RAM64KB的间接寻址,应使用@DPTR作间址寻址寄存器,其形式为@DPTR。
例如MOVX A,@DPTR;其功能是把DPTR指定的外部RAM的单元的内容送入累加器A中。
外部RAM的低256单元是一个特殊的寻址区,除可以用DPTR作间址寄存器寻址外,还可以用R0或R1作间址寄存器寻址。
例如MOVX A,@R0;这条指令的意思是,把R0指定的外部RAM单元的内容送入累加器A。
C、堆栈操作指令(PUSH和POP)也应算作是寄存器间接寻址,即以堆栈指针SP作间址寄存器的间接寻址方式。
寄存器间接寻址方式不可以访问特殊功能寄存器!!寄存器间接寻址也须以寄存器符号的形式表示,为了区别寄存器寻址和寄存器间接寻址的区别,在寄存器间接寻址方式中,寄存器的名称前面加前缀标志“@”。
仅供学习与交流,如有侵权请联系网站删除谢谢85、基址寄存器加变址寄存器的变址寻址MOV A,@A + DPTR操作数地址 = 变地址 + 基地址基地址寄存器 DPTR 或 PC;变址寄存器 @A该寻址方式常用于访问程序存储器,查表。
这种寻址方式以程序计数器PC或DPTR为基址寄存器,累加器A为变址寄存器,变址寻址时,把两者的内容相加,所得到的结果作为操作数的地址。
这种方式常用于访问程序存储器ROM中的数据表格,即查表操作。
变址寻址只能读出程序内存入的值,而不能写入,也就是说变址寻址这种方式只能对程序存储器进行寻址,或者说它是专门针对程序存储器的寻址方式。
例:MOVC A,@A+DPTR仅供学习与交流,如有侵权请联系网站删除谢谢9这条指令的功能是把DPTR和A的内容相加,再把所得到的程序存储器地址单元的内容送A。
假若指令执行前A=54H,DPTR=3F21H,则这条指令变址寻址形成的操作数地址就是54H+3F21H=3F75H。
如果3F75 H单元中的内容是7FH,则执行这条指令后,累加器A中的内容就是7FH。
变址寻址的指令只有三条,分别如下:JMP @A+DPTRMOVC A,@A+DPTRMOVC A,@A+PC第一条指令JMP @A+DPTR这是一条无条件转移指令,这条指令的意思就是DPTR加上累加器A 的内容做为一个16位的地址,执行JMP这条指令是,程序就转移到A+DPTR指定的地址去执行。
第二、三条指令MOVC A,@A+DPTR和MOVC A,@A+PC指令这两条指令的通常用于查表操作,功能完全一样,但使用起来却有一定的差别,现详细说明如下:仅供学习与交流,如有侵权请联系网站删除谢谢10我们知道,PC是程序指针,是十六位的。
DPTR是一个16位的数据指针寄存器,按理,它们的寻址范围都应是64K。
我们在学习特殊功能寄存器时已知道,程序计数器PC是始终跟踪着程序的执行的。
也就是说,PC的值是随程序的执行情况自动改变的,我们不可以随便的给PC赋值。
而DPTR是一个数据指针,我们就可以给空的数据指针DPTR进行赋值。
我们再看指令MOVC A,@A+PC这条指令的意思是将PC的值与累加器A的值相加作为一个地址,而PC是固定的,累加器A是一个8位的寄存器,它的寻址范围是256个地址单元。
讲到这里,大家应可明白,MOVC A,@A+PC这条指令的寻址范围其实就是只能在当前指令下256个地址单元。
所在,这在我们实际应用中,可能就会有一个问题,如果我们需要查询的数据表在2 56个地址单元之内,则可以用MOVC A,@A+PC这条指令进行查表操作,如果超过了256个单元,则不能用这条指令进行查表操作。
刚才我们已说到,DPTR是一个数据指针,这个数据指针我们可以给它赋值操作的。
通过赋值操作。
我们可以使MOVC A,@A+DP TR这条指令的寻址范围达到64K。
这就是这两条指令在实际应用当中要注意的问题。
变址寻址方式是MCS-51单片机所独有的一种寻址方式。
6、位寻址80C51单片机有位处理功能,可以对数据位进行操作,因此就有相应的位寻址方式。
所谓位寻址,就是对内部RAM或可位寻址的特殊功能寄存器SFR内的某个位,直接加以置位为1或复位为0。
位寻址的范围,也就是哪些部份可以进行位寻址:A、我们在学习51单片机的存储器结构时,我们已知道在单片机的内部数据存储器RAM的低128单元中有一个区域叫位寻址区。
它的单元地址是20H-2FH。
共有16个单元,一个单元是8位,所以位寻址区共有128位。
这128位都单独有一个位地址,其位地址的名字就是00H-7FH。
这里就有一个比较麻烦的问题需要大家理解清楚了。
我们在前面的学习中00H、01H。
7FH等等,所表示的都是一个字节(或者叫单元地址),而在这里,这些数据都变成了位地址。
我们在指令中,或者在程序中如何来区分它是一个单元地址还是一个位地址呢?这个问题,也就是我们现在正在研究的位寻址的一个重要问题。
其实,区分这些数据是位地址还是单元地址,我们都有相应的指令形式的。
这个问题我们在后面的指令系统学习中再加以论述。
B、对专用寄存器位寻址。
这里要说明一下,不是所有的专用寄存器都可以位寻址的。