相同cpu的不同汇编语法?

时间:2015-09-24 23:37:32

标签: 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,因此我使用哪个编译器并不重要。我刚刚得出结论,它仅仅是语法上的差异,但这是正确的吗?

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

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

2 个答案:

答案 0 :(得分:1)

  

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

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

  

我的主要问题是我使用哪种语法?这只是一个问题   选择?一个比另一个更广泛使用?

一个汇编程序,如NASM,可能会使用各种处理器和平台,在这种情况下,当您需要使用多个处理器或平台时,您将从学习其语法中受益。

在其他情况下,最好坚持使用一些着名供应商的汇编程序,因为它被广泛使用,您可以在网上找到更多可以帮助您进行开发的示例代码。

最后,您可能只是喜欢特定的汇编程序,因为您喜欢它的功能或语法。

答案 1 :(得分:0)

如果你在Windows系统上,Microsoft的MASM(ML.EXE或ML64.exe for 64 bit)语法几乎与英特尔的语法相同。 MASM(ML.EXE和ML64.EXE)包含在免费的Visual Studio Express版本中,尽管您通常必须创建自定义构建步骤以在VS项目中调用汇编程序。 VS express包含一个很好的源代码级调试器。

如果您使用的是Linux类型的系统,那么您可能会使用AT& T语法,我假设这样做是因为它是某个通用汇编程序的转换。我不知道为Linux推荐哪些汇编程序。