2017-07-30 5 views
0

J'essaye de faire un tableau 2D en LC3. Jusqu'à présent, je pense à l'initialisation d'un bloc de mémoire en utilisant .BLKW, puis en chargeant dans un autre tableau dans chaque entrée. Cela ne semble pas me mener sur la bonne voie. Aucune suggestion?Comment faire un tableau 2D en LC3

Répondre

0

Vous pouvez certainement le faire avec .BLKW et aussi avec .STRINGZ, bien que ce dernier est certes un peu inhabituel. La plus grande question habituelle concerne la façon dont vous décidez d'obtenir et de mettre des données dans cette zone spécifique de la mémoire. Il y a plusieurs façons de le faire à coup sûr (pas une bonne réponse).

Vos pensées initiales sont cool et valides, mais me semblent définitivement plus complexes, surtout en LC3. Une forme plus directe de stockage "row major" ou "column major" - où les emplacements mémoire successifs représentent l'entrée suivante dans une rangée (ligne majeure), ou bien l'entrée suivante dans une colonne (colonne major)) - est la façon standard de le faire.

Fondamentalement, vous voulez allouer cette zone de mémoire, puis écrire deux fonctions: une pour mettre un élément à l'emplacement (r, c), et obtenir un élément de l'emplacement (r, c).

Pour cela, vous aurez seulement besoin de mettre un objet suffisamment petit pour tenir dans un emplacement mémoire 16 bits pour LC3. Cela pourrait être un nombre, ou un personnage. (plus grand que 16 bits est faisable mais ajoute plus de complexité pour votre programme à coup sûr).

Si vous voulez un échantillon complètement dégrossi, vous pouvez le trouver ici: http://lc3tutor.org/#array2Dcolordersmp (ou allez simplement sur lc3tutor.org et regardez l'exemple de tableau 2D). Si vous voulez apprendre et essayer par vous-même, vous pouvez simplement lire la description et ignorer l'exemple de code (mieux si vous faites pour les devoirs et vous voulez être sûr que vous l'apprendre). Sinon, le code devrait fonctionner correctement dans le simulateur lc3 basé sur un navigateur que vous trouvez référencé ici.

Bonne chance!

Jeff

PS Voici le pré-amble à ce code, si vous voulez travailler juste de ce ... je espère que cet exemple contribue à ancrer l'approche principale de col prise dans l'échantillon complet de code:

L 'invention concerne:. sauter au-dessus du stockage ci-dessous au début de la section principale

.STRINGZ "ABCDEFGHIJKLMNOPQRSTUVWZYZ"; légèrement délicat - nous stockons une séquence de lettres dans notre tableau 2D pour référence.

; L'adresse de la chaîne ci-dessus commence à x3001,

; que vous verrez est la même que la valeur de l'étiquette 2D_ARRAY ci-dessous.

; Ceci est essentiellement notre 2D_ARRAY, commençant à x3001 et occupant 26 emplacements,

; plus 1 (pour le terminateur null sur la chaîne).

; Nous supposerons que le tableau 2D a 13 lignes et 2 colonnes.

; Deux lettres par rangée et 13 lettres par colonne. 26 lettres.

; Donc, notre étiquette NUM_ROW sera 13 et notre étiquette NUM_COL sera 2. (voir les étiquettes ci-dessous)

; Nous allons traiter ce tableau comme un tableau stocké en colonnes majeures.

; Sur la base de notre chaîne ci-dessus, cela signifie que les cellules du premier

; colonne (colonne # 0 par nos conventions) sont: A-M.

; Et les cellules de la deuxième colonne (colonne # 1) sont: N-Z.

; Si nous stockions le tableau sous forme de ligne majeure, alors les cellules de la première ROW

; serait A, B, et la deuxième ROW serait C, D. Etc.

; Comme ceci:

;

; 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 | Je | V

; 9 | J | W

; 10 | K | X

; 11 | L | Y

; 12 | M | Z

; tel que 2D_ARRAY [ROW = 8, COL = 1] serait la lettre "V"