存储器寻址方式
51 单片机片内 256 字节数据存储器的结构划分以及对应的寻址方式

51 单片机片内256 字节数据存储器的结构划分以及对应的寻址方式1. 引言1.1 概述在现代电子技术的快速发展下,单片机已经成为各种电子设备中必不可少的核心控制部件之一。
而51单片机作为最常用的单片机之一,其内部结构和功能一直备受关注。
本文将主要探讨51单片机中的一个重要组成部分——256字节数据存储器,介绍其结构划分以及对应的寻址方式。
1.2 文章结构本文总共包含五个部分。
首先是引言部分,介绍文章的概述、结构和目的。
第二部分将详细阐述51单片机中256字节数据存储器的结构划分,强调其在整个单片机系统中的重要性。
第三部分将着重介绍对应于256字节数据存储器的寻址方式,包括直接寻址方式、间接寻址方式和寄存器间接寻址方式等。
第四部分将通过具体实例来探讨256字节数据存储器在不同应用场景下的使用方法和优化方案。
最后一部分是结论和展望,在对前文进行总结基础上,提出未来研究方向和发展建议。
1.3 目的本文旨在深入探讨51单片机中256字节数据存储器的结构划分和对应的寻址方式,通过具体实例的分析,揭示其在不同应用场景下的优势和应用方法。
希望通过本文的研究和讨论,读者能够更好地理解和应用256字节数据存储器,为单片机系统设计提供有益的参考和指导。
2. 51单片机片内256字节数据存储器的结构划分2.1 片内数据存储器的重要性在嵌入式系统设计中,片内数据存储器是非常重要的组成部分。
它用于存储程序指令、变量数据以及其他运行时需要使用的临时数据。
片内数据存储器的规模和结构会直接影响到系统性能和资源利用率。
2.2 51单片机中的256字节数据存储器概述51单片机是一款广泛应用于各种电子设备中的经典单片机。
其中包含了一个256字节大小的片内数据存储器,用于存储程序指令和变量数据。
这256字节数据存储器可以被划分为不同的区域,每个区域有不同的功能和使用方式。
下面将介绍这些区域以及其对应功能。
2.3 256字节数据存储器的物理结构划分在51单片机中,256字节数据存储器可以被划分为以下几个区域:1) SFR(特殊功能寄存器)区域:这个区域占据了部分地址空间,用于保存各种特殊功能寄存器的值。
存储器寻址方式

存储器寻址方式存储器寻址方式的操作数存放在主存储器中,用其所在主存的位置表示操作数。
在这种寻址方式下,指令中给出的是有关操作数的主存地址信息。
8088的存储器空间是分段管理的。
程序设计时采用逻辑地址;由于段地址在默认的或用段超越前缀指定的段寄存器,所以采用偏移地址,称之为有效地址(Effective Address, EA)1.直接寻址在这种寻址方式下,指令中直接包含了操作数的有效地址,跟在指令操作码之后。
其默认的段地址在DS段寄存器中,可以采用段超越前缀。
例将数据段中偏移地址2000H处的内存数据送至AX寄存器。
MOV AX, [2000H]该指令中给定了有效地址2000H, 默认与数据段寄存器DS一起构成操作数所在存储单元的物理地址。
如果DS=1429H,则操作数所在的物理地址为1429H*16+2000H=16920H. 该指令的执行结果是将16920H单元的内容传送至AX寄存器,其中,高字节内容送AH寄存器,低字节内容送AL寄存器。
MOV AX, [2000H];指令代码:A1 00 20例: 将附加段中偏移地址2000H 处的内存数据送至AX 寄存器。
MOV AX, ES:[2000H]; 指令代码:26 A1 00 20变量指示内存的一个数据,直接引用变量就是采用直接寻址方式。
变量应该在数据段进行定义,常用的变量定义伪指令DB 和DW 分别表示字节变量和字变量,例如WV AR DW 1234H; 定义字变量WV AR ,它的初值是1234H 这样,标示符WV AR 表示具有初值1234H 的字变量,并由汇编程序为它内存分配了两个连续的字节单元。
假设它在数据段偏移地址是0010H 。
例:将数据段的变量WV AR (即该变量名指示的内存单元数据)送至AX 寄存器。
MOV AX, WV AR;指令功能: 上述指令实质就是如下指令: AX WV ARAX DS :[0010H]MOV AX, [0010H]; 指令代码:代码:26 A1 00 20AX=1234H堆栈操作指令堆栈是一个“先进后出”的主存区域,使用SS段寄存器记录段地址;堆栈只有一个出口,即当前站顶,用堆栈指针寄存器SP指定堆栈站顶的偏移地址。
七种寻址方式

