该虚拟机如何将指令转换为十六进制值?

时间:2014-07-16 04:06:21

标签: c vm-implementation

我正在学习虚拟机,我偶然发现了这本维基百科的书,这真的很棒。但是,我正处于作者解释他如何转换指令的部分,如:

loadi r0 #100

0x1064

我不知道它是如何工作的? 有人可以向我解释一下,这是有问题的链接http://en.wikibooks.org/wiki/Creating_a_Virtual_Machine/Register_VM_in_C

如果你向下滚动到指令代码,他会谈到它,但这对我没有意义,有人可以向我解释,就像我5岁那样吗?

2 个答案:

答案 0 :(得分:1)

loadi r0 #100的指令变为16位指令。

命令loadi将位11到15(左边的位)设置为1:

0001xxxxxxxxxxxx

r0用于寄存器0,并将位8设置为11。

00010000xxxxxxxx

值100放在位0到7中。位4到7乘以16,然后加到位0到3中的值。所以100 = 6乘16(等于96)+4。

0001_0000_0110_0100 (in binary, seperations for clarity)
1064 (in hexa)

来源:http://en.wikibooks.org/wiki/Creating_a_Virtual_Machine/Register_VM_in_C#Instruction_codes

答案 1 :(得分:0)

0x1064表示十六进制数(基数为16)。

This number represents multiple pieces of information:
bits 15-12 = 0001 (loadi)
bits 11- 8 = 0000 (register)
bits  7- 0 = 0110 0100 (value to load)

So in binary (base2) the instruction is 0001 0000 0110 0100.
Converting to hex (base 64) the instruction is 0x1064.

您可以使用计算器程序来帮助在十进制(基数10),二进制和十六进制之间进行转换。