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
说明,请参阅。