【发布时间】:2015-07-22 21:01:55
【问题描述】:
我正在阅读有关构建简单虚拟机/字节码解释器的教程。它有 PUSH、POP、HALT 等指令……这些指令在开关中被解码和评估,所以你会说如果当前指令等于 PUSH,那么你会将它推入堆栈。但是如果我想打印一个字符串或字符呢?
在汇编中,您将使用在.data 中创建一个字符串,推送长度,然后是消息,然后是 stdout (1) 的文件描述符,系统写入调用号 so 4(对于 32 位),然后做int 80。
我如何为虚拟机做这样的事情?我会以同样的方式处理它吗?我想也许我可以把我想写的任何东西都转储到一个寄存器中,然后当其中包含(幻数)以外的内容时 printf 内容,但这似乎不是一个好主意。
【问题讨论】:
-
你认为'int 80'有什么作用?
-
@Soren 不确定,我认为是系统调用??
-
那么您认为该系统调用会发生什么?
-
它可能会将您推送的内容发送到系统?并且文件描述符说将其写入标准输出?我不太确定。
-
我想这取决于您的“VM”/字节码解释器的底层程度。如果我将其中一个作为普通 C 程序编写,在操作系统下运行,我会定义一个操作码,意思是“putchar”,它会从堆栈中弹出一个单词并在其上调用常规的旧
putchar(),并且角色会出现在我的屏幕上。
标签: c virtual-machine stdout bytecode