0

我正在尝试在 Smalltalk 中构建一个汇编语言解释器。如果我想跳转到不同的内存位置,有什么命令吗?示例:有一个内存地址从 1 到 10 的数组。

1 LDI 10     //Load 10 to a register 
2 XCH        //Exchange value with different register
3 LDI 20     // Load 20 to a register
4 ADD        //Add the values 10 and 20
5 JMP 1     //Jump to memory address 1
6 HLT

从内存地址5跳转到地址1,有什么命令吗?

4

1 回答 1

4

如果您尝试对程序集解释器进行建模,则需要表示多个对象。至少你需要有用于寄存器、指令和内存的对象(即类)。在这种设计中,程序(或例程)将是一系列指令,您的解释器将有一个ip沿例程移动的指令指针。

在 的每个位置ip,解释器都必须“执行”当前指令,这将导致对寄存器和/或特定内存位置的修改。

例如,您通过分配1to开始解释ip。现在您使用 index 阅读说明ip,在这种情况下:

1. LDI 10

然后,您必须将#execute消息发送到指令。在这种情况下,执行会将值分配给10表示 register 的对象I。现在你增加ip并重复,直到你用完指令。

在处理器的这种“模拟”中,jmp指令将是最容易解释的指令之一:它只是将指令指针的值更改为ip目标位置。

于 2018-03-12T23:38:58.577 回答