十进制到十六进制的转换在汇编中是如何工作的?

how does decimal to hex conversion work in assembly?

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

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

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

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

@dwelch - 非常感谢。

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

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.

那么 arm 是小端字节序,因此内存中的字节交换为 0x39,0x30。

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

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

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