我在网上搜索过,但我找不到“fh”在以下说明and eax, 38fh
中的含义。我知道“h”代表十六进制,“d”代表十进制,但我以前从未见过fh。
答案 0 :(得分:4)
如果英特尔汇编程序(即 MASM )令牌以数字(0到9)开头,则假定整个令牌是一个值。如果值以h
结束,则汇编程序假定它是 H exadecimal。
在您的情况下,38fh
以数字开头,因此假定它是一个值。在您的情况下,令牌的结尾是h
(或H
),因此它被视为十六进制数。因此38f
被视为十六进制值。 f
恰好是有效的十六进制数字。 38f
是十进制的911和二进制的1110001111。
如果您有f8h
之类的令牌,则会出现问题。因为它以字母(不是数字0到9)开头,所以它将被视为标识符或符号。如果它显示为and eax, f8h
,则可能会导致某种形式的语法错误。可能有的问题 - 如果十六进制值以字母 A 开头 F ,我如何使用h
后缀表示它?简单,只需在前面放一个0。这将有效and eax, 0f8h
。
正如Fifoernik指出的一个技巧是使用不同的大写来使后缀脱颖而出: 38Fh 。对于一个新的汇编程序来说,f
是一个十六进制数字可能更容易看到它是大写F
而留下后缀字符' h'小写。