我决定通过在线教程学习汇编程序。
我遇到过这个使用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计算机。
我的主要问题是我使用哪种语法?这只是一个选择问题吗?一个比另一个更广泛使用?谢谢你的帮助。
答案 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推荐哪些汇编程序。