我试图弄清楚十进制的 12345 如何产生十六进制的 0x39 0x30。谁能解释一下?自从介绍组装以来已经有一段时间了。建议的帖子对我有所帮助,但没有一个例子可以说明这是如何工作的。
.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。
然后手臂是小端的,因此字节交换到内存中的 0x39,0x30。
如果将参数转换为十六进制,则更有意义(12345 为 0x3039):
.hword 0xAA55, 0x3039 ; inserts the bytes 0x55 0xAA 0x39 0x30
考虑到机器的字节序,0xAA55 0x3039 变成了命名的 55 aa 39 30。