我正在阅读有关构建简单的虚拟机/字节码解释器的教程。它具有PUSH,POP,HALT等指令,这些指令在开关中进行解码和评估,因此您可以说,如果当前指令等于PUSH,则可以将其压入堆栈。但是,如果我想打印出字符串或字符怎么办?
在汇编中,您将在.data
中使用一个字符串,输入长度,然后输入消息,然后输入stdout(1)的文件描述符,系统将写入的电话号码设为4(用于32位),然后执行int 80 。
我将如何对虚拟机执行类似操作?我会同样处理吗?我以为也许我可以转储我想写的任何内容到寄存器中,然后在内容中包含(幻数)以外的内容时将其打印出来,但这似乎不是一个好主意。
最佳答案
“打印”假设具有某种IO(输入/输出)系统,该系统带有能够在其上显示数据的输出设备(作为打印机或显示器)。在虚拟机上,这样的设备也只能是虚拟的,而如何模拟虚拟机则取决于VM的实现。例如,它可以有一个明确定义的特定内存范围,即“视频内存”,以便将其中的内容解释为将数据发送到输出设备,例如可以通过VM界面中的文本框进行模拟。
关于c - 您将如何从字节码解释器写入stdout?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31573913/