我们如何在Smalltalk中跳转到不同的内存地址?

时间:2018-03-12 22:30:19

标签: smalltalk visualworks

我正在尝试在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,有没有命令?

1 个答案:

答案 0 :(得分:4)

如果您要模拟装配解释器,则需要表示多个对象。至少你需要有寄存器,指令和内存的对象(即类)。在这种设计中,程序(或例程)将是一系列指令,并且您的解释器将具有沿例程移动的指令指针ip

ip的每个位置,口译员必须执行"执行"当前指令,这将导致对寄存器和/或特定存储器位置的修改。

例如,您可以通过将1分配给ip来开始解释。现在,您阅读索引为ip的指令,在这种情况下:

1. LDI 10

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

在此"模拟"对于处理器,jmp指令将是最容易解释的指令之一:它只是将指令指针ip的值更改为目标位置。