2つの入力を取り込むプログラムを作成しようとしていますが、それらをレジスタに格納してからデータセグメントに格納します。データセグメントにレジスタ値を格納しようとするとMIPSの実行時例外が発生する
.data
val1: .word 1
val2: .word 2
val3: .word 3
.asciiz "Branden"
.asciiz "Enter a number "
.asciiz "\n"
.globl main
.text
main:
addi $s0, $0, 23 # initializes the register $s0 to 23
lui $a0, 0x1001
ori $a0, $a0, 20 #outputs string that is at 20
ori $v0, $0, 4 #command for output
syscall
addi $v0, $0, 5 # asks for input
syscall
addi $s1, $v0, 0 # set the value of $s1 as the given input
lui $a0, 0x1001
ori $a0, $a0, 20 #outputs string that is at 20
ori $v0, $0, 4 #command for output
syscall
addi $v0, $0, 5 #asks for input
syscall
addi $s2, $v0, 0 # set the value of $s2 as the given input
sw $s1, 0($t0) # store the value of $s1 into data segment val1
sw $s2, 4($t0) # store the value of $s2 into data segment val2
ori $v0, $0, 10
syscall
問題は、私はこのエラーを取得しています:Cでエラー:0x0040003cでのランタイム例外:範囲外のアドレス0x00000000の
\ユーザーは、ダニー\ MIPS \のassignment1.asmライン34を\どのような理由でsw $ s1、0($ t0)行にエラーが発生していますか? swと関連付けられたlwが必要ですか?
クラッシュ時にt0レジスタには何が入っていますか?私はあなたがそれを設定しているとは思わない、おそらく0?おそらく正しい答えではないでしょう。 –
val1に格納する正しい形式は何ですか? $ t0にval1を格納するのにlwを使うべきですか? @DavidWohlferd – brandenfam
あなたは 'lui、ori'の束をやっていることに気付きました。擬似操作(例: 'la'、' li')を使用できますか?また、 '.asciiz'文字列のオフセットをハードワイヤリングしています。それぞれには独自のラベルが必要です。例えば、 '.asciiz" Brandenを '' .asciiz "brandenfam" 'に変更すると、あなたのプリント文字列syscallが壊れます。 –