我们如何在Smalltalk中跳转到不同的内存地址?
我正在尝试用Smalltalk构建一个汇编语言解释器。如果我想跳转到另一个内存位置,是否有任何命令? 示例:有一个从1到10的内存地址数组我们如何在Smalltalk中跳转到不同的内存地址?,smalltalk,visualworks,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
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,是否有任何命令?如果试图对程序集解释器建模,则需要表示多个对象。至少您需要有寄存器、指令和内存的对象(即类)。在这种设计中,一个程序(或例程)将是一系列指令,您的解释器将有一个指令指针
ip
,它将沿着例程移动
在ip
的每个位置,解释器都必须“执行”当前指令,这将导致对寄存器和/或特定内存位置的修改
例如,您可以通过将1
分配给ip
来开始解释。现在,您使用索引ip
阅读说明,在本例中:
1. LDI 10
然后您必须向指令发送#execute
消息。在这种情况下,执行将值10
分配给表示寄存器I
的对象。现在,递增ip
并重复,直到指令用完
在处理器的这种“模拟”中,
jmp
指令将是最容易解释的指令之一:它只需将指令指针ip
的值更改为目标位置。如果您试图对程序集解释器建模,则需要表示多个对象。至少您需要有寄存器、指令和内存的对象(即类)。在这种设计中,一个程序(或例程)将是一系列指令,您的解释器将有一个指令指针ip
,它将沿着例程移动
在ip
的每个位置,解释器都必须“执行”当前指令,这将导致对寄存器和/或特定内存位置的修改
例如,您可以通过将1
分配给ip
来开始解释。现在,您使用索引ip
阅读说明,在本例中:
1. LDI 10
然后您必须向指令发送#execute
消息。在这种情况下,执行将值10
分配给表示寄存器I
的对象。现在,递增ip
并重复,直到指令用完
在处理器的这种“模拟”中,
jmp
指令将是最容易解释的指令之一:它只需将指令指针ip
的值更改到目标位置。您的问题不清楚。如何在解释器中表示内存?您如何在口译员中表示指令?您如何在口译员中表示地址?如何在解释器中表示寄存器?你在打造什么样的口译员?例如,它是直接线程解释器吗?您的问题不清楚。如何在解释器中表示内存?您如何在口译员中表示指令?您如何在口译员中表示地址?如何在解释器中表示寄存器?你在打造什么样的口译员?例如,它是直接线程解释器吗?