LC-3装配访问数组值

时间:2016-02-26 19:33:00

标签: arrays assembly instruction-set lc3

我得到了一个数组,定义为:

.orig x6000
.fill -20
.fill 14
.fill 7
.fill 0
.fill -3
.fill 11
.fill 9
.fill -9
.fill 2
.fill -5
.end

我需要在主程序中迭代这些值。据我所知,这是#34;阵列"只是存储在远离指令存储位置的内存中的值。我的问题是,"如何加载这些值?"我知道他们是从x6000开始的,但我不知道如何使用说明找到他们。

1 个答案:

答案 0 :(得分:1)

最好的办法是阅读the LC3 ISA并特别注意LDR指令。

这是一个帮助您入门的示例程序。

您需要知道并跟踪两件事:(1)数组的地址和(2)迭代时数组/索引的长度。对于(1),我选择使用填充值; for(2)数组的长度在指令本身中定义。我AND R1, R1, 0清除注册表并添加10。我们可以很容易地将填充值LENGTH等于10LD R1 LENGTH

循环开始于递减R1并检查它是否为负数。如果R1为负数,则循环退出。我们首先减少长度,因此您可以将“长度”(R1中的值)视为索引。那么,如果索引< 0,然后循环退出。

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