我正在阅读本教程,介绍如何构建一个简单的虚拟机/字节码解释器。它有像PUSH,POP,HALT等指令......这些指令在开关中被解码和评估,所以你会说当前指令是否等于PUSH,那么你会把它推到一个堆栈。但是如果我想要打印出一个字符串或字符呢?
在汇编中,你可以在.data
中使用make一个字符串,按下长度,然后是消息,然后是stdout(1)的文件描述符,系统写入调用号为4(对于32位),然后做int 80。
如何为虚拟机执行此类操作?我会同样处理吗?我想也许我可以将任何我想要写入的内容转储到寄存器中,然后在其中包含(魔术数字)之外的内容时打印内容,但这似乎不是一个好主意。
答案 0 :(得分:0)
"印刷"假设有某种IO(输入/输出)系统,其输出设备能够在其上显示数据(作为打印机或显示器)。在虚拟机上,这样的设备也只能是虚拟的,并且由VM实现如何模拟它。例如,它可以具有特定的明确定义的存储器范围,即视频存储器",使得在那里写入被解释为将数据发送到输出设备,其可以通过例如文本框来模拟。在你VM的界面。
答案 1 :(得分:0)
您需要为程序创建一种访问屏幕的方式 - 他们无法自动执行此操作"。
例如(如Eugene Sh。评论所建议的):创建一个PUTCHAR操作码,从堆栈中弹出一个数字并将其打印到屏幕上(使用正常的C函数putchar
)