• MIPS——无符号除法


    用MIPS实现divu,被除数$a0,除数$a1,商$v0,余数$v1,具体细节已写在注释。如有错误请指正。

    .data
        error:
             .ascii "The divisor can't not be zero!"   #若除数为0则报错
        space:
             .ascii " "          #空格,输出时将商和余数分开
    .text
    main:
        li $v0 5                 #输入被除数$a0 同时作为余数
        syscall
        addu $a0 $v0 $0
        li $v0 5                 #输入除数$a1,并且除数开始放在高32位
        syscall
        addu $a1 $v0 $0
        beq  $a1 0  print_error  #若除数为0则报错               
        li $s0 0                 #$s0存储除数的低32位
        li $t2 0                 #$t2记录过程执行次数
        li $v0 0                 #$v0存储商
    divv:
        slti $t1 $a1 1           #判断除数的高32位是否为0 若不为0被除数必定小于除数 直接进入移位部分           
        beq $t1 0 shift          
        sleu $t1 $s0 $a0         #判断除数是否大于余数 若大于直接进入移位部分            
        beq $t1 0 shift          
        sub $a0 $a0 $s0          #余数不小于除数 余数=余数-除数
    shift:                       
        sll $v0 $v0 1            #商左移一位
        add $v0 $v0 $t1          #根据上面的判断情况对最后一位置位:若余数大于除数置1 否则置0
        andi $t1 $a1 1           #$t1取除数的高32位的最后一位
        srl $a1 $a1 1            #除数的高32位右移一位
        srl $s0 $s0 1            #除数的低32位右移一位
        sll $t1 $t1 31           #$t1左移31位
        or $s0 $s0 $t1           #将除数的低32位与$t1取或 这样便能将原先高32位最后一位成功右移到低32位
        addi $t2 $t2 1           #计数器加1
        slti $t1 $t2 33          #判断执行次数是否达到33次 若未达到进入下一次循环
        bne $t1 0  divv
    print:
        move $v1 $a0             #将余数存储到$v1
        move $a0 $v0             #打印商
        li  $v0 1
        syscall
        la  $a0 space
        li  $v0 4
        syscall
        move $a0 $v1             #打印余数
        li  $v0 1
        syscall
        j exit
    print_error:                 #打印错误信息
        la  $a0 error
        li  $v0 4
        syscall
    exit:                        #退出程序
        li  $v0 10
        syscall
       
  • 相关阅读:
    工具网页地址
    invalid comparison: java.util.ArrayList and java.lang.String——bug解决办法
    打印csdn博客文章内容
    git 更新远程分支列表
    idea 配置 SpringBoot 热启动详解,和热启动失效解决方案
    MacOS下安装RabbitMQ
    Spring Boot Admin
    Navicat Premium Mac 12 破解
    sql查询不重复数据
    org.apache.commons.lang3 jar的使用 ArrayUtils
  • 原文地址:https://www.cnblogs.com/yanying7/p/13916338.html
Copyright © 2020-2023  润新知