【问题标题】:LC-3 Assembly Accessing Array ValuesLC-3 程序集访问数组值
【发布时间】:2016-02-26 19:33:00
【问题描述】:

给了我一个数组,定义为:

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

我需要在我的主程序中遍历这些值。据我了解,这个“数组”只是存储在远离指令存储位置的内存中的值。我的问题是,“我如何加载这些值?”我知道它们从x6000 开始,但我不知道如何使用说明找到它们。

【问题讨论】:

  • 您可能需要LEALDR 指令,请参阅this example

标签: arrays assembly instruction-set lc3


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多