Я испытываю трудности с загрузкой в "binary_digit", который в двоичном коде 113, в мой код MIPS и преобразованием его в десятичную. Вместо этого мой код запрашивает ввод пользователя, который я не хочу. Я пытаюсь, чтобы он автоматически конвертировал «binary_digit» в 113, не запрашивая пользовательский ввод, когда я собираю и запускаю его. Ниже мой код, любая помощь приветствуется. Он прекрасно конвертирует 01110001 в 113, но только когда пользователь вводит его. Мне просто нужно, чтобы он прочитал «binary_digit» и преобразовал его автоматически
.data
binary_digit:
.word 0 1 1 1 0 0 0 1 # is 113 in decimal
msg1:
.asciiz "\nResult: "
empty:
.space 16
sum:
.space 16
.text
.globl main
main:
getNum:
la $a0,binary_digit #"Please insert value (A > 0) : "
la $a0, empty
li $a1, 16 # load 16 as max length to read into $a1
li $v0,8 # 8 is string system call
syscall
la $a0, empty
li $v0, 4 # print string
syscall
li $t4, 0 # initialize sum to 0
startConvert:
la $t1, empty
li $t9, 16 # initialize counter to 16
firstByte:
lb $a0, ($t1) # load the first byte
blt $a0, 48, printSum # I don't think this line works
addi $t1, $t1, 1 # increment offset
subi $a0, $a0, 48 # subtract 48 to convert to int value
subi $t9, $t9, 1 # decrement counter
beq $a0, 0, isZero
beq $a0, 1, isOne
j convert #
isZero:
j firstByte
isOne: # do 2^counter
li $t8, 1 # load 1
sllv $t5, $t8, $t9 # shift left by counter = 1 * 2^counter, store in $t5
add $t4, $t4, $t5 # add sum to previous sum
move $a0, $t4 # load sum
li $v0, 1 # print int
syscall
j firstByte
convert:
printSum:
srlv $t4, $t4, $t9
la $a0, msg1
li $v0, 4
syscall
move $a0, $t4 # load sum
li $v0, 1 # print int
syscall
exit:
li $v0, 10 # exit system call
syscall