我正在尝试在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,有没有命令?
答案 0 :(得分:4)
如果您要模拟装配解释器,则需要表示多个对象。至少你需要有寄存器,指令和内存的对象(即类)。在这种设计中,程序(或例程)将是一系列指令,并且您的解释器将具有沿例程移动的指令指针ip
。
在ip
的每个位置,口译员必须执行"执行"当前指令,这将导致对寄存器和/或特定存储器位置的修改。
例如,您可以通过将1
分配给ip
来开始解释。现在,您阅读索引为ip
的指令,在这种情况下:
1. LDI 10
然后您必须将#execute
消息发送到指令。在这种情况下,执行将值10
分配给表示寄存器I
的对象。现在你增加ip
并重复,直到你的说明用完为止。
在此"模拟"对于处理器,jmp
指令将是最容易解释的指令之一:它只是将指令指针ip
的值更改为目标位置。