将特定长度的变量存储在内存中

时间:2014-12-20 19:32:15

标签: assembly interpreter vm-implementation

我读过有关C#,Java等语言的虚拟机......我无法理解处理器如何知道应该写入多少数据的细节之一。我们假设以下语法:

mov [A], 'A';

A是虚拟寄存器,' A'只是8位长的标志。 [A]表示在寄存器中是地址,在内存中将存储我们的变量。让我们假设我们的寄存器是32位长度。处理器如何知道我们只需要在内存中存储前1个字节而其他3个是无关紧要的?我们无法加载到内存满32位,因为我们会覆盖一些东西。

我能想象的唯一想法是创建指令专用指令,如mov字节,移动字等......但我认为它不是最好的解决方案。

我的问题可能不是特定于处理器的,我想知道什么是一般规则。

1 个答案:

答案 0 :(得分:1)

操作大小确实在指令中编码。语法取决于体系结构,它可能是不同的助记符或某种修饰符/后缀,或运算符。

一些例子:

  • x86 intel语法:mov byte ptr [x], y vs mov dword ptr [x], y
  • x86 at& t syntax:movb $y, x vs movl $y, x
  • mips:sb $t0, ($t1) vs sw $t0, ($t1)
  • sparc:stb %g0, [%o0] vs st %g0, [%o0]
  • arm:strb r0, [r1] vs str r0, [r1]
  • 68k:move.b #0, (A0) vs move.l #0, (A0)