我期待学习汇编语言。
我在网上搜索了教程,发现了不同的教程,使用不同的汇编语法。
8086汇编程序,nasm和gcc之间有什么区别吗?
使用汇编语言学习代码的更好方法是什么?
感谢。
答案 0 :(得分:1)
x86芯片组基本上有两种风格:AT&T
或Intel
snytax。我认识的大多数人更喜欢英特尔语法,因为它更容易理解,但当然这也是一个习惯的问题。当我在6510或M68000上学习汇编时,我发现AT& T语法更加紧密相关,它与IMO的地址模式相当混乱。
如果您指示gcc编写汇编源文件,默认情况下它使用AT& T语法,但您也可以使用
将其切换到Intelgcc -S -masm=intel test.c
nasm
是一个汇编程序,gcc是一个编译器,所以它们的用途完全不同。
至于学习汇编,有很多教程,例如The Art of Assembly。但是如果你真的想学习它,IMO最好的方法是启动debug
并输入一些指令,看看他们在做什么,以及他们如何改变reigsters和flags,先编写小循环。
这样你就可以专注于指令而不是使用汇编源语法。
答案 1 :(得分:0)
即使你有硬件,我也不会从x86开始,也不是一个好的第一个指令集。 ARM,msp430,avr和其他一些产品更好,并且拥有开源模拟器,您可以在其中获得更好的可见性。我会从小开始,只是添加或者输入一些数字,写一个内存位置,读回来,那样的东西。模拟器(可以)阻止您需要进行系统调用以“看到”您的结果,同样它们肯定可以帮助您解决挂起和崩溃,您将获得以及IMO导致放弃整个事情。一旦你知道更多,你可以切换到硬件或尝试另一个指令集(每个新的指令集比以前更容易)导致x86,如果你仍然觉得有需要...使用x86我建议回到早期,找到一个8088/86模拟器,学习原始指令集,然后如果你仍然觉得需要,那么跳到80386和更新。你还需要能够在头脑中切换格式,gnu使用AT& T是一个主要的罪(gnu汇编人员经常承诺这些罪行BTW,几乎是预期的),但不幸的是我们现在有这两种竞争格式。通过练习,您应该能够轻松地分辨出在检查代码时使用的格式,但精神上来回切换可能仍然是一个挑战。