Сборка - MIPS: Как я могу изменить эту программу, чтобы разделить два числа с плавающей запятой без использования div.s? - PullRequest
0 голосов
/ 22 ноября 2018

Я всего лишь новичок в сборке MIPS.Я попытался написать программу на MIPS, чтобы разделить два целых числа ниже:

#Data segment
    .data
Input1: .asciiz "Dividend (16 bit): "       
Input2: .asciiz "Divisor (8 bit): "     
OutQ:   .asciiz "Quotient (8 bit) = "       
OutR:   .asciiz "Remainder (8 bit) = "      
#Code segment
    .text
    .globl  main
main:   

    la  $a0,Input1
    addi    $v0,$zero,4
    syscall
    addi    $v0,$zero,5
    syscall
    addu    $t2,$zero,$v0
    la  $a0,Input2
    addi    $v0,$zero,4
    syscall
    addi    $v0,$zero,5
    syscall
    addu    $t3,$zero,$v0
#Initiate Q=0, R=divisor, D<<7, Cnt=8
    sll $t3,$t3,7       #create Divisor*(2^7)
    addi    $t0,$zero,0 #Q=0
    addu    $t1,$zero,$t2   #R=divisor
    addi    $t4,$zero,8 #R = R - D
divide0:    sub $t1,$t1,$t3 
#R<0?
    lui $t5,0x8000
    and $t5,$t5,$t1
    beq $t5,$zero,Divide1
# R<0
    add $t1,$t1,$t3 
    sll $t0,$t0,1       #bit_i=0
    b   Divide2
# R>=0
Divide1:    sll $t0,$t0,1       
    ori $t0,$t0,1       #bit_i=1
#Shift Right D
Divide2:    srl $t3,$t3,1       
#n=8 times  
    addi    $t4,$t4,-1
    bne $t4,$zero,divide0
#Print Result
    la  $a0,OutQ
    addi    $v0,$zero,4
    syscall
    addu    $a0,$zero,$t0
    addi    $v0,$zero,1
    syscall
    addu    $a0,$zero,'\n'
    addi    $v0,$zero,11
    syscall
    la  $a0,OutR
    addi    $v0,$zero,4
    syscall
    addu    $a0,$zero,$t1
    addi    $v0,$zero,1
    syscall
#End Program
    ADDI    $v0,$zero,10
    syscall

Интересно, могу ли я изменить эту программу, чтобы разделить два числа с плавающей запятой без использования div.s и как я могу это сделать?Я только начинающий, поэтому, пожалуйста, помогите мне с этим!Заранее большое спасибо!

...