Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays LC-3程序集访问数组值_Arrays_Assembly_Instruction Set_Lc3 - Fatal编程技术网

Arrays LC-3程序集访问数组值

Arrays LC-3程序集访问数组值,arrays,assembly,instruction-set,lc3,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 我需要在主程序中迭代这些值。据我所知,这个“数组”只是存储在远离指令存储位置的内存中的值。我的问题是,“如何加载这些值?”我知道它们从x6000开始,但我不知道如何使用指令来获取它们。最好的方法是阅读并特别注意LDR指令。 下面是一个帮助您开始的示例程序 您需

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

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

我需要在主程序中迭代这些值。据我所知,这个“数组”只是存储在远离指令存储位置的内存中的值。我的问题是,“如何加载这些值?”我知道它们从
x6000开始,但我不知道如何使用指令来获取它们。

最好的方法是阅读并特别注意
LDR
指令。

下面是一个帮助您开始的示例程序

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

循环首先递减
R1
并检查它是否为负值。如果
R1
为负,则循环退出。我们首先递减了长度,所以您可以将“长度”(R1
中的值)作为索引。因此,如果索引<0,则循环退出

LDR R0,R2,0
指令获取寄存器
R2
中地址处偏移量
0
的值,并将其放入
R0
。大概您想对这行之后的数据做些什么

在无条件分支到
循环之前,我们增加数组的地址以指向下一个元素

.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
.orig x3000
LD-R2,阵列;R2=x6000
R1,R1,0;R1=0(添加前清除)
加上R1,R1,10;R1=10(阵列长度)
循环加R1,R1,-1;R1--
BRn完成;如果R1<0,则停止,否则。。。

LDR R0,R2,0;R0最好是阅读并特别注意
LDR
说明。

下面是一个帮助您开始的示例程序

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

循环首先递减
R1
并检查它是否为负值。如果
R1
为负,则循环退出。我们首先递减了长度,所以您可以将“长度”(R1
中的值)作为索引。因此,如果索引<0,则循环退出

LDR R0,R2,0
指令获取寄存器
R2
中地址处偏移量
0
的值,并将其放入
R0
。大概您想对这行之后的数据做些什么

在无条件分支到
循环之前,我们增加数组的地址以指向下一个元素

.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
.orig x3000
LD-R2,阵列;R2=x6000
R1,R1,0;R1=0(添加前清除)
加上R1,R1,10;R1=10(阵列长度)
循环加R1,R1,-1;R1--
BRn完成;如果R1<0,则停止,否则。。。

LDR R0,R2,0;R0您可能需要
LEA
LDR
说明,请参阅。您可能需要
LEA
LDR
说明,请参阅。