将汇编代码转换为机器代码。这个 PC 柜台里有什么?
Converting assembly code into machine code. What goes in this PC counter?
我有这个作业:
示例中,第三行的 0/32, 22, 16, 12
个数字是多少?
上面为什么PC=4?我认为它应该等于指令的当前位置 = LC?
我在某处读到,对于 BNE 指令,PC 计数器的处理方式不同,因此它是一个字地址。那么 BNE 指令的 PC 列中会出现什么?我知道 4 个字节 = 1 个字,所以如果 BNE 位于 PC=28 个字节,那么它将是 7 个字?但是,它需要返回到 8 字节 = 2 字处的 next
标签...那么该列中的内容是什么?我是否输入 -5 来暗示下一条指令在第 2 个字?
编辑
我已经填好了,但还是卡住了:
我认为他们正在使用 PC 列来指示 下一个 PC 值 在 指令执行后。
对于大多数指令(例如算术和逻辑),下一个 PC 是 LC+4 — 这就是顺序执行的工作方式。
但是,对于条件分支指令,它要么是下一个 PC (LC+4),要么是分支目标地址 (PC+4+immediate*4)。
对于(无条件)跳转指令,下一个 PC 是通过标签计算的地址(j label
或 jal label
)或寄存器中的值(jr $ra
)。
对于 BNE 指令,因为它是一个 条件 分支,那么在抽象中下一个 PC 可能是两个不同值之一,因此,我们需要知道状态——寄存器中的值——在我们可以选择两个可能的下一个 PC 值之一之前,因为我们需要知道条件分支是否被采用。如果被采纳,下一个 PC 是 PC+4+immediate*4
,如果没有被采纳,它就是 PC+4
。如果指定的条件为真(即两个寄存器在位模式上不相等),则取值。
0 / 32、22、17、12 是:
opcode=0 ... 0表示R-Type指令。操作码字段位于第 31-26 位。所以,当这些位都为 0 时,我们就有了 R 型指令。一条 R 型指令有 3 个寄存器字段(位 25-21、20-16、15-11)、一个 SHAMT 字段(位 10-6)和一个 FUNC 字段(位 5-0)。
所有R-Type指令都具有相同的操作码0,它们通过FUNC字段来区分。 ADD 指令的 FUNC 值是 32(在二进制中是 100000——你能在 [=15 的二进制扩展中识别这个值吗? =]指令?)。
22、17和12为寄存器号,分别对应$s6
、$s1
、[=18=的友好汇编名称], 分别.
我有这个作业:
示例中,第三行的 0/32, 22, 16, 12
个数字是多少?
上面为什么PC=4?我认为它应该等于指令的当前位置 = LC?
我在某处读到,对于 BNE 指令,PC 计数器的处理方式不同,因此它是一个字地址。那么 BNE 指令的 PC 列中会出现什么?我知道 4 个字节 = 1 个字,所以如果 BNE 位于 PC=28 个字节,那么它将是 7 个字?但是,它需要返回到 8 字节 = 2 字处的 next
标签...那么该列中的内容是什么?我是否输入 -5 来暗示下一条指令在第 2 个字?
编辑
我已经填好了,但还是卡住了:
我认为他们正在使用 PC 列来指示 下一个 PC 值 在 指令执行后。
对于大多数指令(例如算术和逻辑),下一个 PC 是 LC+4 — 这就是顺序执行的工作方式。
但是,对于条件分支指令,它要么是下一个 PC (LC+4),要么是分支目标地址 (PC+4+immediate*4)。
对于(无条件)跳转指令,下一个 PC 是通过标签计算的地址(j label
或 jal label
)或寄存器中的值(jr $ra
)。
对于 BNE 指令,因为它是一个 条件 分支,那么在抽象中下一个 PC 可能是两个不同值之一,因此,我们需要知道状态——寄存器中的值——在我们可以选择两个可能的下一个 PC 值之一之前,因为我们需要知道条件分支是否被采用。如果被采纳,下一个 PC 是 PC+4+immediate*4
,如果没有被采纳,它就是 PC+4
。如果指定的条件为真(即两个寄存器在位模式上不相等),则取值。
0 / 32、22、17、12 是:
opcode=0 ... 0表示R-Type指令。操作码字段位于第 31-26 位。所以,当这些位都为 0 时,我们就有了 R 型指令。一条 R 型指令有 3 个寄存器字段(位 25-21、20-16、15-11)、一个 SHAMT 字段(位 10-6)和一个 FUNC 字段(位 5-0)。
所有R-Type指令都具有相同的操作码0,它们通过FUNC字段来区分。 ADD 指令的 FUNC 值是 32(在二进制中是 100000——你能在 [=15 的二进制扩展中识别这个值吗? =]指令?)。
22、17和12为寄存器号,分别对应$s6
、$s1
、[=18=的友好汇编名称], 分别.