2017-07-30 50 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」