七种寻址⽅式在存储器中,操作数和指令字写⼊或读出的⽅式,有地址指定的⽅式,相联存储⽅式和堆栈存取⽅式,⼏乎所有的计算机,在内存中都采⽤地址指定⽅式,当采⽤地址指定⽅式的时候,形成操作数或指令地址的⽅式称为寻址⽅式,寻址⽅式分为两类,即为指令寻址⽅式和数据寻址⽅式,在传统⽅式设计的计算机中,内存中指令的寻址与数据的寻址是交替进⾏的⽴即数寻址⽅式:将操作数放在操作码的后⾯。
⼀起放在指令代码段中,在程序运⾏的过程中,程序直接调⽤该操作数,⽽不⽤到其他的地址的单元中去取得相应的操作数。
上述中的操作数也被称为⽴即数。
可以有不同的进制寄存器寻址⽅式:指令所要的操作数已经存储在某个寄存器中,或把⽬标操作数存⼊寄存器中,把在指令中指出所⽤的寄存器(寄存器助忆符)的寻址⽅式称为寄存器寻址⽅式寄存器寻址⽅式是⼀种简单快捷的寻址⽅式,源和⽬的操作数都可以是寄存器直接寻址⽅式:在指令格式的地址字段中直接指出操作数在内存中的地址id。
⼀般情况下数据放在数据段中,所以物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使⽤段超越前缀,那么操作数可存放在其他段直接寻址⽅式常⽤于处理内存单元的数据,操作数是内存变量的值,指令中直接给出操作数地址(DIR)的寻址⽅式称为直接寻址⽅式,寻址的对象为:1内存数据存储器,指令中直接地址表⽰2、特殊功能的寄存器SFR,在指令中⽤寄存器名称表⽰寄存器间接寻址⽅式:是指将指定的寄存器内容为地址,由该地址所指定的单元内容作为操作数,MCS-51规定R0或R1为间接寻址寄存器,他可寻址内部RAM低地位的12个字节单元内容,还可以采⽤数据指针(DPTR)作为直接寻址寄存器,寻址外部数据存储器的64k字节空间,但不能⽤本寻址⽅式寻址特殊功能寄存器寄存器的间接寻址需要以寄存器符号的形式来表⽰,并且在寄存器名称前⾯加上间接寻址符号“@”。
例如指令MOV A,@RO就使⽤了寄存器间接寻址⽅式,这条指令的意义就是将地址指针RO指向内部数据存储单元中的数据送⼊累加器A中。
七种寻址方式

