2017-06-21 91 views
1

這是提示: 第I部分 寫MIPS彙編語言程序來 1提示的整數用戶(可能是正的或負的) 2.存儲該號碼在標記爲MyNumber的存儲器位置 3.將該數字逐字節讀入寄存器$ t0,然後從低位地址開始以十六進制打印該字節,每個字節前面都有一個字符串以指示字節位置。 例如: B0 0X 0A B1 0X 12 B2 0X 65 B3 0xBEMIPS的int由字節讀字節爲十六進制

我在如何處理一個int轉化爲它的4個字節,然後轉換到那些十六進制的損失。

這是我到目前爲止有:

.data 
prompt:  .asciiz "Enter an integer (positive or negative): " 
MyNumber:  .word 0 
output:   .word 0 
space:   .space 20 

.text 
main: 
    addi $v0, $zero, 4 #code 4 is to print string 
    la $a0, prompt  #loads string into register 
    syscall 

    addi $v0, $zero, 5 #code 5 is to read an integer 
    syscall 

    sw $v0, MyNumber  #stores value from $v0 to input 

    la $t1, MyNumber 
+0

您是否嘗試過帶偏移量和系統調用34(寫入十六進制)的'lb'(加載字節)? –

回答

1

我認爲你應該使用字節偏移寄存器加載連續字節。我試圖用下面的MIPS代碼解決這個問題。這個程序可能並不完美,但我認爲它使得MARS成爲正確的I/O。

.data 
prompt:  .asciiz "Enter an integer (positive or negative): " 
s1:  .asciiz "B1: 
s2:  .asciiz " B2: 
s3:  .asciiz " B3: 
s4:  .asciiz " B4: 
MyNumber:  .word 0 
output:   .word 0 
space:   .space 20 

.text 
main: 
    addi $v0, $zero, 4 #code 4 is to print string 
    la $a0, prompt  #loads string into register 
    syscall 

    addi $v0, $zero, 5 #code 5 is to read an integer 
    syscall 

    sw $v0, MyNumber  #stores value from $v0 to input 

    addi $v0, $zero, 4 #code 4 is to print string 
    la $a0, s1  #loads string into register 
    syscall 

    la $t1, MyNumber 
    lb $a0, 0($t1) 
    lb $t0, MyNumber 
    addi $v0, $zero, 34 
    syscall 

    addi $v0, $zero, 4 #code 4 is to print string 
    la $a0, s2  #loads string into register 
    syscall 

    lb $a0, 1($t1) 
    addi $v0, $zero, 34 #print in hexadecimal 
    syscall 

    addi $v0, $zero, 4 #code 4 is to print string 
    la $a0, s3  #loads string into register 
    syscall 

    lb $a0, 2($t1) 
    addi $v0, $zero, 34 
    syscall 

    addi $v0, $zero, 4 #code 4 is to print string 
    la $a0, s4  #loads string into register 
    syscall 


    lb $a0, 3($t1) 
    addi $v0, $zero, 34 
    syscall 
0

有沒有在你的代碼轉換爲十六進制也可能轉嫁到$ T寄存器中的一個整數一個好主意。

此外,當它轉換時,也許使用lw而不是la是更好的舉措。如果我是你,我會把數字轉換成十六進制數學然後打印輸出,即除以16等

所以基本上你會使用相同的寄存器,例如$ t3​​做數學運算。那麼你可以用sw來保存十六進制。然後你可以將它打印到屏幕上。

我會建議創建一個函數,該函數被j或jal調用,用於十六進制計算。