MIPS int逐字节读取到十六进制

时间:2017-06-21 03:47:21

标签: mips

这是提示: 第一部分 编写MIPS汇编语言程序 1.提示用户输入整数(可以是正数或负数) 2.将该号码存储在标记为MyNumber的存储位置 3.将该数字逐字节读入寄存器$ t0,然后从低位开始以十六进制打印该字节,每个字节前面都有一个字符串以指示字节位置。 例如: B0 0x 0A B1 0x 12 B2 0x 65 B3 0xBE

我不知道如何将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

2 个答案:

答案 0 :(得分: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 

答案 1 :(得分:0)

您的代码中没有任何内容可以转换为十六进制,也可以将整数传递给其中一个$ t寄存器。

同样在转换时可能使用lw而不是la是一个更好的举动。如果我是你,我会将数字转换为十六进制数学然后打印输出,即除以16等。

基本上你会使用相同的寄存器,例如$ t3​​做数学运算。那么你可以用sw来保存十六进制。然后你可以将它打印到屏幕上。

我建议创建一个函数,在j或jal用于十六进制计算时,在main中调用。