2017-07-30 86 views
0

我想在LC3中制作2D阵列。到目前为止,我正在考虑使用.BLKW初始化一块内存,然后将其加载到每个条目的另一个数组中。这似乎并不会让我走上正轨。有什么建议么?如何在LC3中制作2D阵列

回答

0

你完全可以用.BLKW和.STRINGZ做到这一点,尽管后者显然有点不同寻常。

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

你最初的想法很酷且有效,但在我看来似乎更加复杂,特别是在LC3中。

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

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

为此,您只需将一个足够小的项目放入LC3的16位内存位置即可。这可能是一个数字,或一个字符。 (大于16位是可行的,但肯定会增加程序的复杂性)。

如果你想要一个完全粗化的样本,你可以在这里找到:http://lc3tutor.org/#array2Dcolordersmp(或者直接去lc3tutor.org并查看二维数组样本)。

如果你想自己学习和尝试,你可以阅读那里的描述,并忽略示例代码(最好如果你做家庭作业,你想确保你学习它)。否则,那里的代码应该在你找到的基于浏览器的lc3模拟器中运行正常。

祝你好运!

杰夫

PS这里的同步码前该代码,如果你只想从这项工作......希望这个例子可以帮助锚的完整代码样本中所采取的山坳主要做法:

.ORIG x3000

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

.STRINGZ“ABCDEFGHIJKLMNOPQRSTUVWZYZ”;有点棘手 - 我们在我们的二维数组中存储一系列字母作为参考。

;上述字符串的地址在x3001,

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

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

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

;我们将假设二维数组有13行和2列。

;每行两个字母和每列13个字母。 26个字母。

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

;我们将把这个数组作为列主存储数组。

;根据我们上面的字符串,这意味着第一个

的单元;列(按照我们的约定,列#0)是:A-M。

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

;如果我们以行主要形式存储阵列,则第一行的单元格,第一行的单元格,将是A,B,并且第二行将是C,D。等等

;像这样:

;

; R \ C | 0 | 1

; ------------

; 0 | A | N

; 1 | B | O

; 2 | C | P

; 3 | D | Q

; 4 | E | R

; 5 | F | S

; 6 | G | T

; 7 | H | U

; 8 |我| V

; 9 | J | W

; 10 | K | X

; 11 | L | Y

; 12 | M | Z

;使得2D_ARRAY [ROW = 8,COL = 1]将是字母“V”