程序计数器 地址寄存器 外部地址总线AB 外部地址总线AB
0002H PC= 0000H 0001H
0000H
内 部 数 据 总 线
(PC) (PC) (PC)
执行过程
运算器 ①② 累加器A 累加器A 存 储 器
0002H 0001H 0 0 0 0 1 0 0 1 0000H 0 1 1 1 0 1 0 0
…Leabharlann MOVC A,@A+DPTR执行示意图 ,@A+DPTR执行示意图
…
6.位寻址方式 MCS-51有位处理功能 可以对数据位进行操作,例如: 有位处理功能, MCS-51有位处理功能,可以对数据位进行操作,例如: MOV C,40H C, 是把位40H的值送到进位位C 40H的值送到进位位 是把位40H的值送到进位位C。 寻址范围包括: 寻址范围包括: 内部RAM中的位寻址区。位有两种表示方法,例如, RAM中的位寻址区 (1)内部RAM中的位寻址区。位有两种表示方法,例如, 40H;另一种是单元地址加上位,例如,(28H).0, 40H;另一种是单元地址加上位,例如,(28H).0,指 的是28H单元中的最低位。它们是等价的。 28H单元中的最低位 的是28H单元中的最低位。它们是等价的。 (2)特殊功能寄存器中的可寻址位 可寻址位在指令中有如下4种的表示方法: 可寻址位在指令中有如下4种的表示方法: 直接使用位地址。例如PSW.5的位地址为0D5H PSW.5的位地址为0D5H。 a. 直接使用位地址。例如PSW.5的位地址为0D5H。
程序存储区 1020 EA 12 R2
片内RAM区 4A
ACC
4A
MOV A,R2执行示意图
2.直接寻址方式 操作数直接以单元地址的形式给出: 操作数直接以单元地址的形式给出: A, MOV A,40H 寻址范围: 寻址范围: 内部RAM 128个单元 RAM的 (1) 内部RAM的128个单元 特殊功能寄存器。除了以单元地址的形式外, (2) 特殊功能寄存器。除了以单元地址的形式外, 可用寄存器符号的形式给出 例如: 的形式给出。 还可用寄存器符号的形式给出。例如: A, A,P0是等价的 是等价的。 MOV A,80H 与 MOV A,P0是等价的。 直接寻址方式是访问特殊功能寄存器的唯一寻址方式
七种寻址方式.ppt

寻址范围: (1)访问内部RAM低128个单元,其通用形式为@Ri (2)对片外数据存储器的64K字节的间接寻址,例如:
MOVX A,@DPTR
(3)片外数据存储器的低256字节
例如:MOVX A,@Ri
(4)堆栈区
堆栈操作指令PUSH(压栈)和POP(出栈)使用堆 栈指针(SP)作间址寄存器
寄存器DPTR等。
1020
程序存储区 EA
片内RAM区
12
R2
4A
ACC
4A
MOV A,R2执行示意图
2.直接寻址方式 操作数直接以单元地址的形式给出: MOV A,40H 寻址范围: (1) 内部RAM的128个单元 (2) 特殊功能寄存器。除了以单元地址的形式外, 还可用寄存器符号的形式给出。例如: MOV A,80H 与 MOV A,P0是等价的。
地址 译码
寄存器区 内部控制信号
数据缓冲器 外部数据总线DB
指令 时钟及清零 寄存器
译码
外部控制总线CB
返回
D7 D6 D5 D4 D3 D2 D1 D0 27H 0 0 1 0 0 0 0 0
3F 3E 3D 3C 3B 3A 39 38
图4.9 SETB 3DH 指令执行示意图
7.相对寻址方式
在相对寻址的转移指令中,给出了地址偏 移量,以“rel”表示,即把PC的当前值加上偏 移量就构成了程序转移的目的地址:
目的地址=转移指令所在的地址 + 转移指令的字 节数 + rel
偏移量rel是一带符号的8位二进制数补码数 。
范围是:–128 ~ +127
向地址增加方向最大可转移(127+转移指令字节) 个单元地址,向地址减少方向最大可转移 (128-转移指令字节)个单元地址。
计算机组成原理寻址方式例题

计算机组成原理寻址方式例题
以下是一个计算机组成原理中的寻址方式的例题:
假设一个计算机系统的每个字长为16位,存储器共有64K个字,采用的寻址方式是直接寻址,并且以字节为单位寻址。
请回答以下问题:
1. 存储器最大容量是多少字节?
答:存储器最大容量 = 字长 ×存储器容量 = 16位 × 64K字 = 1M字节。
2. 地址总线应该有多少位才能寻址最大容量的存储器?
答:地址总线的位数 = log2(存储器最大容量) = log2(1M字节) = log2(2^20字节) = 20位。
3. 如果存储器容量增加到256K字节,地址总线的位数需要调整吗?
答:是的,地址总线的位数需要调整。
原来的地址总线位数是20位,这只能寻址2^20 = 1M字节的存储器。
如果存储器容量增加到256K字节,需要的地址总线位数为 log2(256K字节) = log2(2^18字节) = 18位。
4. 通过直接寻址能够寻址的最大存储器容量是多少字节?
答:通过直接寻址能够寻址的最大存储器容量 = 2^(地址总线位数) = 2^20 = 1M字节。
七种寻址方式

