如何计算装配中的负数

时间:2010-11-23 19:26:49

标签: assembly

我是集会的新手,我有一个关于如何表示负数的问题 我有三个DWORDS变量,让我们说:

result DWORD 0
i DWORD 3
j DWORD 5

我想计算这个公式:result = i - j + 8 但是,当我做i-j时,由于符号,结果将是一个非常高的数字 那么如何才能使结果正常呢?

3 个答案:

答案 0 :(得分:8)

对于32位DWORD,整数范围为-2147483648至2147483647或十六进制-0x80000000至0x7FFFFFFF。

所以数字-1出现像0xFFFFFFFF。 (像计数器下溢)

如果设置了高(31)位,则数字为负。要从负数(否定)中获得正数,您必须进行数字竞争并加1。

示例:

    0xFFFFFFFE   //-2
xor 0xFFFFFFFF   //binary complement 
---------------
    0x00000001   //result of complement
+   0x00000001   //add 1
---------------
    0x00000002   //Result of negation is 2

答案 1 :(得分:0)

注意:

如果比较两个整数,则使用其他跳转命令而不是比较绝对数字:

比较绝对数字:

jg (jump if greater)
jl (jump if less)

比较整数(可以是负数或正数):

ja (jump if greater)
jb (jump if less)

答案 2 :(得分:0)

负数在汇编中的Two补码中表示。为了获得数字的二进制补码,您有两个选择:

  • 补充所有位并加一位。
  • 补充所有比特直到最后1个