MIPS int逐字节读取十六进制

MIPS int逐字节读取十六进制,mips,Mips,提示如下: 第一部分 编写一个MIPS汇编语言程序 1.提示用户输入整数(可以是正整数或负整数) 2.将该号码存储在标记为MyNumber的内存位置 3.将该数字逐字节读取到寄存器$t0中,然后以十六进制打印该字节,从低位地址开始,每个字节前面都有一个字符串,以指示字节位置。 例如: B0 0x 0A B1 0x 12 B2 0x 65 B30xBE 我不知道如何将int转换成4个字节,然后再转换成十六进制 这就是我到目前为止所做的: .data prompt: .asciiz "Ent

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

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

我认为应该使用字节偏移量从寄存器加载连续字节。我试图用下面的MIPS代码解决这个问题。这个程序可能并不完美,但我认为它在火星上进行了正确的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 

代码中没有转换为十六进制的内容,将整数传递到一个$t寄存器可能是一个好主意

此外,当它被转换时,也许使用lw而不是la是更好的选择。如果我是你,我会将数字转换成十六进制,然后打印输出,即除以16等

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

我建议创建一个主要由j或jal调用的函数,用于十六进制计算。

您是否尝试过使用偏移量和系统调用34(十六进制写入)的
lb
(加载字节)?