Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gcc 汇编语言的类型_Gcc_Assembly_Nasm_X86 16 - Fatal编程技术网

Gcc 汇编语言的类型

Gcc 汇编语言的类型,gcc,assembly,nasm,x86-16,Gcc,Assembly,Nasm,X86 16,我期待着学习汇编语言 我在网上搜索教程,找到了不同语法的汇编教程 8086汇编程序、nasm和gcc之间有什么区别吗 用汇编语言学习代码的更好方法是什么 谢谢。我不会从x86开始,这不是一个好的第一条指令集,即使你有硬件。ARM、msp430、avr和其他一些更好,并且有开放源代码模拟器,您可以在其中获得更好的可见性。我会从小处做起,简单地加上或和上几个数字,写下一个内存位置,读回它,如果是这样的话。模拟器(可以)防止您需要进行系统调用来“查看”您的结果,同样,它们肯定可以帮助您解决挂起和崩溃问

我期待着学习汇编语言

我在网上搜索教程,找到了不同语法的汇编教程

8086汇编程序、nasm和gcc之间有什么区别吗

用汇编语言学习代码的更好方法是什么


谢谢。

我不会从x86开始,这不是一个好的第一条指令集,即使你有硬件。ARM、msp430、avr和其他一些更好,并且有开放源代码模拟器,您可以在其中获得更好的可见性。我会从小处做起,简单地加上或和上几个数字,写下一个内存位置,读回它,如果是这样的话。模拟器(可以)防止您需要进行系统调用来“查看”您的结果,同样,它们肯定可以帮助您解决挂起和崩溃问题,您会遇到这些问题,IMO会因此放弃整个过程。一旦您了解更多,您可以切换到硬件或尝试另一个指令集(每个新指令集都比以前的指令集容易得多),如果您当时仍然觉得需要x86…对于x86,我建议回到早期,找到8088/86模拟器,学习原始指令集,然后如果您仍然觉得需要,然后跳到80386及更新版本。您还需要能够在您的头脑中切换格式,使用AT&T的gnu是一个主要的错误(顺便说一句,gnu汇编人员经常犯这些错误,这几乎是意料之中的),但不幸的是,我们现在有这两种相互竞争的格式。通过实践,您应该能够很容易地知道在检查代码时使用的是什么格式,但在心理上来回切换可能仍然是一个挑战。

基本上,x86芯片组有两种风格,即AT&T或
Intel
snytax。我认识的大多数人都喜欢英特尔语法,因为它更容易理解,但当然这也是习惯的问题。当我在6510或M68000上学习汇编时,我发现AT&T语法更接近相关,它与它的寻址模式相当混淆

如果指示gcc编写程序集源文件,默认情况下它使用AT&T语法,但也可以使用

gcc -S -masm=intel test.c
nasm
是一个汇编程序,而gcc是一个编译器,因此它们有着完全不同的用途

例如,关于学习组装,有很多教程。但是如果你真的想学习它,最好的方法是开始调试,输入一些指令,看看它们在做什么,以及它们如何改变reigsters和flags,首先编写小循环

通过这种方式,您可以专注于指令,而不是与汇编程序源代码语法斗争