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 所在的地址。