2011-10-28 45 views
0

我想編寫一個將十進制轉換爲二進制的程序。爲此,我會使用一個數組。請看註釋下面的一行,並告訴我,爲什麼它可能無法正常工作,因爲SPIM模擬器說試圖執行非指令mips程序找不到mips/mflo/sw

 .text 
     .globl __start 
    __start: 

     la $a0,prompt 
     li $v0,4 
     syscall 

     li $v0,5 
     syscall 

     move $t1,$v0 

     li $t0,0 
     la $t2,bin 
     #add $t2,$t2,124 
      lop:  
      div $t1,$t1,2 
     mflo $v0 
     sw $v0,($t2) #right here 
     add $t2,$t2,4 
     add $t0,$t0,1 
     ble $t0,32,lop 
     j dnn 

      ads:  
      la $a0,spc 
    li $v0,4 
    syscall 
    j back 

      dnn: 
     la $t0,bin 
     li $t3,1 
     la $a0,pr2 
     li $v0,4 
     syscall 
     add $t0,$t0,124 
      lp2: 
     lw $t1,($t0) 
     sub $t0,$t0,4 
     add $t3,$t3,1 
     move $a0,$t1 
     li $v0,5 
     syscall 
     div $t4,$t3,4 
     mflo $t4 
     ble $t4,0,ads 
      back: 
      ble $t3,33,lp2 

     li $v0,10 
     syscall 

     .data 
      prompt: .asciiz "Enter decimal: " 
      spc: .asciiz " " 
      pr2: .asciiz "\nbinary value:\n" 
      bin: .space 128 

編輯:我做了一些變化,比如現在所有的「添加的是」阿迪的和」 .align僞2' 來之後。數據 也在SPIM模擬器(PCSpim)我注意到一些有趣的事情:

[0x00400020]  0x3c011001 lui $1, 4097 [bin]    ; 15: la $t2,bin 
    [0x00400024]  0x342a0022 ori $10, $1, 34 [bin] 
    [0x00400028]  0x34010002 ori $1, $0, 2     ; 17: div $t1,$t1,2 
    [0x0040002c]  0x0121001a div $9, $1 
    [0x00400030]  0x00004812 mflo $9 
    [0x00400034]  0x00001012 mflo $2       ; 18: mflo $v0 
    [0x00400038]  0xad420000 sw $2, 0($10)     ; 19: sw $v0,($t2) 

爲什麼MFLO做兩次?

+0

它說,如果你將其更改爲同樣的事情'$的sw V0,0($ T2)'? – Ivan

+0

另外,你不應該加addi? – Ivan

+0

這有很多錯誤。請修復其他錯誤,以便我們可以嘗試此操作...並指定您正在使用的模擬器。 – m0skit0

回答