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

Я пытаюсь преобразовать десятичное число в двоичное с помощью языка ассемблера MIPS. Я только начал изучать MIPS сегодня, так что я едва понял эти понятия. Я пытаюсь реализовать это с помощью массивов, но я все еще не уверен, что положить в sw и lw. Кроме того, я пытаюсь поместить числа в массив и напечатать его в обратном порядке, поскольку он является двоичным. Вот что я пробовал до сих пор. Более чем добро пожаловать комментировать или помочь. Большое спасибо.

        .data
enter:  .asciiz "Enter an integer: "
ipnum:  .asciiz "Input number is "
Bin:    .asciiz "Binary: "
Qtr:    .asciiz "Quaternary: "
Oct:    .asciiz "Octal:"
new:    .asciiz "\n"
list:   .space 128

    .text
    .globl main

main:
    la $a0, enter  #load address into $a0
    li $v0, 4      #call to print string
    syscall

    li $v0, 5       #read integer
    syscall
    move $t0, $v0   #inter stored in $t0

    la $a0, new      #print two new lines
    li $v0, 4
    syscall

    la $a0, new
    li $v0, 4
    syscall



    la $a0, ipnum    #print the string
    li $v0, 4
    syscall

    li $v0, 1       #print the input number
    move $a0, $t0
    syscall

    la $a0, new      #print two new lines
    li $v0, 4
    syscall

    la $a0, new
    li $v0, 4
    syscall

    la $a0, Bin    #print "Binary:"
    li $v0, 4
    syscall

binary:
    li $s0, 0      #index i

    li $t1, 2      #assign 2 into t1
    div $t0, $t1   #
    mfhi $t2       #set remainder as t2

    sw $t2, 0($s0) #save remiander to the ith index of array

    mflo $t0       #input number now become quotient

    addi $s0, $s0, 4 #i = i+4, since dealing with integer

    beq $t0, $zero, print

    j binary

#print backwards from the last indext of the array

print:
    beq $a1, -4, exit #if finished printing until list[0]

    li $a1, 128     #set $a1 as 128 to print last index of myArray

    lw $t3, list($a1)

    li $v0 1        #print out the number
    move $a0, $t3
    syscall

    addi $a1, $a1, -4 #i = i-4


    j print

exit:
    li $v0, 10
    syscall
...