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

我们如何在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

我正在尝试用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,是否有任何命令?

如果试图对程序集解释器建模,则需要表示多个对象。至少您需要有寄存器、指令和内存的对象(即类)。在这种设计中,一个程序(或例程)将是一系列指令,您的解释器将有一个指令指针
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
的值更改到目标位置。

您的问题不清楚。如何在解释器中表示内存?您如何在口译员中表示指令?您如何在口译员中表示地址?如何在解释器中表示寄存器?你在打造什么样的口译员?例如,它是直接线程解释器吗?您的问题不清楚。如何在解释器中表示内存?您如何在口译员中表示指令?您如何在口译员中表示地址?如何在解释器中表示寄存器?你在打造什么样的口译员?例如,它是直接线程解释器吗?