【问题标题】:Order of the [BITS 16] and [ORG 0x0000] directives[BITS 16] 和 [ORG 0x0000] 指令的顺序
【发布时间】:2023-03-12 15:58:01
【问题描述】:

我开始尝试编写内核并从中获得乐趣。我已经完成了基本的引导加载程序和以下指令:

[BITS 16]
[ORG 0x0000]

然而,在内核教程中,它的开头是:

[ORG 0x0000]
[BITS 16]

我想知道给出这些指令的顺序是否有所不同?我正在使用 NASM 版本 2.06rc2,OpenSUSE 11.2

【问题讨论】:

    标签: assembly kernel nasm opensuse


    【解决方案1】:

    最新的NASM 是2.08 版,根据BITS 指令的文档判断..

    顺序不应该有区别,因为它们告诉 NASM 生成具有某些条件的文件,例如使用 16 位和从零开始寻址。由此看来,NASM 似乎足够聪明,可以知道它会产生什么样的输出。

    【讨论】:

      【解决方案2】:

      不管哪个先出现,但我通常在我的程序中遵循这个顺序:

              cpu 8086
              bits 16
              org 256
      

      (因为 bits 16 是 NASM 的 bin 输出格式的默认值,我通常不会明确指定它,除非文件中有一些 bits 32 部分。)

      顺便说一句,带括号的表单是这些指令的较低级别的非“用户”表单。 https://www.nasm.us/xdoc/2.14.02/html/nasmdoc6.html#section-6.1

      BITS 指令具有完全相同的原始形式,[BITS 16]、[BITS 32] 和 [BITS 64]。用户级表单是一个宏,除了调用原始表单之外没有其他功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-04
        • 2011-02-08
        • 2017-12-10
        • 2023-02-05
        • 1970-01-01
        • 2022-01-10
        • 2014-03-18
        • 1970-01-01
        相关资源
        最近更新 更多