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

时间:2015-07-12 19:44:09

标签: assembly arm gnu-arm

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

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

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

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

@dwelch - 非常感谢你。

2 个答案:

答案 0 :(得分: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十进制。我们的基地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。

答案 1 :(得分:1)

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

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

当您考虑机器的字节顺序时,0xAA55 0x3039变为命名55 aa 39 30.