私は文字列の場所を逆にするプログラムに取り組んでいます。私のMIPSプログラムがメモリから値を読み込んでいないのはなぜですか?
しかし、私はいくつかの問題に遭遇しました。
プログラムは、文字列の長さを取得するために文字列を1回ループして動作します。
は一度別のループが、他の値が中に位置していたバイトに保存し、その後一時レジスタの値を保存することで、背面と正面から文字を交換、始まりました。
そして、文字列の先頭のアドレスですインクリメントされ、終了がデクリメントされる。これは、ループ内でインクリメントされる一時レジスタが文字列の長さの半分に等しくなるまで行われます。
しかし何らかの理由で私がプログラムをステップ実行すると、2番目のループの間に文字の値がレジスタに格納されません。
これはどうして私はこれを修正することができます誰もなぜでしょうか?
ありがとうございます。あなたがプログラムをステップ実行すると
.data
msg: .asciiz "Hello World"
nline: .asciiz "\n"
.globl main
.text
#t0 address location
#t1 address location used to increment and find \0
#t2 value stored in addres location of t1
#t3 stores length of string
main:
la $t0,msg #load address location
add $t1,$t0,$zero #loads address location for use in loop
lb $t2,0($t1) #loads value found at address in t1
add $t3,$zero,$zero #set length to 0
len: #increments value that determines length and memory location of current character
addi $t3,$t3,1
add $t0,$t0,1
#add $a0,$zero,$t3
#li $v0,1
#syscall
lb $t2,0($t0)
bne $t2,$zero,len #loops back to len if null character is not found
srl $t4,$t3,1
add $t5,$t0,$zero
add $t6,$t3,$t0
add $t9,$zero,$zero
swap:
lb $t7,0($t5)
lb $t8,0($t6)
sb $t8,0($t6)
sb $t7,0($t5)
addi $t5,$t5,1
sub $t6,$t6,1
addi $t9,$t9,1
bne $t4,$t9,swap
li $v0,10
syscall
うわー、私はそれらのすべてのミスを逃したとは信じられません。 Welp、私はまだ多くのことを学びました。ご協力ありがとうございます。 – user2883202