我决定通过在线教程学习汇编程序。
我遇到过这个使用 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/