【问题标题】:How to represent octal numbers in Assembly?如何在汇编中表示八进制数?
【发布时间】:2016-09-19 02:04:06
【问题描述】:

例如对于十六进制数字,我们可以使用0x983988790h

如何编写八进制数字常量?这行得通吗?

mov eax, 70o

【问题讨论】:

    标签: assembly x86


    【解决方案1】:

    NASM supports 70o70q0o700q70 用于八进制。

    我推荐 0q70 版本,以避免未来(人类)读者将小写字母 O 误认为零的风险。我也不喜欢十六进制的尾随后缀样式,因为它很容易错过。它有助于使用与常量其余部分相反的情况,但前导 0x 或 0q 更清晰。 (对于十六进制,避免需要前导 0 使其成为数字常量而不是符号名称。)

    至于十六进制常量支持,it will certainly vary by assembler,所以只需查看您的汇编手册。例如大多数仅 DOS/Windows 的汇编器不支持 0xDEADBEEF,只支持 0DEADBEEFh 样式,所以我猜他们对八进制的选择也较少。

    请参阅 标签 wiki 以获取各种汇编器手册(以及许多其他有用的资源和指南)的链接。

    【讨论】:

    • 请注意,如果您使用 YASM,0q0o 前缀将不起作用。
    【解决方案2】:

    取决于汇编器,但包括 NASM 在内的大多数汇编器都允许 0o,o 代表八进制。就像您使用 0x 一样,其中 x 代表十六进制。

        mov     ax,310q         ; octal 
        mov     ax,310o         ; octal again 
        mov     ax,0o310        ; octal yet again 
        mov     ax,0q310        ; octal yet again 
    

    信息来源:Here

    同样,它不是 0o 或所有汇编程序的上述语法。它可能因汇编器而异,但 NASM 确实使用上述语法,您可以查看提供的链接以获取更多信息。如果您有其他汇编程序,请查看他们的手册,例如 FASM:Here。加油站:Here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 2012-07-28
      • 2019-12-16
      • 1970-01-01
      相关资源
      最近更新 更多