如何在LC3中制作2D阵列

时间:2017-07-30 18:23:31

标签: arrays 2d lc3

我正在尝试在LC3中制作2D数组。到目前为止,我正在考虑使用.BLKW初始化一块内存,然后将另一个数组加载到每个条目中。尽管如此,这似乎并不能引导我走上正轨。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

你绝对可以用.BLKW和.STRINGZ来做,虽然后者无疑是有点不寻常。

更大,通常的问题是你如何决定“获取”并“将”数据放入特定的内存区域。有几种方法可以做到这一点(没有正确答案)。

您最初的想法很酷且有效,但在我看来似乎更复杂,尤其是在LC3中。

更直接的“行主要”或“列主要”存储形式 - 其中连续的内存位置表示行中的下一个条目(行主要),或者列中的下一个条目(列主要)) - 是标准的方法。

基本上你想要分配那个内存区域,然后编写两个函数:一个用于将项目放在位置(r,c),并从位置(r,c)获取一个项目。

为此,您希望只需要放置一个小到足以适合LC3的16位存储器位置的项目。那可能是一个数字或一个角色。 (大于16位是可行的,但肯定会增加程序的复杂性。)

如果你想要一个完全粗糙的样本,你可以在这里找到:http://lc3tutor.org/#array2Dcolordersmp(或者只是去lc3tutor.org查看2D数组样本)。

如果您想学习并自己尝试,可以在那里阅读说明并忽略示例代码(如果您正在做作业而且想要确保学习它,那么最好)。否则,那里的代码应该在你在那里引用的基于浏览器的lc3模拟器中正常运行。

祝你好运!

杰夫

PS这里是该代码的前导码,如果你想从中工作...希望这个例子有助于锚定完整代码示例中采用的col主要方法:

.ORIG x3000

BR MAIN;跳过下面的存储到主要部分的开头

.STRINGZ“ABCDEFGHIJKLMNOPQRSTUVWZYZ”;有点棘手 - 我们在2D数组中存储一系列字母以供参考。

上述字符串的地址为STARTS AT x3001,

您将看到的与下面的2D_ARRAY标签值相同。

这基本上是我们的2D_ARRAY,从x3001开始,占据了26个位置,

加1(对于字符串上的空终止符)。

我们假设2D数组有13行2列。

每行两个字母,每列13个字母。 26封信。

因此,我们的NUM_ROW标签为13,我们的NUM_COL标签为2.(请参阅下面的标签)

我们将此数组视为列主存储数组。

基于我们上面的字符串,这意味着第一个

的单元格

列(我们的约定列#0)是:A-M。

并且第二列(列#1)的单元格是:N-Z。

如果我们以行主要形式存储数组,那么第一个ROW的单元格

将是A,B,第二个ROW将是C,D。等等。

像这样:

; R \ C | 0 | 1

------------

0 | A | Ñ

1 | B | 0

2 | C | P

3 | D | Q

4 | E | [R

5 | F |小号

6 | G | Ť

7 | H | û

8 |我| V

9 | J | w ^

10 | K | X

11 | L | ÿ

12 | M | ž

这样2D_ARRAY [ROW = 8,COL = 1]将是字母“V”