【发布时间】:2014-12-20 19:32:15
【问题描述】:
我阅读了有关 C#、Java 等语言的虚拟机的信息……但我无法理解处理器如何知道它应该写入多少数据的细节之一。让我们假设以下语法:
mov [A], 'A';
A 是虚拟寄存器,'A' 只是 8 位长度的符号。 [A] 表示寄存器中的地址是内存中将存储我们的变量的地址。假设我们的寄存器是 32 位长度的。处理器如何知道我们只需要在内存中存储前 1 个字节而其他 3 个无关紧要?我们不能只加载完整的 32 位内存,因为我们会覆盖某些内容。
我能想到的唯一想法是创建指令专用指令,如 mov byte、move word 等……但我认为这不是最好的解决方案。
我的问题可能不是“特定于处理器”,我想知道一般规则是什么。
【问题讨论】:
-
指令中确实编码了运算大小。语法取决于架构,它可能是不同的助记符或某种修饰符/后缀,或运算符。
-
“其他 3”是什么意思?寄存器
A的大小与其内容 或移动操作的语义无关。正如您自己所说,[A]的意思是“使用地址存储在A中的内存”。 -
Others 3 表示我们将前 8 位中的 char 和其他位放入寄存器中,这些位与我们无关,不应存储在内存中。 @Jester - 你能提供一些简单的例子吗?
标签: assembly interpreter vm-implementation