[解決済み] ループ内で配列の個々の要素にアクセスするにはどうしたらよいですか?
2022-02-19 16:55:55
質問内容
私は配列のセルを印刷する必要があります、私は単語"HELLO_WORLD"を含む配列を持っています、私はそれ自体によってインデックスを印刷することを管理しますが、私は一つずつすべてのセルを印刷することを管理できません、ここにコードがあります:
loop:
la $t0, hexdigits # address of the first element
lb $a0, 5($t0) # hexdigits[10] (which is 'A')
li $v0, 11 #system call service
syscall
addi $a0, $a0, 2
li $v0, 11 # I will assume syscall 11 is printchar (most simulators support it)
syscall # issue a system call
j end
lb $a0, $s0($t0) という命令を、数字だけでなく、いつでもインクリメントできるレジスタで使う方法はないでしょうか?
どのように解決するのですか?
の各要素にアクセスするには
array
というように使うことができます。
la $t3, array # put address of array into $t3
arrayがバイト配列の場合、みたいな。
array: .byte 'H','E','L','L','O'
にアクセスして、i th 要素を使用します。
lb $a0, i($t3) # this load the byte at address that is (i+$t3)
というのは、各要素は1バイトなので、i にアクセスするには
th
バイトのアドレスにアクセスします。
i
のアドレスへのオフセット
array
.
としてアクセスすることもできます。
addi $t1,$t3,i
lb $a0,0($t1)
arrayがワード配列の場合、みたいな。
array: .word 1,2,3,4,5,6,7,8,9
にアクセスして、i th 要素を使用します。
lw $a0, j($t3) #j=4*i, you will have to write j manually
というのは、各要素は4バイトで、iにアクセスするために
th
要素に移動する必要があります。
i*4
の開始アドレスから1バイト
array
.
その他にも、いくつかのアクセス方法があります。
li $t2, i # put the index in $t2
add $t2, $t2, $t2 # double the index
add $t2, $t2, $t2 # double the index again (now 4x)
add $t1, $t3, $t2 # get address of ith location
lw $a0, 0($t1)
例1:
.data
array: .byte 'H','E','L','L','O','_','W','O','R','L','D'
string: .asciiz "HELLO_WORLD"
size: .word 11
array1: .word 1,2,3,4,0,6,7,8,9
.text
.globl main
main:
li $v0, 11
la $a2,array
lb $a0,0($a2) #access 1st element of array or array[0]
syscall
lb $a0,1($a2) #access 2nd element of byte array or array[1]
syscall
lb $a0,2($a2) #access 3rd element of byte array or array[2]
syscall
lb $a0,10($a2) #access 11th element of byte array or array[10]
syscall
li $a0,10
syscall
syscall
li $v0,1
la $a3,array1
lw $a0,0($a3) #access 1st element of word array or array[0]
syscall
lw $a0,4($a3) #access 2nd element of word array or array[1]
syscall
lw $a0,8($a3) #access 3rd element of word array or array[2]
syscall
lw $a0,12($a3) #access 4th element of word array or array[3]
syscall
jr $ra
例 バイト配列を表示します。
li $v0, 11
la $a2,array
lw $t0,size
loop1: #print array
lb $a0, 0($a2) #load byte at address stored in $a2
syscall
add $t0,$t0,-1
add $a2,$a2,1 #go to the next byte, since it is a byte array it will go to the address of next element
#to use it for printing word array instead of adding 1 add 4
bgtz $t0, loop1
関連
-
[解決済み】テスト %eax %eax のポイント【重複あり
-
[解決済み】アセンブリJLEのjmp命令例
-
[解決済み] MIPSの大、小、大
-
[解決済み] エラーです。操作サイズが指定されていません - NASm
-
[解決済み] MIPSのコードのこの部分で、oriはどのように使われているのですか?
-
[解決済み] アセンブリ言語で数字をプリントアウトする?
-
[解決済み] x86 8086 アセンブリで 0-9 の範囲の乱数を生成する。
-
ファイルまたはアセンブリを読み込めませんでした ... 不正なフォーマットでプログラムをロードしようとしました。
-
[解決済み] この状況でのlwとbneは何を意味するのか?
-
[解決済み】マルチコアアセンブラとはどのようなものですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] error A2022: 命令オペランドは同じサイズでなければなりません。
-
[解決済み] アセンブリ言語 - Moduloはどのように行うのですか?
-
[解決済み] 018Hと0cHは、アセンブリでは何の略ですか?具体的には「cH」と「0」「h」のプリフィックス/ポストフィックス
-
[解決済み] DOSBox - このプログラムはDOSモードでは実行できません (アセンブリ)
-
[解決済み] MIPS分岐実行順序(beqz)
-
[解決済み] なぜSet on Less ThanはALU演算なのか?
-
[解決済み] ARMはSDIVとUDIVを区別していますが、ADD、SUB、MULでは区別していないのはなぜですか?
-
[解決済み] movsbl 命令は何をするのですか?重複
-
[解決済み] x86アセンブリの角括弧の意味は何ですか?
-
[解決済み] インテルアセンブリの%ripレジスタを理解する