Я написал эту функцию для преобразования значения int в строку ascii. Но когда вводится что-то вроде 315, в строку будет напечатано 31. Поскольку я не эксперт в сборке, любая помощь в этом будет оценена. Вот код: (int_buf — это место, где хранится целочисленный ввод, $a — строковый вывод)
itoa:
la $t0, int_buf # load buf
add $t0, $t0, 30 # seek the end
sb $0, 1($t0) # null-terminated str
li $t1, '0'
sb $t1, ($t0) # init. with ascii 0
li $t3, 10 # preload 10
beq $t8, $0, iend # end if 0
loop:
div $t8, $t3 # a /= 10
mflo $t8
mfhi $t4 # get remainder
add $t4, $t4, $t1 # convert to ASCII digit
sb $t4, ($t0) # store it
sub $t0, $t0, 1 # dec. buf ptr
bne $t8, $0, loop # if not zero, loop
addi $t0, $t0, 1 # adjust buf ptr
iend:
move $a1, $t0 # return the addr.
jr $ra # of the string
РЕДАКТИРОВАТЬ: я обнаружил, что проблема не в функции, а в том, как я потом печатаю строку в файл:
li $v0, 15
move $a0, $s6
move $t8, $s2
jal itoa
li $a2, 4 //problem was only 2 digits selected here!
syscall
Как я могу запретить инструменту печатать пустые символы в моем файле, если я установил по умолчанию 4 цифры?