我读过有关C#,Java等语言的虚拟机......我无法理解处理器如何知道应该写入多少数据的细节之一。我们假设以下语法:
mov [A], 'A';
A是虚拟寄存器,' A'只是8位长的标志。 [A]表示在寄存器中是地址,在内存中将存储我们的变量。让我们假设我们的寄存器是32位长度。处理器如何知道我们只需要在内存中存储前1个字节而其他3个是无关紧要的?我们无法加载到内存满32位,因为我们会覆盖一些东西。
我能想象的唯一想法是创建指令专用指令,如mov字节,移动字等......但我认为它不是最好的解决方案。
我的问题可能不是特定于处理器的,我想知道什么是一般规则。
答案 0 :(得分:1)
操作大小确实在指令中编码。语法取决于体系结构,它可能是不同的助记符或某种修饰符/后缀,或运算符。
一些例子:
mov byte ptr [x], y
vs mov dword ptr [x], y
movb $y, x
vs movl $y, x
sb $t0, ($t1)
vs sw $t0, ($t1)
stb %g0, [%o0]
vs st %g0, [%o0]
strb r0, [r1]
vs str r0, [r1]
move.b #0, (A0)
vs move.l #0, (A0)