2017-12-12 10 views
0

MIPSでアセンブラプログラムを作成しようとしていますが、疑似命令なしでforループを使用しようとすると、QtSpimで "レジスタ1はアセンブラ用に予約されていますファイルEのライン16上:。?/ Rechnerorganisation/Qtspim/Rechneruebung Vorgaben/minimum_finden.s SLT $ $ t0の、で、$ A1は#slt(I」誰も私を助けることができるMIPS/QtSpimレジスタ1はアセンブラエラー用に予約されています

findminimum: 
addi $t0, $zero, 1  #int i = 1 
add  $t1, $zero, $zero #beginn vom laden von int min = a[0] 
sll  $t1, $t1, 2 
add  $t1, $a0, $t1 
lw  $t1, 0($t1)   #min = a[0 
for:slt  $at, $t0, $a1  #slt (i<n) # line 16 
beq  $at, $zero, endfor #if(i>=n) go to endfor 
sll  $t2, $t0, 2  
add  $t2, $a0, $t2 
+0

MIPSには他のレジスタがありますので、最も簡単なのは '$ t3'です。 '$ t0'を使い切った場合には' $ at'を使用できるようにアセンブラを用意するだけです。 '$ t9'と他の' $ a'や '$ v'や他のレジスタはありませんあなたは壊れたくあります。 ( '$ at'を使うことで間違っているのではないか、あなたが好奇心を抱いているかどうかを尋ねることができます。) –

答えて

1

一部google group postによると、

.set noat # switch off assembler warning about $at usage 
    ... your code using $1 ... 
    .set at  # switch on assembler warning about $at usage 
によって、を一時的にオフにすることができます

私はMARSがインストールされているだけですが、私はatを悪意のある方法で擬似命令で使用する場所を認識しないため、警告またはエラーなしに悪用することはできません。いつも完全に解体しているので、私は早くそのような問題を捉えるだろう)。

編集:それはspim documentationにも記載されているので、動作するはずです。

+0

ありがとうございました! –

関連する問題