2017-07-30 22 views
0

私はLC3で2D配列を作成しようとしています。これまで私は、.BLKWを使ってメモリのブロックを初期化し、その別の配列を各エントリにロードすることを考えていました。しかし、それは正しい軌道に私を導くようには思われません。助言がありますか?LC3で2D配列を作成する方法

答えて

0

確かに.BLKWでも.STRINGZでも可能ですが、後者は少し珍しいですが。

通常より大きな問題は、メモリの特定の領域にデータを「取得」し「入れる」ということです。これを行うにはいくつかの方法があります(正解はありません)。

あなたの最初の考えはクールで有効ですが、特にLC3ではもっと複雑に思えます。

連続したメモリ位置が行(行のメジャー)内の次のエントリを表す、より直接的な「行メジャー」または「コラムメジャー」形式、または列(メジャー列)の次のエントリ)これを行う標準的な方法です。

基本的には、そのメモリ領域を割り当て、2つの関数、1つはアイテムを場所(r、c)に置き、1つは場所(r、c)からアイテムを取得します。

このためには、LC3の16ビットメモリ上に収まるサイズのアイテムを置くだけでよいでしょう。それは数字でも文字でも可能です。 (16ビットより大きい値は実行可能ですが、プログラムの複雑さが増します)。

完全に荒れたサンプルが必要な場合は、http://lc3tutor.org/#array2Dcolordersmp(または単にlc3tutor.orgに行き、2D配列のサンプルを参照してください)をご覧ください。

これを自分で学習したい場合は、その説明を読んで、サンプルコードを無視してください(宿題をしていて、学習していることを確認したい場合に最適です)。それ以外の場合は、そこに参照されているブラウザベースのlc3シミュレータで正常に動作するはずです。

幸運を祈る!

ジェフ

PSは、ここでは、ちょうどこのことから仕事をしたい場合は...うまくいけば、この例では、完全なコードサンプルで取らCOL主要なアプローチをアンカーに役立ちます、そのコードにプリアンブルです:

.ORIG x3000

BR MAIN;下のストレージをメインセクションの先頭にジャンプする

.STRINGZ "ABCDEFGHIJKLMNOPQRSTUVWZYZ";ややこしい - 私たちは参照のために私たちの2D配列に一連の文字を保存しています。

;上記の文字列のアドレスは、x3001で始まり、xxxxxは

です。下の2D_ARRAYラベルの値と同じです。

;これは本質的に2D_ARRAYで、x3001から始まり26の場所を占めています。

;プラス1(文字列のNULLターミネータの場合)。

; 2D配列には13行と2列があるものとします。

; 1行に2文字、1列に13文字。 26文字

;したがって、NUM_ROWラベルは13、NUM_COLラベルは2になります(下のラベルを参照)。

;この配列は、カラムメジャーに格納された配列として扱います。

;上記の文字列に基づいて、それは最初のセルを意味します。

;列(我々の規則では列番号0)は、A-Mである。

;第2列(列#1)のセルは、N-Zである。

;配列を行主形式で格納していた場合、最初の行のセル

; A、Bとなり、2番目のROWはC、Dとなります。その他

;このように:

;

; R \ C | 0 | 1

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

; 0 | | 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」となるようにする。

関連する問題