MIPS Преобразование двоичного в десятичное - PullRequest
0 голосов
/ 14 марта 2019

Я испытываю трудности с загрузкой в ​​"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
...