【发布时间】:2013-11-03 17:19:04
【问题描述】:
我正在自学/阅读有关装配的知识。大多数关于汇编的书籍都提到 x86 - 代码中的所有寄存器名称都以“e”而不是“r”开头(就像在 x86-64 中一样)。但是,我使用的是 64 位 Linux,我想知道这些书是否有任何价值,因为它们不是指 x86-64。
简而言之,我使用这些资源来学习 x86-64 真的值得吗?或者改写成不同的措辞,除了寄存器命名约定的不同——两者之间是否还有其他差异可能使学习 x86 材料变得困难?
【问题讨论】:
-
调用约定会有所不同,其他的差别真的不大。
-
除了调用约定之外,要记住的一件事是,使用 32 位寄存器作为目标寄存器始终会将相应 64 位寄存器的前 32 位归零。还有一些其他的问题。并非所有 32 位指令(即使是相对常见的指令)都是有效的 64 位指令,请参阅我的(已关闭)问题 stackoverflow.com/questions/11897116/…。
标签: linux assembly x86 x86-64 abi