博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Intel 64/x86_64/IA-32/x86处理器通用寄存器 (2) - 64位通用寄存器
阅读量:2043 次
发布时间:2019-04-28

本文共 1380 字,大约阅读时间需要 4 分钟。

General-Purpose Registers in 64-mode

在64位模式下,有16个64位宽通用寄存器(32位模式是8个通用寄存器),默认的操作数宽度是32位(注:与32位模式相同)。但是,通用寄存器保存32位或64位的操作数。如果指定了32位操作数,则可以使用EAX/EBX/ECX/EDX/EBP/ESP/ESI/EDI和新增的R8D~R15D(注:这里D表示Doubledord,32比特宽)。如果是64位的操作数,则可以使用RAX/RBX/RCX/RDX/RBP/RSP/RSI/RDI和新增的R8~R15。所有的这些寄存器都可以按字节/单字/双字/四字/八字为单位访问。REX指令前缀用来生成64位的操作数,或者用于访问寄存器R8~R15。

当从64位模式切换到兼容模式,再返回到64位模式后,仅存在于64位模式下的寄存器(R8~R15和XMM8~XMM15)中的值会保持不变。但是如果从64位模式切换到兼容模式,再切换到传统模式(注:即32位保护模式或SMM模式)或实模式,最后通过兼容模式返回到64位模式后,R8~R15和XMM8~XMM15寄存器中的值是未定义的(undefined)。

表:可寻址的通用寄存器

寄存器类型

无REX前缀

有REX前缀

字节寄存器

AH/AL, BH/BL, CH/CL, DH/DL

AL/BL/CL/DL, BPL/SPL/SIL/DIL, R8L~R15L

单字寄存器

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

AX/BX/CX/DX/BP/SP/SI/DI, R8W~R15W

双字寄存器

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

EAX/EBX/ECX/EDX/EBP/ESP/ESI/EDI, R8D~R15D

四字寄存器

N.A.

RAX/RBX/RCX/RDX/RBP/RSP/RSI/RDI, R8~R15

 

(参看上表)在64位模式下,对字节寄存器的访问有所限制。指令不能同时引用传统的高字节寄存器(例如AH/BH/CH/DH)与新字节寄存器(例如RAX寄存器的低字节)。但是指令可以同时引用传统的低字节寄存器(例如AL/BL/CL/DL)与新字节寄存器(例如R8寄存器的低字节,或RBP)。对于使用REX前缀的指令,处理器架构通过转换高字节引用(AH/BH/CH/DH)到低字节引用(BPL/SPL/DIL/SIL:RBP/RSP/RDI/RSI的最低字节)来强制实施这种限制。TODO: 找几个例子。

当在64位模式下时,操作数的宽度决定目标(通用)寄存器的有效比特位数:

  • 64位操作数生成64位的结果,保存在64位宽的目标寄存器中
  • 32位操作数生成32位的结果,通过零扩展,保存在64位宽的目标寄存器中
  • 8位和16位操作数生成8位或16位的结果。目标寄存器中的对应的最高的56比特位或48比特位保持指令执行前的值,不会被修改。如果8位/16位的运算结果是用于64位地址计算,需要显式地将结果值符号扩展到完整的64位宽。

因为64位通用寄存器的高32比特位在32位模式下无定义,所以当从64位模式切换到32位模式(即保护模式或兼容模式)后,任何通用寄存器的高32比特位不会被保存。当从64位模式切换到32位模式时,软件不要依赖处理器保存这些比特位。

 

转载地址:http://xdpof.baihongyu.com/

你可能感兴趣的文章
子网(转载自百度百科)
查看>>
为你的静态资源使用cdn(转载)
查看>>
合并压缩css和Js的方式( 转载)
查看>>
压缩html,可以在输出之前使用(转载)
查看>>
用户中心和discuz的ucenter共通
查看>>
使用opcache为你的网站加速(转载)
查看>>
git push命令每次都要输入用户名和密码的问题处理
查看>>
在网站添加qq客服功能
查看>>
英文技术文档阅读练习——php的早期版本
查看>>
"Notice: unserialize(): Error at offset xx of xxx bytes"错误的处理(转载)
查看>>
windows下c/c++环境开发搭建
查看>>
php中的declare是干什么的——转载
查看>>
三种常见的排序算法
查看>>
ueditor自定义菜单(转载)
查看>>
php页面meta头设置
查看>>
指针函数和函数指针的区别
查看>>
empty方法
查看>>
What does ‘composer dump-autoload’ do in Laravel?
查看>>
在win7系统中使用nodejs在WebStrom下配置socket.io
查看>>
caffe:用自己的图像数据训练模型
查看>>