七种寻址方式1、立即寻址方式:操作数就包含在指令中。
作为指令的一部分,跟在操作码后存放在代码段。
这种操作数成为立即数。
立即数可以是8位的,也可以是16位的。
例如:指令: MOV AX,1234H则: AX = 1234H2、寄存器寻址方式:操作数在CPU内部的寄存器中,指令指定寄存器号。
对于16位操作数,寄存器可以是:AX、BX、CX、DX、SI、DI、SP 和BP等。
对于8位操作数,寄存器可以是AL 、AH、BL、BH、CL、CH、DL、DH。
这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数因而可以取得较高的运算数度。
3、直接寻址方式:操作数在寄存器中,指令直接包含有操作数的有效地址(偏移地址)注:操作数一般存放在数据段所以操作数的地址由DS加上指令中直接给出的16位偏移得到。
如果采用段超越前缀,则操作数也可含在数据段外的其他段中。
例如:MOV AX,[8054]如(DS) = 2000H,则执行结果为(AX) = 3050H(物理地址=20000+8054=28054H)28054H里的内容为3050H在汇编语言指令中,可以用符号地址代替数值地址如:MOV AX,VALUE此时VALUE为存放操作数单元的符号地址。
如写成:MOV AX,[VALUE]也是可以的,两者是等效的。
如VALUE在附加段中,则应指定段超越前缀如下:MOV AX,ES:VALUE 或MOV AX,ES:[VALUE]4、寄存器间接寻址方式:操作数在寄存器中,操作数有效地址在SI、DI、BX、BP这四个寄存器之一中。
在一般情况下,如果有效地址在SI、DI和BX中,则以DS段寄存器中的内容为段值。
如果有效地址在BP中,则以SS段寄存器中的内容为段值例如:MOV AX,[SI]如果(DS) = 5000H (SI) = 1234H则物理地址= 50000 + 1234 = 51234H51234H地址中的内容为:6789H执行该指令后,(AX) = 6789H5、寄存器相对寻址方式:操作数在存储器中,操作数的有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容加上指令中给定的8位或16位位移量之和BX 8位位移量EA(有效地址) = BP +SI 16位位移量DI在一般情况下,如果SI、DI、或BX中的内容作为有效地址的一部分,那么引用的段寄存器是DS;如果BP中的内容作为有效地址的一部分,那么引用的段寄存器是SS。
DSP寻址方式

