第2章,寄存器与存储器
第 第 2 2 章
寄存器 与 存储器
【本章内容提要】本章将着重讲解 Intel 系列 CPU 内部寄存器的组织结构、命名、功能及其常见的用途,还要介绍存储器的分段管理模式、存储单元地址的表示法以及其物理地址的形成方式。
【本章学习目标】
熟练掌握 CPU 内部寄存器的组织结构 熟练掌握标志寄存器各定义位的功能 掌握存储器的分段管理方案 2.1 寄存器 组织
寄存器是 CPU 内部重要的数据存储资源,是汇编程序员能直接使用的硬件资源之一。由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能。
寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。在高级语言(如:C/C++语言)中,也有定义变量为寄存器类型的,这就是提高寄存器利用率的一种可行的方法。
Intel 系列微处理器从早期的 16 位 8086 开始,到 Pentium 系列,以至于现在的 CORE(酷睿)系列,虽然 CPU 内部结构和功能变化很大,但其寄存器的组织情况却是有规律的。在此只介绍它们内部寄存器的名称及其主要功能。
2.1.1 通用 寄存器
1)8 位和 16 位寄存器 从 8086 开始就可以使用 16 位寄存器,其中的四个通用数据寄存器还可以分别分成两个 8 位的独立寄存器使用。比如 16 位的寄存器 AX,可以被分成两个 8 位的寄存器 AH 和AL 独立使用,增加了寄存器的使用灵活性和效率。表 2.1 列出了 Intel 系列 CPU 寄存器的组织情况,在后续的高档 CPU 中,保持了对其以前老 CPU 寄存器组织的兼容性。8086 和80286 都是 16 位处理器,它们的内部通用寄存器、标志寄存器、指令指针以及段寄存器都是 16 位的。
表 2 . 1 通用寄存器列表 寄存器类型 IA-32 寄存器 IA-32E 寄存器 字节寄存器(8位)
AH,BH,CH,DH,AL,BL,CL,DL AL,BL,CL,DL,DIL,SIL,BPL,SPL,R8L-R15L 字寄存器(16 位)
AX,BX,CX,DX,DI,SI,BP,SP AX,BX,CX,DX,DI,SI,BP,SP,R8W-R15W 双字寄存器(32位)
EAX,EBX,ECX,EDX,EDI,ESI,EBP,ESP EAX,EBX,ECX,EDX ,EDI,ESI,EBP,ESP,R8D-R15D 四字寄存器(64 无 RAX,RBX,RCX,RDX,RDI,RSI,RBP,RSP,R8-R15 批注 [AF1]: Mips 的寄存器是如何组织的
汇编语言程序设计 8 位)
2)32 位寄存器 32 位 Intel 系列 CPU(80386 开始)包含了先前 CPU 的所有寄存器,并把通用寄存器、指令指针和标志寄存器从 16 位扩充成 32 位(以原 16 位寄存器名字前面加个‘E’重新命名),段寄存器仍然保持 16 位,但增加了 2 个 16 位的段寄存器:FS 和 GS。32 位的寄存器的低 16 位内容包含了原来的 16 位寄存器值,而高 16 位是不能被直接访问的。图 2.1 的第 2 列指明了 32 位寄存器的组织情况。在 32 位环境中可以访问 8 位、16 位以及 32 位寄存器。
31 ………….
16
15…… 8 7…3.2 1.0 EAX
AH AX
AL 累加器
数据寄存器
地址寄存器
段寄存器
通
用
寄
存
器 EBX
BH
BX
BL 基址寄存器 ECX
CH
CX
CL 计数寄存器 EDX
DH
DX
DL 数据寄存器 ESP
SP 堆栈指针 EBP
BP 基址指针 ESI
SI 源变址寄存器 EDI
DI 目标变址寄存器 EIP
IP 指令指针 EFLAGS
FLAGS 标志寄存器
CS 代码段寄存器 SS
堆栈段寄存器 DS
数据段寄存器 ES 扩展数据段寄存器 FS 扩展数据段寄存器
GS 扩展数据段寄存器 图 2 . 1 IA-32 微处理器寄存器结构 3)64 位寄存器 在 Intel 的 Pentium4 及 CORE(酷睿)CPU 中,即保留了原来的 32 位处理能力,又扩充了 64 位的支持能力,把 32 位寄存器又扩展到 64 位,类似于从 16 位到 32 位的扩展,但寄存器的命名是以字母‘R’开头的了。例如原来的 32 位 EAX 寄存器扩展成 64 位后就命名为 RAX,低 32 位包含了 EAX,同样 RAX 的高 32 位也是不能单独访问的。
目前的 Pentium4 及 CORE 如果运行在 64 位操作系统中,则既可以执行 32 位程序也可以执行 64 位程序。这种情况可以称为 IA-32E 模式,此时还增加了在 64 位环境下新的寄存器组,如表 2-1 的第 3 列所示,其中的 SIL 到 R15L 共 12 个 8 位寄存器、R8W 到 R15W 共8 个 16 位寄存器、R8D 到 R15D 共 8 个 32 位寄存器以及所有 64 位寄存器都只能在 64 位环境下使用,在 32 位及以前的环境中是不能访问的。
第 2 章 寄存器与存储器
9
2.1.2 2
标志 寄存器
Intel 的 16 位 CPU 中设置了 16 位的标志寄存器 FLAGS,其中定义了 9 个标志位,主要用来反映 CPU 的状态和运算结果的特征。后来在 32 位和 64 位环境下,FLAGS 又分别被扩展到了 32 位和 64 位(即 EFLAGS 和 RFLAGS),同时又增加一些新的标志位定义,但最初的 9 个标志位定义没有改变。FLAGS 的定义如图 2.2 所示。
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OF DF IF TF SF ZF
AF
PF
CF 图 2 . 2 FLAGS 定义示意图 1、进位标志 CF(Carry Flag) 进位标志 CF 主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为 1,否则其值为 0。
使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变 CF 值的指令等。
2、奇偶标志 PF(Parity Flag) 奇偶标志 PF 用于反映运算结果中最低 8 位中“1”的个数的奇偶性。如果“1”的个数为偶数,则 PF 的值为 1,否则其值为 0。
利用 PF 可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。
3、辅助进位标志 AF(Auxiliary Carry Flag) 在字操作时,发生低字节向高字节进位或借位,或者在字节操作时,发生低 4 位向高4 位进位或借位,则 AF 的值被置为 1,否则其值为 0。
4、零标志 ZF(Zero Flag) 零标志 ZF 用来反映运算结果是否为 0。如果运算结果为 0,则其值为 1,否则其值为0。在判断运算结果是否为 0 时,可使用此标志位。
5、符号标志 SF(Sign Flag) 符号标志 SF 用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补码表示法,所以,SF 也就反映运算结果的正负号。运算结果为正数时,SF 的值为 0,否则其值为 1。
6、追踪标志 TF(Trap Flag) 当追踪标志 TF 被置为 1 时,CPU 进入单步执行方式,即每执行一条指令,产生一个单步中断请求。这种方式主要用于程序的调试。
7、中断允许标志 IF(Interrupt-enable Flag) 中断允许标志 IF 是用来决定 CPU 是否响应 CPU 外部的可屏蔽中断发出的中断请求。但不管该标志为何值,CPU 都必须响应 CPU 外部的不可屏蔽中断所发出的中断请求,以及CPU 内部产生的中断请求。具体规定如下:
(1)当 IF=1 时,CPU 可以响应 CPU 外部的可屏蔽中断发出的中断请求; (2)当 IF=0 时,CPU 不响应 CPU 外部的可屏蔽中断发出的中断请求。
8、方向标志 DF(Direction Flag) 批注 [AF2]: 应该增补一些对标志位的例子
汇编语言程序设计 10 方向标志 DF 用来决定在串操作指令执行时有关指针寄存器发生调整的方向。具体规定在第 4.5 节中给出。在微机的指令系统中,还提供了专门的指令来改变标志位 DF 的值。
9、溢出标志 OF(Overflow Flag) 溢出标志 OF 用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF 的值被置为 1,否则,OF 的值被清为 0。
2.2 存储器的 管理 模式
Intel 的 80X86 系列 CPU 基本上采用内存分段的管理模式。它把内存和程序分成若干个段,每个段的起点用一个段寄存器来保存。本节主要介绍存储器的分段含义、存储单元的逻辑地址和其物理地址之间的转换关系。
2.2.1 实地址方式 内存管理
目前的 Intel 系列 CPU 都能工作在实地址方式或保护地址方式下。实地址方式下只能访问 1MB 的内存空间,只能单任务运行,8086 只有这一种工作方式,80286 以后的系列 CPU的可以运行在保护地址方式。
如果工作在实地址模式,则任何高档处理器只相当于快速的 8086,因此寻址方法与8086 一样,在这种方式下处理器没有充分发挥处理器的性能。只有在保护方式下,处理器才真正发挥应有的作用。
1.段地址与偏移地址 在实地址方式下,段地址定义了段起始地址的高 16 位,并存放在段寄存器中。逻辑段的起始地址(通常简称为:段地址)必须是 16 的倍数,即最低 4 位二进制必须全为 0。
1M 内存最多可分成 64K 个段,即 65536 个段(段之间相互重叠),至少可分成 16 个相互不重叠的段。
偏移地址描述目的地址在该段中的相对位置,即离段基址的偏移量,它指示在 64KB段内任何一个单元。偏移地址保存在 16 位寄存器中,因此段的大小最大为 64KB。
2. 默认段地址与偏移地址寄存器 决定物理地址的关键是段地址和偏移地址,实际上这两个地址形成物理地址是有条件的。不同段地址与不同偏移地址要配合使用,系统默认的段地址和偏移地址存放寄存器如表 2.2 所示。
表 2.2 默认段寄存器和偏移地址配合方式 访问存储器类型 默认段地址寄存器 可指定段地址寄存器 段内偏移地址来源 取指令 CS 无 IP 堆栈操作 SS 无 SP 字符串操作源地址 DS CS,SS,ES SI 字符串操作目的地址 ES 无 DI BP 用作基址寄存器时 SS CS,DS,ES 据寻址方式得偏移地址 一般数据存取 DS CS,ES,SS 据寻址方式得偏移地址 3. 逻辑地址与物理地址 批注 [AF3]: 我真心觉得应该提供来示意。可能的话从程序的重载角度来写。建议要和 mips 的内存管理来比对着写。
第 2 章 寄存器与存储器
9
逻辑地址是段地址与偏移地址的合称,用“段地址:偏移地址”表示,如 1234H:1200H表示段地址为 1234H,段内偏移地址为 1200H。
物理地址是存储器的实际地址,在实地址方式下物理地址通过段地址乘以 16 加上偏移地址得到。而 16 位的段地址乘以 16 等同于左移 4 位二进制位,这样变成 20 位的段基地址,最后段基地址加上段内偏移地址就是物理地址。
【例 2.1】有一逻辑地址为 1200H:0340H,求物理地址。
解:由逻辑地址知段地址=1200H,偏移地址=0340H,因此物理地址=12000H+0340H=12340H。
【例 2.2】已经 DS=1000H,CS=2200H,指令 MOV [2000H],AX 在代码段中的偏移量是 IP=0150H,求(1)该指令所在的物理地址。(2)目的操作数对应的物理地址。
解:(1)指令对应的物理地址=CS*16+IP=22000H+0150H=22150H。
(2)该指令指示的目的操作数对应段地址默认存在 DS 中,偏移地址已由指令给出 2000H,因此该指令指示的目的操作数所在物理地址=DS*16+2000H =10000H+2000H =12000H。
4. 存储单元的内容 存储单元是按照地址进行访问的,相邻两个单元的地址编号是连续的,一般以无符号数表示,Intel 系列 CPU 都以字节为单位分配地址编号的。存储单元中所存放的信息通常称为该存储单元的内容或值,如果数据占用多个字节则它们的地址是连续的。规定如下:
1)一个字节的内容占用一个存储单元并分配一个地址编号; 2)一个字的内容是该字地址所指向的单元及其后继 1 个单元的内容拼接而成; 3)一个 32 位的内容是该字地址所指向的单元及其后继 3 个单元的内容拼接而成; 4)一个 64 位的内容是该字地址所指向的单元及其后继 7 个单元的内容拼接而成。
在拼接多个内存单元时,按“高对高低对低”的原则来处理,即:高存储单元(地址大的存储单元)的值是高数据位,低存储单元(地址小的存储单元)的值是低数据位。
图 2 . 3 是一段内存单元存放数据的例子,跟据图中所示,在内存中 1000H 地址开始的字节单元内容为 12H;若按字内容访问则为 3412H,其中的 34 是高数据位,因为它占用了高地址;若按双字(32 位)访问,则内容为 78563412H;按四字(64 位)访问则内容为 4433221178563412H。
2.2.2 保护方式 内存管理模式
Intel 系列 CPU 从 80286 开始就可以运行在保护方式下,内存还是分段管理,存储器的逻辑地址同样由段地址和偏移量两部分组成。后来的 32 位处理器的内存管理仍然采用分段管理模式,但在此基础上又增加了可选的分页管理方法。在保护方式下,程序逻辑地址到内存物理地址的换算是通过描述符和段表及页表等数据结构实现的,过程比实地址方式下复杂很多,在此不作具体叙述,可以参阅相关的《微机原理》教材。
习题 2 2
内容 地址 12H 1000H 34H 1001H 56H 1002H 78H 1003H 11H 1004H 22H 1005H 33H 1006H 44H 1007H 图 2.3 内存组织图
汇编语言程序设计 12 2.1 在 16 位 CPU 中,有哪些 8 位寄存器、16 位寄存器?哪些 16 位寄存器可分为二个 8 位寄存器来使用? 2.2 和 16 位 CPU 相比,在 32 位 CPU 中,扩展了哪些寄存器?哪些寄存器的位数没变?所增加的寄存器是什么? 2.3 简述各通用寄存器的主要功能? 2.4 简述各段寄存器所指段的含义。
2.5 IP/EIP 寄存器的用途是什么?它是《计算机组成原理》中的什么概念在 CPU 中的具体体现? 2.6 在标志寄存器中,用于反映运算结果属性的标志位有哪些?它们每一位所表示的含义是什么?在Debug 环境下,用什么符号来表示之? 2.7 在标志寄存器中,用于反映 CPU 状态控制的标志位有哪些?它们每一位所表示的含义是什么?在Debug 环境下,用什么符号来表示之? 2.8 填空 1)16 位/32 位 CPU 在取指令时,分别需要用到的寄存器有
和
、
和
; 2)访问堆栈段栈顶单元要由
段寄存器和
寄存器组合来寻址,
访问堆栈段中的单元要由
段寄存器和
寄存器组合来寻址; 3)用基指...
版权声明:
1.十号范文网的资料来自互联网以及用户的投稿,用于非商业性学习目的免费阅览。
2.《第2章,寄存器与存储器》一文的著作权归原作者所有,仅供学习参考,转载或引用时请保留版权信息。
3.如果本网所转载内容不慎侵犯了您的权益,请联系我们,我们将会及时删除。
本栏目阅读排行
栏目最新
- 1在农民收入调查工作动员培训会上讲话
- 22024年领导干部政治素质自评材料(完整)
- 3公司党委党建工作总结报告【完整版】
- 42024年主题教育党建调研开展情况总结
- 52024年度区妇联关于党建工作述职报告(完整)
- 6关于加强企业人才队伍建设调研与思考(完整文档)
- 72024县党员干部抓基层党建工作述职报告
- 8第二批主题教育研讨发言:时刻“以民为本”,听“实言实语”,办实事好事
- 92024关于党员干部法治信仰情况调研报告(2024年)
- 10局网络安全工作责任制落实自查报告(全文)
- 11XX国企分管领导关于党建设引领企业高质量发展研讨发言(范文推荐)
- 122024年第二批主题教育专题读书班研讨发言提纲(6)【完整版】