linux - 相同 cpu 的不同汇编语法?

标签 linux assembly syntax compiler-construction nasm

我决定通过在线教程学习汇编程序。

我遇到过这个使用 NASM 编译器的教程,大多数其他教程似乎也是如此: http://www.tutorialspoint.com/assembly_programming/index.htm

我也看过这个 youtube 系列“黑客汇编入门” https://www.youtube.com/watch?v=K0g-twyhmQ4&list=PLue5IPmkmZ-P1pDbF3vSQtuNquX0SZHpB 这个使用了那个人描述为“通用 linux 编译器”(owtte) 的东西。 编译命令是这样的:

as -o file.o file.s

其中 file.s 是汇编源代码。紧随其后:

ld -o file file.o

那么 file 就是可执行文件。

每个教程都使用不同的语法(例如,后一个教程中的寄存器总是以 % 开头。注意。语法上的表面差异似乎也比这少)。这些语法是由各个编译器决定的吗?

当我尝试使用后一种方法编译 NASM 教程中的代码时,我最初也感到困惑。我一直认为指令集必须依赖于 CPU,因此我使用哪个编译器应该无关紧要。我刚刚得出结论,这只是语法上的差异,但这是正确的吗?

顺便说一句,我在 Linux 计算机上运行内核 4.1.6。

我的主要问题实际上是我使用哪种语法?这只是一个选择问题吗?一种比另一种使用更广泛吗?感谢您的帮助。

最佳答案

Each of the tutorials uses a different syntax (e.g. a register in the latter tutorial is always preceded by %. NB. There do appear to be less superficial differences in the syntax than this as well). Are these syntaxes decided by the individual compiler?

是的,不同的汇编器(= 汇编语言编译器)可能使用不同的汇编语言语法,尽管它们为相同的处理器和平台提供代码。

My main question is really which syntax do I use? Is it just a matter of choice? Is one more widely used than the other?

像 NASM 这样的汇编程序可能适用于范围广泛的处理器和平台,在这种情况下,当您需要使用多个处理器或平台时,学习它的语法会有所帮助。

在其他情况下,坚持使用一些知名供应商的汇编器可能会更好,因为它被广泛使用,您可以在网上找到更多示例代码,这可能有助于您的开发。

最后同样重要的是,您可能只是喜欢某个特定的汇编器,因为您喜欢它的特性或语法。

关于linux - 相同 cpu 的不同汇编语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32772605/

相关文章:

linux - 在组装中测量时间

c - 如何正确地将汇编程序转换为shellcode?

c - 混合 c 和组装。在终端上没有打印任何内容

javascript - 哪种 JavaScript 语法更合适?

syntax - Go 代码中的 "err.(*exec.ExitError)"是什么?

linux - 从 ubuntu 服务器获取文件

linux - 根据单元格值将 CSV 行拆分为多行

c++ - __RTC_CheckEsp 是如何实现的?

c++ - 奇怪的 C++ 语法 : type definition before a function call

python - 将批处理代码转换为 python 脚本