【问题标题】:Assembly Language - Converting Two's Complement Hexadecimal to its Base 10 Equivalent汇编语言 - 将二进制补码十六进制转换为其基 10 等价
【发布时间】:2015-07-17 10:17:33
【问题描述】:

我目前正在尝试弄清楚如何将二进制补码十六进制正确转换为其以 10 为底的等效值。我们得到了一个汇编语言程序,它可以加减 32 位整数,并且需要获取寄存器的值并进行转换。

这是我尝试过的,但是,我的教授说我在最终计算中犯了一个严重错误,我不知道是什么。

这里是寄存器 EAX 值:FFFC0888

然后我将它从二进制补码十六进制转换为十六进制: FFFC0888 -> 0003F778

最后将十六进制转换为十进制。 0003F778 = (0 X 16^7) + (0 X 16^6) + (0 X 16^5) + (3 X 16^4) + (15 X 16^3) + (7 X 16^2) + (7 X 16^1) + (8 X 16^0) = 0+0+0+196608+61440+1792+112+8= 259960

我对 259960 的最终答案不正确,有人可以帮助我了解我做错了什么吗?谢谢!

【问题讨论】:

  • 是因为你没有提到答案为 -259960 吗?

标签: assembly hex decimal type-conversion base


【解决方案1】:

转换中的所有内容都是正确的,除了:

0003F778 = -(0 + 0 + 0 + (3 X 16^4) + (15 X 16^3) + (7 X 16^2) + (7 X 16^1) + (8 X 16^0)) 

其中0003F778 是 2s 补码整数数据。

【讨论】:

    【解决方案2】:

    (@chathux 提示答案)。

    您有一个值 X==FFFC0888_16。当您将 X 转换为 0003F778(通过“二进制补码”)时,您这样做是因为您(应该)认为 X 值是“负数”(设置了符号位)。您生成的十进制值 259960 是正确的量级,即 abs(X) == 259960_10。但是X的值是负数,所以正确答案是X == -259960_10。

    如果 X==7FFC0888_16 的值是正值(符号位为零),则在生成十进制值之前不应取二进制补码。

    【讨论】:

      猜你喜欢
      • 2018-07-21
      • 2019-05-16
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 2014-03-24
      • 2016-03-19
      • 2014-04-16
      相关资源
      最近更新 更多