最好的办法是阅读the LC3 ISA 并特别注意LDR 指令。
这是一个帮助您入门的示例程序。
您需要知道并跟踪两件事:(1) 数组的地址和 (2) 迭代时数组/索引的长度。对于(1),我选择使用填充值;对于 (2) 数组的长度在指令本身中定义。我AND R1, R1, 0 清除寄存器并添加10。我们可以很容易地将填充值 LENGTH 等于 10 和 LD R1 LENGTH。
循环开始于递减R1 并检查它是否为负数。如果R1 为负数,则循环退出。我们首先减少了长度,因此您可以将“长度”(R1 中的值)视为一个索引。因此,如果索引
LDR R0, R2, 0 指令获取寄存器R2 中偏移0 的地址的值并将其放入R0。大概你想对这一行之后的数据做一些事情。
在无条件跳转到LOOP之前,我们将数组的地址递增以指向下一个元素。
.orig x3000
LD R2, ARRAY ; R2 = x6000
AND R1, R1, 0 ; R1 = 0 (clear before add)
ADD R1, R1, 10 ; R1 = 10 (length of array)
LOOP ADD R1, R1, -1 ; R1--
BRn DONE ; if R1 < 0 then halt, else...
LDR R0, R2, 0 ; R0 <-- mem[R2 + 0]
ADD R2, R2, 1 ; R2++
BR LOOP ; loop
DONE HALT ; halt
ARRAY .fill x6000
.orig x6000
.fill -20
.fill 14
.fill 7
.fill 0
.fill -3
.fill 11
.fill 9
.fill -9
.fill 2
.fill -5
.end