2017-06-21 126 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调用,用于十六进制计算。

相关问题