Intel 80X86中的寄存器

        Intel 80x86 CPU的寄存器可以分成四类:通用寄存器、特殊目的寄存器、段寄存器以及特殊目的核心模式寄存器。本书不会介绍最后两类寄存器。段寄存器在现代的32位操 作系统(例如:Windows,BeOS和Linux)当中用得不多;由于本书是专门针对32位操作系统所编写的程序,所以不需要讨论段寄存器。特殊目的 核心模式寄存器专门用来编写操作系统、调试器以及其他系统级工具。这些软件的构建远远超出了本书的范围,所以也无需讨论特殊目的核心模式寄存器。

        80x86(Intel系列)CPU提供了几个通用寄存器。其中包含八个32位寄存器,如下所示:

        EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP

        每个名称的前缀‘E’代表扩展(extended)的意思。该前缀将32位寄存器与如下所示的八个16位寄存器区分开来:

        AX、BX、CX、DX、SI、DI、BP、SP

        最后,80x86 CPU还提供了八个8位的寄存器,它们的名称如下所示:

        AL、AH、BL、BH、CL、CH、DL、DH

        遗憾的是,这些并非都是分离的寄存器。即80 x 86并未提供24个独立的寄存器。实际上,80x86将16位寄存器重叠于32位寄存器之上,也将8位寄存器重叠于16位寄存器之上。图给出了这种关系。

80X86通用寄存器

        EFLAGS是一个32位寄存器,它包含几个1位的布尔值(true/false)。EFLAGS寄存器中的大多数要么是为核心模式(操作系统)函数保留的,要么就是程序员不感兴趣的。其中有8位(或标志)是程序员编写汇编语言程序需要用到的。它们分别是溢出标志、方向标志、中断禁止标志(应该在第9位,参见http://en.wikipedia.org/wiki/FLAGS_register_(computing) )、符号标志、零标志、辅助进位标志、奇偶标志以及进位标志。图显示了EFLAGS寄存器低16位中标志的布局情况。

EFLAGS的低16位

        在应用程序员感兴趣的8个标志中,有4个标志特别重要:溢出标志、进位标志、符号标志以及零标志。这4个标志统称为条件码 。根据这些标志的状态就可以测试前一次计算的结果。例如,在对两个值进行比较以后,条件码标志就会告诉您其中一个值是小于,等于还是大于另一个值。

        令汇编语言初学者惊讶的一个重要事实是,在80x86 CPU中进行的所有计算几乎都和寄存器有关。例如,将两个变量相加,把它们的和存入第3个变量中,必须先将其中一个变量装入一个寄存器中,并将第2个操作 数和寄存器的值相加,然后将寄存器中的值存入目的变量。寄存器在每次计算中都充当媒介。因此,在80x86汇编语言程序中寄存器是非常重要的。

        还有一点很重要,虽然某些寄存器被称为是“通用”的,但并不能就此推断每个寄存器都能随意 使用。以寄存器对SP/ESP为例,它们就有特殊的目的,而不能用于任何其他的目的(它们是栈指针)。同样,寄存器BP/EBP也具有特殊目的,它们的使 用受到限制而无法当作通用寄存器使用。所有80x86寄存器都有它们自己特殊的目的,因此它们都限定在一个范围内使用。目前,您应该避免将ESP和EBP 寄存器用于一般的计算当中;还应该记住,余下的寄存器在程序中不可以完全互换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值