【问题标题】:Types of assembly language [closed]汇编语言的类型
【发布时间】:2013-12-19 14:22:06
【问题描述】:

我期待学习一门汇编语言。

我在网上搜索教程,发现不同的教程具有不同的汇编语法。

8086汇编器、nasm和gcc有什么区别?

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

谢谢。

【问题讨论】:

    标签: gcc assembly nasm x86-16


    【解决方案1】:

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

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

    将其切换到 Intel
    gcc -S -masm=intel test.c
    

    nasm 是一个汇编器,而 gcc 是一个编译器,因此它们的用途完全不同。

    关于学习汇编有很多教程,例如The Art of Assembly。但如果你真的想学,IMO 最好的方法是开始 debug 并输入一些指令,看看他们在做什么以及他们如何更改注册和标志,首先编写小循环。

    这样您就可以专注于指令,而不必与汇编源语法作斗争。

    【讨论】:

      【解决方案2】:

      我不会从 x86 开始,即使你有硬件也不是一个好的第一个指令集。 ARM、msp430、avr 和其他一些更好,并且具有开源模拟器,您可以在其中获得更好的可见性。我会从小处着手,简单地添加或与几个数字相加,写一个内存位置,读回它,如果是这样的话。模拟器(可以)防止您需要进行系统调用以“查看”您的结果,同样它们绝对可以帮助您解决挂起和崩溃问题,您会得到这些,而 IMO 会导致放弃整个事情。一旦您了解更多,您可以切换到硬件或尝试另一个指令集(每个新指令集都比以前的指令集容易得多),如果您到那时仍然觉得有必要的话……我建议回到 x86早期,找一个 8088/86 模拟器,学习原始指令集,如果你仍然觉得有必要,那就跳到 80386 和更新版本。您还需要能够在脑海中切换格式,使用 AT&T 的 gnu 是一个大罪(gnu 汇编人员经常犯这些罪,顺便说一句,这几乎是意料之中的),但不幸的是,我们现在有这两种相互竞争的格式。通过练习,您应该能够轻松分辨出检查代码时使用的格式,但在思维上来回切换可能仍然是一个挑战。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-24
        • 2014-10-07
        • 1970-01-01
        • 2013-01-17
        • 2013-09-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多