【问题标题】:What does the "fh" suffix mean on a number like "38fh" in Intel assembly英特尔汇编中的“38fh”等数字上的“fh”后缀是什么意思
【发布时间】:2016-06-09 08:32:59
【问题描述】:

我搜索了整个网络,但在以下指令and eax, 38fh 中找不到“fh”的含义。我知道“h”代表十六进制,“d”代表十进制,但我以前从未见过 fh。

【问题讨论】:

  • 十六进制数3f8。以 h 结尾的文字以十六进制指定数字。 3f8h 是十进制的 1016
  • 不客气。你不是一个人犯这样的错误,例如我打错了数字,实际上是 38f 而不是 3f8 :)
  • 一个技巧是使用不同的大小写来突出后缀:38Fh
  • @MargaretBloom :很容易犯错误,因为如果您正在处理端口号,3f8h 实际上是有意义的 ;-)。我一开始也看到它是 3f8h,并认为他正在做一些串口开发。
  • @PeterCordes:没问题。由于我的回答是一些评论者的意见,至少为这个问题提供了一个解决方案,因此我在创建时将其标记为 Community Wiki,因为我不希望建立声誉的答案。为了更好地搜索,你如何措辞这样的问题更加困难。但在我的搜索中(包括我去年给出的另一个答案),我只能找到相关的东西。如果有人可以为这个问题想出一个更好的标题,我会说有。如果有一个接近的副本,将其标记为副本是个好主意。

标签: assembly x86 intel masm base


【解决方案1】:

如果英特尔汇编程序(即MASM)令牌以数字(0 到 9)开头,则假定整个令牌都是一个值。如果该值以h 结尾,则汇编程序假定它是H 十六进制。

在您的情况下,38fh 以数字开头,因此它被假定为一个值。在您的情况下,令牌的结尾是 h(或 H),因此它被视为十六进制数。所以38f 被视为十六进制值。 f 恰好是一个有效的十六进制数字。 38f 是十进制的 911 和二进制的 1110001111。

如果你有像f8h 这样的令牌,就会出现问题。因为它以字母(不是数字 0 到 9)开头,所以将被视为标识符或符号。如果它显示为 and eax, f8h ,这可能会导致某种形式的语法错误。可能有一个问题 - 如果十六进制值以字母 AF 开头,我如何使用h 后缀来表示它?很简单,只要在前面放一个0。这将工作and eax, 0f8h

正如 Fifoernik 指出的那样 一个技巧是使用不同的大写字母来突出后缀:38Fh。如果将 F 设为大写 ​​F 并保留后缀字符 'h' 小写,那么对于汇编程序新手来说,可能更容易看到 f 是十六进制数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-06
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    相关资源
    最近更新 更多