无法确定加载到具有来自不同寄存器的偏移量的寄存器
Trouble Figuring out loading to register with offset from different register
我正在创建一个 8 位 CPU。我有基本指令,如 mov、ld、st、add、sub、mult、jmp。我正在尝试将我的说明放在一起。首先,我将一个值的基地址移入寄存器 1 (R1)。然后我想用值加载寄存器 2 (R2)。所以我的说明如下:
1 mov R1, 0xFFFF
2 ld R2, [R1+0]
我的操作码定义是:
ld: 0001
mov: 1111
注册码为:
R1: 0001
R2: 0010
所以我的二进制指令是这样的:
1 mov R1, 0xFFFF = 1111 0001 0xFFFF
2 ld R2, [R1+0] = 0001 00010
但是在我的第二个加载方向上,我如何确保存储在我移动到 R1 的内存位置的值将被使用。这是我第一次用计算机体系结构做任何事情,所以我有点迷茫。
how can I ensure the value stored at the memory location I moved to R1 is going to be used.
通过构建您的硬件以正确处理先写后读的危险 (https://en.wikipedia.org/wiki/Hazard_(computer_architecture)#Data_hazards)。
两者都
- 使其成为简单的非流水线CPU,其中一条指令在下一条指令读取任何寄存器之前写回寄存器
- 检测依赖关系并停止管道
- 绕过转发。 (https://en.wikipedia.org/wiki/Hazard_(computer_architecture)#Eliminating_hazards)
我正在创建一个 8 位 CPU。我有基本指令,如 mov、ld、st、add、sub、mult、jmp。我正在尝试将我的说明放在一起。首先,我将一个值的基地址移入寄存器 1 (R1)。然后我想用值加载寄存器 2 (R2)。所以我的说明如下:
1 mov R1, 0xFFFF
2 ld R2, [R1+0]
我的操作码定义是:
ld: 0001
mov: 1111
注册码为:
R1: 0001
R2: 0010
所以我的二进制指令是这样的:
1 mov R1, 0xFFFF = 1111 0001 0xFFFF
2 ld R2, [R1+0] = 0001 00010
但是在我的第二个加载方向上,我如何确保存储在我移动到 R1 的内存位置的值将被使用。这是我第一次用计算机体系结构做任何事情,所以我有点迷茫。
how can I ensure the value stored at the memory location I moved to R1 is going to be used.
通过构建您的硬件以正确处理先写后读的危险 (https://en.wikipedia.org/wiki/Hazard_(computer_architecture)#Data_hazards)。
两者都
- 使其成为简单的非流水线CPU,其中一条指令在下一条指令读取任何寄存器之前写回寄存器
- 检测依赖关系并停止管道
- 绕过转发。 (https://en.wikipedia.org/wiki/Hazard_(computer_architecture)#Eliminating_hazards)