【问题标题】:how does decimal to hex conversion work in assembly?十进制到十六进制的转换如何在汇编中工作?
【发布时间】:2015-10-01 00:51:45
【问题描述】:

我试图弄清楚十进制的 12345 如何产生十六进制的 0x39 0x30。谁能解释一下?自从介绍组装以来已经有一段时间了。建议的帖子对我有所帮助,但没有一个例子可以说明这是如何工作的。

.hword 0xAA55, 12345 ; inserts the bytes 0x55 0xAA 0x39 0x30

给定 hword 一次处理 16 位,12345 如何给出规定的十六进制结果?

64 位的值是否相同?只是用 0xFF 填充?

@dwelch - 非常感谢。

【问题讨论】:

    标签: assembly arm gnu-arm


    【解决方案1】:

    汇编语言与这些有什么关系?什么都没有。

    127秒是多少分钟?你怎么想出来的?每分钟60秒对吗?所以 127/60 = 2.116666.... 对吗?或 2 余数 7,127 秒是 2 分 7 秒。

    4000 秒是多少小时、分钟、秒?好吧,每分钟 60 秒和每小时 60 分钟,所以每小时 3600 秒,从最大的占位符开始,4000/3600 是 1 余数 400,所以 1 小时 400 秒。 400 秒/60 是 6 的余数 40。所以 4000 秒是 1 小时 6 分 40 秒。

    我们在小学就学会了如何做到这一点,是吗?从十进制到基数 60 的转换。从十进制到基数 16 有什么不同?不是。

    注意个位是 10 的 0 次方,十位是 10 的 1 次方,百位是 10 的 2 次方,以此类推。秒是 60 的 0 次方,分钟位置是 60 的 1 次方,小时位置是 60 的 2 次方。

    12345 十进制。我们的 base 16 占位符是什么? 16 的 0 次方是 1,16 的 1 次方是 16,16 的 2 次方是 256,16 的 3 次方是 4096,16 的 4 次方是 65536。12345 小于 65536,大于 4096 所以我们从那里开始,12345/4096 = 3 余数 57。所以这是 16 的 3 次方位或 0x3xxx。 57/256 = 0 余数 57 所以 0x30xx。 57/16 = 3 余数 9 所以 12345d = 0x3039。

    然后手臂是小端的,因此字节交换到内存中的 0x39,0x30。

    【讨论】:

      【解决方案2】:

      如果将参数转换为十六进制,则更有意义(12345 为 0x3039):

      .hword 0xAA55, 0x3039 ; inserts the bytes 0x55 0xAA 0x39 0x30
      

      考虑到机器的字节序,0xAA55 0x3039 变成了命名为 55 aa 39 30。

      【讨论】:

        猜你喜欢
        • 2012-06-02
        • 1970-01-01
        • 2014-03-19
        • 2019-05-16
        • 2012-03-10
        • 1970-01-01
        • 2017-05-05
        • 1970-01-01
        相关资源
        最近更新 更多