DSP寻址方式DSP(数字信号处理器)是一种专门用于数字信号处理的微处理器,其寻址方式是指DSP芯片对于内部存储器的寻址方式。
DSP寻址方式是DSP系统中非常重要的一部分,它决定了DSP芯片如何有效地访问和处理存储在内部存储器中的数据。
1. 直接寻址方式直接寻址方式是DSP中最简单的寻址方式之一。
在直接寻址方式下,指令中给出的地址直接用于指定待访问的存储单元。
这种寻址方式适用于数据存储单元数量较少且地址连续的情况。
例如,当使用直接寻址方式时,指令可以直接指定访问DSP内部存储器中的某个特定地址,无需进行地址转换或计算。
2. 间接寻址方式间接寻址方式是另一种常用的DSP寻址方式。
在间接寻址方式下,指令中给出的地址并不直接用于指定待访问的存储单元,而是用于指定一个包含存储单元地址的寄存器。
通过间接寻址方式,可以实现更加灵活的地址访问,尤其适用于需要频繁对不同存储单元进行访问的情况。
3. 基址寻址方式基址寻址方式是一种常用的寻址方式,它结合了直接寻址方式和间接寻址方式的优点。
在基址寻址方式下,指令中给出的地址作为“基址”,并结合一个偏移量用于计算访问目标存储单元的实际地址。
通过基址寻址方式,可以实现对存储单元的相对寻址,而无需显式地指定存储单元的具体地址。
4. 变址寻址方式变址寻址方式是一种基于寄存器的寻址方式,它通过使用一个特殊的寄存器,称为“变址寄存器”来实现寻址。
变址寻址方式可以对存储单元的地址进行动态调整,从而实现对存储单元的高效访问。
通过改变变址寄存器中的值,可以改变访问目标存储单元的地址,从而灵活地处理不同的数据访问需求。
5. 直接/间接寻址方式直接/间接寻址方式是一种结合了直接寻址方式和间接寻地址方式的寻址方式。
在直接/间接寻址方式下,指令中既给出了一个直接的地址用于直接寻址,又给出了一个指示寄存器的地址用于间接寻址。
通过使用直接/间接寻址方式,可以在同时满足直接访问和间接访问需求的情况下,提高DSP系统的灵活性和效率。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
存储器寻址方式
存储器寻址方式的操作数存放在主存储器中,用其所在主存的位置表示操作数。
在这种寻址方式下,指令中给出的是有关操作数的主存地址信息。
8088的存储器空间是分段管理的。
程序设计时采用逻辑地址;由于段地址在默认的或用段超越前缀指定的段寄存器,所以采用偏移地址,称之为有效地址(Effective Address, EA)
1.直接寻址
在这种寻址方式下,指令中直接包含了操作数的有效地址,跟在指令操作码之后。
其默认的段地址在DS段寄存器中,可以采用段超越前缀。
例将数据段中偏移地址2000H处的内存数据送至AX寄存器。
MOV AX, [2000H]
该指令中给定了有效地址2000H, 默认与数据段寄存器DS一起构成操作数所在存储单元的物理地址。
如果DS=1429H,则操作数所在的物理地址为1429H*16+2000H=16920H. 该指令的执行结果是将16920H单元的内容传送至AX寄存器,其中,高字节内容送AH寄存器,低字节内容送AL寄存器。
MOV AX, [2000H];指令代码:A1 00 20
例: 将附加段中偏移地址2000H 处的内存数据送至AX 寄存器。
MOV AX, ES:[2000H]; 指令代码:26 A1 00 20
变量指示内存的一个数据,直接引用变量就是采用直接寻址方式。
变量应该在数据段进行定义,常用的变量定义伪指令DB 和DW 分别表示字节变量和字变量,例如
WV AR DW 1234H; 定义字变量WV AR ,它的初值是1234H 这样,标示符WV AR 表示具有初值1234H 的字变量,并由汇编程序为它内存分配了两个连续的字节单元。
假设它在数据段偏移地址是0010H 。
例:将数据段的变量WV AR (即该变量名指示的内存单元数据)送至AX 寄存器。
MOV AX, WV AR;
指令功能: 上述指令实质就是如下指令: AX WV AR
AX DS :[0010H]
MOV AX, [0010H]; 指令代码:代码:26 A1 00 20
AX=1234H
堆栈操作指令
堆栈是一个“先进后出”的主存区域,使用SS段寄存器记录段地址;堆栈只有一个出口,即当前站顶,用堆栈指针寄存器SP指定堆栈站顶的偏移地址。
堆栈操作的对象只能是字操作。
进站时,SP向低地址移动两个字节单元以指向新的栈顶,然后数据的低字节于存放低地址,高字节存放于高地址。
出栈时,字从栈顶弹出,低地址字节送低字节,高地址字节送高地址,SP相应向高地址移动两个字节单元。
MOV ax, 7812H
PUSH ax; 将AX内容推入堆栈(如图1)
POP AX;将当前堆栈内容弹给AX(如图2)
PUSH [2000H]
POP WV AR
堆栈段是程序不可或缺的一个内存区。
堆栈可用来临时存放数据,以便随时恢复它们。
堆栈常用于寄存器的保护以及子程序间的参数传递。