汇编-MIPS:如何在不使用div.s的情况下修改此程序以将两个浮点数相除?

时间:2018-11-22 01:50:51

标签: assembly mips

我只是Assembly 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的情况下修改该程序以将两个浮点数相除,并且该怎么办? 我只是一个初学者,所以请帮助我! 提前非常感谢您!

0 个答案:

没有答案