使用MASM时,后缀“ r”如何对应十进制数字?

问题描述 投票:0回答:1

使用MASM时,我找不到有关如何以浮点十六进制格式设置值的信息。例如:什么是50.1的十进制值等于使用“ r”后缀?

也根据我拥有的MASM文档:

浮点值不能是立即值。如果真是这样,则以下以下说明在MASM中应该是错误的,但MASM可以正确地组装它们:

    mov eax,1r ;What is "1r" = in decimal
    mov eax,42ae0000r

MASM如下组装它们:

    B8 0000005C     mov eax,1r
    B8 19B6A492     mov eax,42ae0000r

也来自测试:

以下说明的汇编时:

    mov eax,1.2r

MASM给出此错误:

    error A2050: real or BCD number not allowed

后缀为“ r”的值不能带有“。”在里面。如果使用“ r”后缀。这是正确的吗?

在此示例中,如果允许一个值是立即数并且后缀为“ r”,并且不带逗号,则该值不是十六进制浮点值。那是什么?

assembly masm masm32
1个回答
0
投票

r后缀将值标记为实数常量。但是,MASM期望带有此后缀的实数常量为十六进制格式,而不是十进制格式。例如,3F800000r是作为IEEE 4字节浮点数(REAL4)的值1.0,并且3FF0000000000000r是作为IEEE 8字节浮点数[REAL8)的值1.0。

如果要用十进制表示数字,则不需要r后缀。小数点将向汇编器指示它是一个实数常数。例如,1.03.14153141.5E-3

查看您的代码,1r被解释为值1543503872。您可以从反汇编中得知:

B8 0000005C     mov eax,1r

B8是将MOV作为目标寄存器的EAX指令的编码。其余字节(0000005C)是源操作数,使用小尾数表示法以十六进制格式编码。0x5C000000== 1,543,503,872

相同于:

B8 19B6A492     mov eax,42ae0000r

这里,源操作数是小尾数十六进制常量0x92a4b619或十进制2,460,268,057

说明:

mov eax,1.2r

由于上述原因,被正确拒绝。

© www.soinside.com 2019 - 2024. All rights reserved.