[解決済み] アセンブリMIPS。配列の初期化および合計
2022-02-17 12:31:36
質問内容
例えば、10個の数値の配列があり、それらの数値を合計してこのような変数にしたいとします。
int arr[10]= {1, 15, 0, -3, 99, 48, -17, -9, 20, 15};
sum = 0;
for(i=0; i<10; i++)
sum = sum + arr[i];
これを "assembly mips" しようとすると、ある行が消えてしまいます。
.data
arr: .word 1, 12, 0, -3, 99, 48, -17, -9, 20, 15
.text
.globl main
main:
add $t0, $zero, $zero #counter i
add $t1, $zero, $zero #sum
la $t2, arr #loading the address of the array to a register
loop:
slti $t3, $t0, 10 #i<10
beq $t3, $zero, EXIT
add $t1, $t1, $t2($t0) #wrong wrong very wrong
addi $t0, $t0, 1 #i++
j loop
EXIT:
li $v0, 10
syscall
アセンブリへのポイント "arr[i]" をどのように表現するのかが理解できません。
どのような表現が正しいのでしょうか?
配列の番号ごとに別のレジストリを取らなければならないのでしょうか?
どのように解決するのですか?
上からのJesterさんのおかげで、正しいコードは以下の通りです。
.data
arr: .word 1, 12, 0, -3, 99, 48, -17, -9, 20, 15
.text
.globl main
main:
add $t0, $zero, $zero #counter i
add $t1, $zero, $zero #sum
la $t2, arr
loop:
slti $t3, $t0, 10 #i<10
beq $t3, $zero, EXIT
lw $t4, ($t2) #$t4 = arr[i]
addi $t2, $t2, 4
add $t1, $t1, $t4 #sum = sum + arr[i]
addi $t0, $t0, 1 #i++
j loop
EXIT:
add $a0, $zero, $t1 #moving the sum to $a0 register for printing
li $v0, 1
syscall
li $v0, 10
syscall
関連
-
[解決済み] 着信側セーブレジスタ、発信側セーブレジスタとは何ですか?
-
[解決済み] ARMのアセンブリ言語でbx lrは何をするのですか?
-
[解決済み] CPUのParity Flagは何のためにあるのですか?
-
[解決済み] 配列のループ処理 MIPSアセンブリ
-
[解決済み] 8086アセンブリ言語での2つのレジスタのスワッピング(16ビット)
-
[解決済み] error: invalid effective address エラー:有効なアドレスがありません。
-
[解決済み] movsbl 命令は何をするのですか?重複
-
[解決済み] アセンブリ言語 - sarqはコードの中で何をするのですか?
-
[解決済み] x86アセンブリでレジスタに使用されるpush/pop命令の機能は何ですか?
-
[解決済み] MIPSの擬似命令 "move "の "addi "と "add "の違い?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】なぜMIPS用のsubiオペコードは存在しないのですか?
-
[解決済み] テスト
-
[解決済み] MIPs Assemblyでsllなどを使ってビットをずらすのはなぜですか?
-
[解決済み] 着信側セーブレジスタ、発信側セーブレジスタとは何ですか?
-
[解決済み] アセンブリ - CMP後のJG/JNLE/JL/JNGE
-
[解決済み] CPUのParity Flagは何のためにあるのですか?
-
[解決済み] x86 8086 アセンブリで 0-9 の範囲の乱数を生成する。
-
[解決済み] アセンブリのNEG
-
[解決済み] MIPS浮動小数点:SWC1対S.S.
-
[解決済み] テストのポイント %eax %eax [重複]。