x64架构与x86有何不同?

Sco*_*t J 7 c++ 64-bit x86 x86-64

我需要弄乱这些架构上的堆栈,这真的是一个n00b.我可以做任何阅读主题/谷歌搜索的指针.我正在寻找这些架构如何从根本上彼此不同.关于这个主题的维基百科文章http://en.wikipedia.org/wiki/X64

Ram*_*ter 9

在x86中有8个32位寄存器,在x64中,寄存器各为64位,还有8个寄存器.128位SSE寄存器在两者中均为128位,但在x86上有8位,而在x64中有16位.另外一些指令是在x64中剪切的.

在x64模式下,您仍然可以使用32位名称(以"e"开头)而不是64位名称(以"r"开头)将寄存器用作32位,并且程序集大致相同.

http://en.wikipedia.org/wiki/X86#x86_registers

或者,如果你想要一些非常繁重的阅读(如1000页...)

http://www.intel.com/products/processor/manuals/index.htm 我阅读了这些手册的几百页,并学到了很多非常好的东西.


Nat*_*man 8

这里的所有答案都提到了寄存器集的变化,我将在此列出完整性:

  • 所有现有的32位通用寄存器都扩展到64位(EAX扩展到RAX等等)
  • 8个新的64位通用寄存器(R8通过R15)
  • 8个新的128位SSE寄存器(XMM8通过XMM15)

寻址模式也有变化:

  • CS,DS,ES和SS是持平的.也就是说,他们的基础是0x0,他们的限制是0xffffffffffffffff.FS和GS可以具有超过32位的基数.
  • GDT,LDT和IDT中的描述符已经改变.它们在64位模式下有8个字节
  • 非连续的地址空间.在32位模式下的线性地址空间是从0x00xfffffff.在64位模式下的线性地址空间被从分离0x00x00007ffffffff和从0xffff8000000000000xffffffffffffffff.基本上,只有48位地址,地址符号扩展为64位.
  • 一种新的分页模式.

删除了各种说明:

  • INC带编码和的一个字节指令.该字节成为前缀.40+rw40+rd4xREX
  • :用于装载是现在扁平段寄存器指令LDS,LDS,LSS.

还有更多的差异,我只能记住我的头脑.如果我能想到更多,我会添加它们.


K S*_*ngh 0

x86 CPU 中的所有寄存器都是 32 位的,而 64 位的则是 64 位的:)

如果您使用指针算术,则 sizeof() 将产生不同的结果,增量操作也会产生不同的结果。

我觉得您可以在英特尔网站上获得有关这两种架构的详细信息,甚至还可以获取突出显示 64 位处理器添加的新指令的指令集。