我在MIPS中有一个基本代码是半工作,它接受一个十进制数,并且必须将它转换为2到36的基数,但它有以下问题:
1-使输出编号以正确的顺序显示 2-让它接受负数 3-接受0 4-在10个显示ASCII字符后生成基础
我坚持第4号不知道如何制作它,所以如果有人可以帮我处理这段代码,我会很高兴这是我所做的代码的一部分:
.data
buffer: .space 256
str000: .asciiz "Introduzca un número (n) en base 10: "
str001: .asciiz ": "
str002: .asciiz "n en base "
str003: .asciiz "\n"
.text
# mueve la lÃnea siguiente justo antes de la versión que desees probar
integer_to_string:
integer_to_string_v4:
move $t0, $a2 # char *p = buff
# for (int i = n; i > 0; i = i / base) {
blt $a0, $0, negativo5
move $t1, $a0 # int i = n
volver3:
beqz $t1, B4_9
B4_3: blez $t1, B4_7 # si i <= 0 salta el bucle
div $t1, $a1 # i / base
mflo $t1 # i = i / base
mfhi $t2 # d = i % base
bge $t2, 10, B4_10
addiu $t2, $t2, 48 # d + '0'
sb $t2, 0($t0) # *p = $t2
addiu $t0, $t0, 1 # ++p
j B4_3 # sigue el bucle
# }
B4_10:
addiu $t2, $0, 55
sb $t2, 0($t0)
addiu $t0, $t0, 1
j B4_3
B4_9:
li $v0, 1
syscall
B4_7: blt $a0, $0, negativo6
B4_8: sb $zero, 0($t0) # *p = '\0'
move $t3, $a2
subi $t0,$t0,1
vuelta4:
bge $t3,$t0,fin_bucle4
lb $t7, 0($t3)
lb $t8, 0($t0)
sb $t7, 0($t0)
sb $t8, 0($t3)
addi $t3,$t3,1
subi $t0,$t0,1
j vuelta4
fin_bucle4: jr $ra
negativo5:
abs $t1, $a0
j volver3
negativo6:
addi $t4, $0, '-'
sb $t4, 0($t0)
addiu $t0, $t0, 1
j B4_8
# Imprime el número recibido en base 10 seguido de un salto de linea
test1: # $a0 = n
addiu $sp, $sp, -4
sw $ra, 0($sp)
li $a1, 10
la $a2, buffer
jal integer_to_string # integer_to_string(n, 10, buffer);
la $a0, buffer
jal print_string # print_string(buffer);
la $a0, str003
jal print_string # print_string("\n");
lw $ra, 0($sp)
addiu $sp, $sp, 4
jr $ra
# Imprime el número recibido en todas las bases entre 2 y 36
test2: # $a0 = n
addiu $sp, $sp, -12
sw $ra, 8($sp)
sw $s1, 4($sp)
sw $s0, 0($sp)
move $s0, $a0 # n
# for (int b = 2; b <= 36; ++b) {
li $s1, 2 # b = 2
B6_1: la $a0, str002
jal print_string # print_string("n en base ")
move $a0, $s1
li $a1, 10
la $a2, buffer
jal integer_to_string # integer_to_string(b, 10, buffer)
la $a0, buffer
jal print_string # print_string(buffer)
la $a0, str001
jal print_string # print_string(": ");
move $a0, $s0
move $a1, $s1
la $a2, buffer
jal integer_to_string # integer_to_string(n, b, buffer);
la $a0, buffer
jal print_string # print_string(buffer)
la $a0, str003
jal print_string # print_string("\n")
addiu $s1, $s1, 1 # ++b
li $t0, 36
ble $s1, $t0, B6_1 # sigue el bucle si b <= 36
# }
lw $s0, 0($sp)
lw $s1, 4($sp)
lw $ra, 8($sp)
addiu $sp, $sp, 12
jr $ra
.globl main
main:
addiu $sp, $sp, -8
sw $ra, 4($sp)
sw $s0, 0($sp)
la $a0, str000
jal print_string # print_string("Introduzca un número (n) en base 10: ")
jal read_integer
move $s0, $v0 # int n = read_integer()
move $a0, $s0
jal test1 # test1(n)
move $a0, $s0
jal test2 # test2(n)
li $a0, 0
jal mips_exit # mips_exit(0)
li $v0, 0
lw $s0, 0($sp)
lw $ra, 4($sp)
addiu $sp, $sp, 8
jr $ra
read_integer:
li $v0, 5
syscall
jr $ra
print_string:
li $v0, 4
syscall
jr $ra
mips_exit:
li $v0, 17
syscall
jr $ra