【发布时间】:2009-11-16 23:26:40
【问题描述】:
我是汇编语言的新手,想学习。我有 Vista-64(将升级到 Windows 7 64),我很快将重新安装 32 位 Linux,但我最终会在两个系统上编程,可能使用 NASM。我想知道 32 位汇编程序是否可以在我的系统上编译和运行。如果不是,主要的区别和限制是什么?我在哪里可以学习在 64 位系统上编程?
【问题讨论】:
我是汇编语言的新手,想学习。我有 Vista-64(将升级到 Windows 7 64),我很快将重新安装 32 位 Linux,但我最终会在两个系统上编程,可能使用 NASM。我想知道 32 位汇编程序是否可以在我的系统上编译和运行。如果不是,主要的区别和限制是什么?我在哪里可以学习在 64 位系统上编程?
【问题讨论】:
NASM 不支持 64 位(或者等等,它是最近添加的支持吗?)。我推荐 YASM,它与 NASM 非常相似,但它更活跃,我相信支持更多平台。
64 位汇编编程与 32 位相当不同(假设您在谈论 x86)。所有内存访问现在都是相对于 RIP 而不是绝对的(没有特定的覆盖)。我建议先学习 32 位编程,因为那里有更多的文档。我不建议同时学习两者!
另外,我认为使用 Linux 会更容易,因为它更容易与标准 C 库交互(除非你想成为一个男人并进行系统调用)。
此外,对于 64 位系统,Windows 和 linux 在 64 位机器上的调用约定是不同的。这是与现有库交互时必须注意的事项。
编辑: 哦,是的,64 位 vista 可以很好地运行 32 位程序(iirc,您可以从 64 位操作系统检测到您处于 32 位模式)。我强烈建议只在 Linux 和 Vista 上使用 32 位开发,因为它们具有相同的调用约定 (iirc),因此您用于与 C 库交互的任何代码大部分都可以独立于平台
【讨论】:
64 位 vista 可以正常运行 32 位可执行文件
【讨论】:
它们应该可以工作,但请记住,通常汇编代码是特定于平台的,因此为 Linux 编写的汇编代码可能无法在 Windows 上汇编。
【讨论】:
pkg_add yasm。大多数教授初学者汇编的书籍都教授英特尔语法而不是 AT&T。
.intel_syntax 指令。但是对于内联汇编,它更难使用,因为你不能以同样的方式插入变量