这是提示: 第一部分 编写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
答案 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中调用。