16 位字 lc-3 BR 和 JMP 指令
16 bit word lc-3 BR and JMP instruction
关于 16 位字,我有一个似乎无法弄清楚的问题。下面我附上了相应的代码和想象,它给出了我正在寻求帮助的一些描述。
.orig x3000
ld r1,n
lea r5,data
add r1,r1,#-1
loop:
str r1,r5,0
add r5,r5,r2
add r1,r1,#-1
brp loop
trap x25
data: .blkw 2
n: .fill 10
.end
这是图片
我得到了 nzp 代码,但我不确定如何计算 pcoffset9,所以如果有人能帮助解决这个例子,我将不胜感激。
计算PCOffset的公式如下
ADDRESS_OF_SYMBOL - (INSTRUCTION_ADDRESS + 1)
.orig x3000
LEA R0, HELLO_WORLD ; x3000
PUTS ; x3001
HALT ; x3002
HELLO_WORLD .stringz "HELLO WORLD" ; x3003
.end
所以LEA指令中的PCOffset如下
ADDRESS_HELLO_WORLD - (ADDRESS_LEA + 1)
x3003 - (x3000 + 1) = 2
当执行 LEA 指令时,请记住 PC 已经作为 Fetch 的一部分递增,因此 PC 将位于 x3001。我们将 2 添加到它以获得 x3003 标签 HELLO_WORLD 所在的地址。
关于 16 位字,我有一个似乎无法弄清楚的问题。下面我附上了相应的代码和想象,它给出了我正在寻求帮助的一些描述。
.orig x3000
ld r1,n
lea r5,data
add r1,r1,#-1
loop:
str r1,r5,0
add r5,r5,r2
add r1,r1,#-1
brp loop
trap x25
data: .blkw 2
n: .fill 10
.end
这是图片
我得到了 nzp 代码,但我不确定如何计算 pcoffset9,所以如果有人能帮助解决这个例子,我将不胜感激。
计算PCOffset的公式如下
ADDRESS_OF_SYMBOL - (INSTRUCTION_ADDRESS + 1)
.orig x3000
LEA R0, HELLO_WORLD ; x3000
PUTS ; x3001
HALT ; x3002
HELLO_WORLD .stringz "HELLO WORLD" ; x3003
.end
所以LEA指令中的PCOffset如下
ADDRESS_HELLO_WORLD - (ADDRESS_LEA + 1)
x3003 - (x3000 + 1) = 2
当执行 LEA 指令时,请记住 PC 已经作为 Fetch 的一部分递增,因此 PC 将位于 x3001。我们将 2 添加到它以获得 x3003 标签 HELLO_WORLD 所在的地址。