典型的处理器的主要任务包括
从内存中获取机器语言指令,译码,执行
根据指令代码管理它自己的寄存器
根据指令或自己的的需要修改内存的内容
响应其他硬件的中断请求
|
一般说来,处理器拥有对整个系统的所有总线的控制权。对于Intel平台而言,处理器拥有对数据、内存和控制总线的控制权,根据指令控制整个计算机的运行。在以后的章节中,我们还将讨论系统中同时存在多个处理器的情况。
处理器中有一些寄存器,这些寄存器可以保存特定长度的数据。某些寄存器中保存的数据对于系统的运行有特殊的意义。
新的处理器往往拥有更多、具有更大字长的寄存器,提供更灵活的取指、寻址方式。
寄存器
如前所述,处理器中有一些可以保存数据的地方被称作寄存器。
寄存器可以被装入数据,你也可以在不同的寄存器之间移动这些数据,或者做类似的事情。基本上,像四则运算、位运算等这些计算操作,都主要是针对寄存器进行的。
首先让我来介绍一下80386上最常用的4个通用寄存器。先瞧瞧下面的图形,试着理解一下:
上图中,数字表示的是位。我们可以看出,EAX是一个32-bit寄存器。同时,它的低16-bit又可以通过AX这个名字来访问;AX又被分为高、低8bit两部分,分别由AH和AL来表示。
对于EAX、AX、AH、AL的改变同时也会影响与被修改的那些寄存器的值。从而事实上只存在一个32-bit的寄存器EAX,而它可以通过4种不同的途径访问。
也许通过名字能够更容易地理解这些寄存器之间的关系。EAX中的E的意思是“扩展的”,整个EAX的意思是扩展的AX。X的意思Intel没有明示,我个人认为表示它是一个可变的量 。而AH、AL中的H和L分别代表高和低 。
为什么要这么做呢?主要由于历史原因。早期的计算机是8位的,8086是第一个16位处理器,其通用寄存器的名字是AX,BX等等;80386是Intel推出的第一款IA-32系列处理器,所有的寄存器都被扩充为32位。为了能够兼容以前的16位应用程序,80386不能将这些寄存器依旧命名为AX、BX,并且简单地将他们扩充为32位——这将增加处理器在处理指令方面的成本。
Intel微处理器的寄存器列表(在本章先只介绍80386的寄存器,MMX寄存器以及其他新一代处理器的新寄存器将在以后的章节介绍)
通用寄存器
下面介绍通用寄存器及其习惯用法。顾名思义,通用寄存器是那些你可以根据自己的意愿使用的寄存器,修改他们的值通常不会对计算机的运行造成很大的影响。通用寄存器最多的用途是计算。
EAX 32-bit宽
|
通用寄存器。相对其他寄存器,在进行运算方面比较常用。在保护模式中,也可以作为内存偏移指针(此时,DS作为段 寄存器或选择器)
|
EBX 32-bit宽
|
通用寄存器。通常作为内存偏移指针使用(相对于EAX、ECX、EDX),DS是默认的段寄存器或选择器。在保护模式中,同样可以起这个作用。
|
ECX 32-bit宽
|
通用寄存器。通常用于特定指令的计数。在保护模式中,也可以作为内存偏移指针(此时,DS作为 寄存器或段选择器)。
|
EDX 32-bit宽
|
通用寄存器。在某些运算中作为EAX的溢出寄存器(例如乘、除)。在保护模式中,也可以作为内存偏移指针(此时,DS作为段 寄存器或选择器)。
|
上述寄存器同EAX一样包括对应的16-bit和8-bit分组。
用作内存指针的特殊寄存器
ESI 32-bit宽
|
通常在内存操作指令中作为“源地址指针”使用。当然,ESI可以被装入任意的数值,但通常没有人把它当作通用寄存器来用。DS是默认段寄存器或选择器。
|
EDI 32-bit宽
|
通常在内存操作指令中作为“目的地址指针”使用。当然,EDI也可以被装入任意的数值,但通常没有人把它当作通用寄存器来用。DS是默认段寄存器或选择器。
|
EBP 32-bit宽
|
这也是一个作为指针的寄存器。通常,它被高级语言编译器用以建造‘堆栈帧'来保存函数或过程的局部变量,不过,还是那句话,你可以在其中保存你希望的任何数据。SS是它的默认段寄存器或选择器。
|
注意,这三个寄存器没有对应的8-bit分组。换言之,你可以通过SI、DI、BP作为别名访问他们的低16位,却没有办法直接访问他们的低8位。
段寄存器和选择器
实模式下的段寄存器到保护模式下摇身一变就成了选择器。不同的是,实模式下的“段寄存器”是16-bit的,而保护模式下的选择器是32-bit的。
CS
|
代码段,或代码选择器。同IP寄存器(稍后介绍)一同指向当前正在执行的那个地址。处理器执行时从这个寄存器指向的段(实模式)或内存(保护模式)中获取指令。除了跳转或其他分支指令之外,你无法修改这个寄存器的内容。
|
DS
|
数据段,或数据选择器。这个寄存器的低16 bit连同ESI一同指向的指令将要处理的内存。同时,所有的内存操作指令 默认情况下都用它指定操作段(实模式)或内存(作为选择器,在保护模式。这个寄存器可以被装入任意数值,然而在这么做的时候需要小心一些。方法是,首先把数据送给AX,然后再把它从AX传送给DS(当然,也可以通过堆栈来做).
|
ES
|
附加段,或附加选择器。这个寄存器的低16 bit连同EDI一同指向的指令将要处理的内存。同样的,这个寄存器可以被装入任意数值,方法和DS类似。
|
FS
|
F段或F选择器(推测F可能是Free?)。可以用这个寄存器作为默认段寄存器或选择器的一个替代品。它可以被装入任何数值,方法和DS类似。
|
GS
|
G段或G选择器(G的意义和F一样,没有在Intel的文档中解释)。它和FS几乎完全一样。
|
SS
|
堆栈段或堆栈选择器。这个寄存器的低16 bit连同ESP一同指向下一次堆栈操作(push和pop)所要使用的堆栈地址。这个寄存器也可以被装入任意数值,你可以通过入栈和出栈操作来给他赋值,不过由于堆栈对于很多操作有很重要的意义,因此,不正确的修改有可能造成对堆栈的破坏。
|
* 注意 一定不要在初学汇编的阶段把这些寄存器弄混。他们非常重要,而一旦你掌握了他们,你就可以对他们做任意的操作了。段寄存器,或选择器,在没有指定的情况下都是使用默认的那个。这句话在现在看来可能有点稀里糊涂,不过你很快就会在后面知道如何去做。
特殊寄存器(指向到特定段或内存的偏移量):
EIP
|
这个寄存器非常的重要。这是一个32位宽的寄存器 ,同CS一同指向即将执行的那条指令的地址。不能够直接修改这个寄存器的值,修改它的唯一方法是跳转或分支指令。(CS是默认的段或选择器)
|
ESP
|
这个32位寄存器指向堆栈中即将被操作的那个地址。尽管可以修改它的值,然而并不提倡这样做,因为如果你不是非常明白自己在做什么,那么你可能造成堆栈的破坏。对于绝大多数情况而言,这对程序是致命的。(SS是默认的段或选择器)
|
IP: Instruction Pointer, 指令指针
SP: Stack Pointer, 堆栈指针
好了,上面是最基本的寄存器。下面是一些其他的寄存器,你甚至可能没有听说过它们。(都是32位宽):
CR0, CR2, CR3(控制寄存器)。举一个例子,CR0的作用是切换实模式和保护模式。
还有其他一些寄存器,D0, D1, D2, D3, D6和D7(调试寄存器)。他们可以作为调试器的硬件支持来设置条件断点。
TR3, TR4, TR5, TR6 和 TR? 寄存器(测试寄存器)用于某些条件测试。
最后我们要说的是一个在程序设计中起着非常关键的作用的寄存器:标志寄存器。
本节中部份表格来自David Jurgens的HelpPC 2.10快速参考手册。在此谨表谢意。
2.2 使用寄存器
在前一节中的x86基本寄存器的介绍,对于一个汇编语言编程人员来说是不可或缺的。现在你知道,寄存器是处理器内部的一些保存数据的存储单元。仅仅了解这些是不足以写出一个可用的汇编语言程序的,但你已经可以大致读懂一般汇编语言程序了(不必惊讶,因为汇编语言的祝记符和英文单词非常接近),因为你已经了解了关于基本寄存器的绝大多数知识。
在正式引入第一个汇编语言程序之前,我粗略地介绍一下汇编语言中不同进制整数的表示方法。如果你不了解十进制以外的其他进制,请把鼠标移动到 这里 。
汇编语言中的整数常量表示
十进制整数 这是汇编器默认的数制。直接用我们熟悉的表示方式表示即可。例如,1234表示十进制的1234。不过,如果你指定了使用其他数制,或者有凡事都进行完整定义的小爱好,也可以写成[十进制数]d或[十进制数]D的形式。
十六进制数 这是汇编程序中最常用的数制,我个人比较偏爱使用十六进制表示数据,至于为什么,以后我会作说明。十六进制数表示为0[十六进制数]h或0[十六进制数]H,其中,如果十六进制数的第一位是数字,则开头的0可以省略。例如,7fffh, 0ffffh,等等。
二进制数 这也是一种常用的数制。二进制数表示为[二进制数]b或[二进制数]B。一般程序中用二进制数表示掩码(mask code)等数据非常的直观,但需要些很长的数据(4位二进制数相当于一位十六进制数)。例如,1010110b。
八进制数 八进制数现在已经不是很常用了(确实还在用,一个典型的例子是Unix的文件属性)。八进制数的形式是[八进制数]q、[八进制数]Q、[八进制数]o、[八进制数]O。例如,777Q。
|
需要说明的是,这些方法是针对宏汇编器(例如,MASM、TASM、NASM)说的,调试器默认使用十六进制表示整数,并且不需要特别的声明(例如,在调试器中直接用FFFF表示十进制的65535,用10表示十进制的16)。
现在我们来写一小段汇编程序,修改EAX、EBX、ECX、EDX的数值。
我们假定程序执行之前,寄存器中的数值是全0:
|
?
|
X
|
H
|
L
|
EAX
|
0000
|
00
|
00
|
EBX
|
0000
|
00
|
00
|
ECX
|
0000
|
00
|
00
|
EDX
|
0000
|
00
|
00
|
正如前面提到的,EAX的高16bit是没有办法直接访问的,而AX对应它的低16bit,AH、AL分别对应AX的高、低8bit。
mov eax, 012345678h mov ebx, 0abcdeffeh mov ecx, 1 mov edx, 2
|
; 将012345678h送入eax ; 将0abcdeffeh送入ebx ; 将000000001h送入ecx ; 将000000002h送入edx
|
则执行上述程序段之后,寄存器的内容变为:
|
?
|
X
|
H
|
text-ind
分享到:
Global site tag (gtag.js) - Google Analytics
|
相关推荐
【组装电脑之处理器CPU参数的认识】 在组装电脑时,了解处理器CPU的参数至关重要,因为这些参数决定了处理器的性能和电脑的整体运行效率。以下是对几个关键CPU参数的详细解释: 1. **主频**: 主频是衡量CPU运算...
本文通过对CPU的类型、结构和特点的详细介绍,帮助读者更好地理解和认识CPU,特别是Intel的Pentium 4系列处理器和AMD的Athlon处理器。 知识点: 1. CPU的类型:文中介绍了Pentium 4系列处理器的类型,包括Pentium ...
在本书中使用了一些现实世界的超标量处理器作为例子,以便于读者加深对超标量处理器的理解和认识。 《超标量处理器设计》可用作高等院校电子及计算机专业研究生和高年级本科生教材,也可供自学者阅读。
教你最基础的电脑知识 认识CPU之五 Cyrix系列处理器.pdf
本次大作业的内容是利用Logisim平台和Mars仿真器构建32位单周期CPU处理器。从分析搭建总体架构,到分布设计各个模块,再到将各个模块进行连接,从而形成完整的数据通路,一步步自己搭建CPU的过程加深了我对每个指令...
认识 CPU 的接口 CPU(Central Processing Unit,中央处理单元)是计算机系统的核心组件,负责执行指令、数学和逻辑运算、数据存储和传输,以及输入和输出控制。CPU 的接口是指 CPU 与主板之间的连接方式。 一、...
Intel认识到CPU在灵活性上优于GPU,但在浮点运算能力和并行处理上存在不足,而这正是图形处理的关键。为解决这一问题,Intel提出了一种称为“顺序执行多内核处理器”的概念。 顺序执行是一种不同于当前桌面CPU普遍...
本文档《AMD CPU OVERCLOCK MANUAL》(AMD处理器完全超频手册)对AMD处理器的超频技术进行了全面的介绍,旨在为超频爱好者提供详尽的参考和指导。 首先,我们从AMD处理器超频的基础知识开始。在超频的世界里,有多...
在当今智能手机市场中,处理器性能一直是消费者和制造商关注的焦点。高通,作为智能手机...通过这篇文章,我们更加明确地认识到,衡量智能手机处理器好坏的标准远不止于CPU的核心数量,而应该是综合性能的全面评估。
尽管补丁的存在能够解决特定问题,提升游戏性能,但我们必须认识到,并不是所有的游戏都需要这样的补丁。有些游戏已经在设计时充分考虑了多核处理器的优化,因此使用这些补丁可能并不会带来额外的性能提升。此外,...
此外,A4处理器搭载的CPU与GPU集成在单一芯片之中,这不仅减少了占用空间,也降低了生产成本,同时提供了出色的图形处理能力。 在技术规格之外,文章通过与其他处理器的对比,进一步揭示了A4处理器的性能优势。以...
《CPU真伪辨别手册——处理器造假手段》 ...同时,对于CPU的来源和保修政策要有明确的认识,以免落入假冒产品的陷阱。只有这样,才能确保购买到真正品质可靠的处理器,保障计算机系统的稳定运行。
总的来说,CPU的发展历程是一部科技进步的缩影,从最初的简单计算器芯片到现在的高性能多核处理器,其背后的技术革新和市场竞争共同推动了个人电脑性能的飞速提升。了解CPU的工作原理和性能指标,对于选购和使用电脑...
从早期的CPU超频时代,用户通过提高处理器的工作频率来获得额外性能,到现在的“超核”时代,处理器性能的提升不再仅仅依赖于单一的频率提升。本文将探讨“超核”这一概念的由来、工作原理以及其对处理器性能的影响...
本文将通过三个简单易行的方法来帮助你深入认识CPU。 首先,识别型号是理解CPU基本信息的关键。不同型号的CPU在外观和性能上都有所差异。例如,Intel Pentium III系列处理器就有Katmai、Coppermine和Tualatin等不同...
线程是操作系统调度的基本单位,超线程技术让单个物理核心模拟出两个逻辑核心,提高处理器利用率。 2. **频率** 频率通常以GHz(吉赫兹)为单位,表示CPU每秒能执行的指令周期数。主频越高,理论上CPU执行速度越快...
很多人以为认为 CPU 的主频指的是 CPU 运行的速度,实际上这个认识是很片面的。CPU 的主频表示在 CPU 内数字脉冲信号震荡的速度,而 CPU 实际的运算能力是没有直接关系的。当然,主频和实际的运算速度是有关的,但是...
### 实验一:认识CPU #### 一、目前市场上主流的CPU品牌及其型号 目前市场上主流的CPU品牌主要有三大类: 1. **英特尔(Intel)**: - **Core i3**系列:适合日常办公和轻度游戏。 - **Core i5**系列:适合大多数...
通过实际操作,学生能够直观地理解处理器调度对系统性能的影响,如周转时间、响应时间和CPU利用率等。这有助于他们掌握操作系统的核心概念,为后续深入学习操作系统原理和技术打下坚实基础。 总结来说,这个实验...