如何计算加载地址为x3100的R1的偏移量



这是我的代码。程序要求用户输入一个数字并存储在R3中。然后,它将该数字与存储在存储器位置x3101-x3105中的其他5个数字进行检查。(数字为2,2,4,4(

我相信我的问题在于我的第二行"LD R1、x0030">
我知道x0030是不正确的,我只是在玩它。我正试图让它用x3100加载R1,这样它就可以稍后移动到3101、3102,依此类推。

到目前为止的代码:

.ORIG   x3000       ;0011 0000 0000 0000 ?

AND R5, R5, #0
LD R1, x0030
TRAP x23
LDR R4, R1, #0
ADD R2, R4, #-5
BRz #8
NOT R4, R4
ADD R4, R4, #1
ADD R4, R4, R3
BRnp #1
ADD R5, R5, #1
ADD R1, R1, #1
LDR R4, R1, #0
BRnzp #-10
LD R3, #5
ADD R3, R3, R5
TRAP x21
TRAP x25
.FILL x3100

.END

.ORIG x3100
.FILL  x0005      ; iteration number
.FILL  x0032      ; number 2
.FILL  x0032
.FILL  x0034      ; number 4
.FILL  x0034
.FILL  x0034
.END

为常量使用标签:

LD R1, myLabel
...
...
myLabel .FILL x3100

如果你使用这种方法,并(通过汇编程序运行它,然后(将其加载到模拟器中,你将能够看到机器代码指令(x2210(,它具有达到.FILL x3100所需的PCOffset9值。如果你愿意,你可以将代码更改为适当的偏移量(这里是x10,也就是#16(,但它比使用标签更脆弱,所以如果你进行后续更改,偏移可以改变。

让汇编程序为您计算:

LEA R1, mylabel
...
...
.ORIG xVVVV    ;(whatever value you want)
mylabel .FILL  x0005 
.FILL  x0032      ; number 2
...

地址使用的文字值越少,代码就越健壮。

最新更新