0

main の 1 行目からコード内の R、I、J 命令の数をカウントすることになっています。コードをすべての提案に更新しましたが、結果はまだ正しくないようです。:(

編集:これらの構文の変更を追加しました。変数はより適切に機能しているように見えますが、ループ自体はまったく適切に実行されていないようです。誰もが目にする顕著な問題はありますか?

EDIT2: $t1 が一度に 1 つの命令セットを循環するようにループを変更するにはどうすればよいですか? それは、新しい mips ユーザーからのばかげた構文を除いて、現在の私の重要な問題です。

EDIT3:コードをすべての提案に更新しましたが、結果はまだ正しくないようです。:(

.text    
Main:    
la $t1, 0x400000    
li $t5, 0    
li $t3, 2    
li $t4, 3    
li $t2, 0    
la $s0, 0x400000 

loop:    
lw $t1, 0($s0)    
addi $s0, 4    
addi $t5, 1     
beq $t5, 20 exit    
srl $s4, $t1, 26    
beq $s4, $t2 R    
beq $s4, $t3 J    
beq $s4, $t4 J    
addi $s3, 1    
j loop    

R:
addi $s1, 1    
j loop      

J:    
addi $s2, 1    
j loop     

exit:    
sw $s1, RType    
sw $s2, JType    
sw $s3, IType    
jr $ra
4

2 に答える 2

0

Miguel のポイントに加えて、命令セットを奇妙な方法で使用していることを付け加えたいと思います。おそらく、あなたのアセンブラーはあなたの意図を理解することができますが、それでもコードが読みにくくなります。

lw $t3, 2
lw $t4, 3

これらは である必要がありますli。このlw命令は、メモリからワードをロードするために使用されます。


la $t0, 4($t1)

これは である必要がありlw、アドレス 0x400004 から始まる命令のみを確認したい場合を除き、オフセットを削除する必要があります。

また、インクリメントする場所がどこにも見つからないように見えるため$t1、ループの反復ごとに同じアドレスを使用することになります。

于 2013-05-02T06:52:05.837 に答える