2017-12-12 24 views
0

MIPS에서 어셈블러 프로그램을 작성하려고하는데 pseudoinstructions없이 for 루프를 사용하려고하면 QtSpim에서 "레지스터 1이 어셈블러 용으로 예약되었습니다 시/Rechnerorganisation이/Qtspim가/Rechneruebung Vorgaben/minimum_finden.s SLT의 $, $ t0의, $의 A1의 #slt (내가 "누구든지 나를 도울 수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' 또는 다른 레지스터가 없습니다 너는 clobber 싶다. ('$ at'을 사용하거나 호기심이 있는지 물어 보는 것은 잘못된 것이 아닙니다.) –

답변

1

일부 google group post에 따르면.? 파일 E 라인 16

.set noat # switch off assembler warning about $at usage 
    ... your code using $1 ... 
    .set at  # switch on assembler warning about $at usage 
으로 at을 일시적으로 해제 할 수 있습니다.

자신을 확인하지 못했습니다. 설치 한 MARS가 있습니다. 경고 나 오류없이 악의적 인 시도없이 at을 사용할 수 있습니다. 항상 완전한 분해와 함께, 나는 그런 문제를 일찍 붙잡을 것이다).

편집 : 또한 spim documentation에 언급되었으므로 작동해야합니다.

+0

고마워요! –