我正在学习虚拟机,我偶然发现了这本维基百科的书,这真的很棒。但是,我正处于作者解释他如何转换指令的部分,如:
loadi r0 #100
到
0x1064
我不知道它是如何工作的? 有人可以向我解释一下,这是有问题的链接http://en.wikibooks.org/wiki/Creating_a_Virtual_Machine/Register_VM_in_C
如果你向下滚动到指令代码,他会谈到它,但这对我没有意义,有人可以向我解释,就像我5岁那样吗?
答案 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),二进制和十六进制之间进行转换。