【MIPS编程】高精度整数除法
2010-10-05 00:41
351 查看
高精度整数除法(MIPS汇编)
http://blog.csdn.net/masm32v9/archive/2010/02/27/5331042.aspx以下在SPIM下调试成功:
.data
title: .asciiz "/t/t高精度除法演示程序/n"
tip1: .asciiz "/n请输入被除数:"
tip2: .asciiz "请输入除数:"
tip3: .asciiz "要输出小数点后多少位:"
tip4: .asciiz "/n是否继续?(y/n)"
err: .asciiz "/n除数不能为0,请重新输入/n"
dot: .asciiz "."
sign: .asciiz "-"
buf: .byte 0:16
.text
.globl main
main:
#输出标题
li $v0, 4
la $a0, title
syscall
#提示输入被除数并接收输入
restart:
li $v0, 4
la $a0, tip1
syscall
li $v0, 5
syscall
move $t0, $v0
#提示输入除数并接收输入
input_again:
li $v0, 4
la $a0, tip2
syscall
li $v0, 5
syscall
move $t1, $v0
#检测除数是否为0,是则输出错误信息并跳转到除数输入处,否则继续执行
bnez $t1, next
li $v0, 4
la $a0, err
syscall
j input_again
#提示输入要求的小数位数并接收输入
next:
li $v0, 4
la $a0, tip3
syscall
li $v0, 5
syscall
move $t2, $v0
#两数进行除法运算,把运算结果保存到寄存器$t8和$t9
div $t0, $t1
move $s0, $zero
mflo $t8
mfhi $t9
#检测商是否为0,是则继续执行下一步,否则跳转到输出整数结果处
bnez $t8, int_result
#检测被除数是否为非负数,是则检查除数,否则置$s0为1,$s0用来记录负数的个数
bgez $t0, next_check
addi $s0, $zero, 1
#检测除数是否为非负数,是则输出-号,否则$s0加1
next_check:
bgez $t1, print_sign
addi $s0, $s0, 1
#输出-号,如果$s0值不为1,即负数个数不为奇数,则跳过此步
print_sign:
bne $s0, 1, int_result
li $v0, 4
la $a0, sign
syscall
#输出整数部分结果
int_result:
li $v0, 1
move $a0, $t8
syscall
#输出小数点
li $v0, 4
la $a0, dot
syscall
#检测余数是否不小于0,是则跳转到下一步执行,否则取反
bgez $t9, next_num
neg $t9, $t9
#检测除数是否不小于0,是则转入下一步,否则取反
next_num:
bgez $t1, isloop
neg $t1, $t1
#余数乘以10,再除以除数,得到新的商和余数
isloop:
move $t8, $t9
mul $t8, $t8, 10
div $t8, $t1
mflo $t8
mfhi $t9
#输出新的商
li $v0, 1
move $a0, $t8
syscall
#小数位数记录减1,当其大于0时继续回到上一标号处执行,否则转入下一步
sub $t2, $t2, 1
bgtz $t2, isloop
#显示提示信息是否要重新开始,
li $v0, 4
la $a0, tip4
syscall
#接收字符输入
li $v0, 8
la $a0, buf
li $a1, 16
syscall
#输入的第一字符为y时则重新开始, 否则结束程序
lbu $t3, buf
beq $t3, 121, restart
li $v0, 10
syscall
相关文章推荐
- 高精度整数除法(MIPS汇编)
- 高精度整数除法
- OpenJudge百炼-2737-大整数除法-C语言-高精度计算
- 输入一个高精度的正整数n,去掉其中任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对所给的n和s,寻找一种方案使得剩下的数字组成的新数最小。
- 整数大数模拟 高精度加法 高精度减法 高精度乘法 高精度除法 c/c++ java
- 整数高精度运算的库(加法,减法,乘法,除法,取模)
- 高精度正整数除法 大整数除法
- 【线性扫描+高精度】大整数除以小整数求余数,十进制除法
- 高精度计算-大整数除法
- 高精度(大整数除法)
- 高精度整数除法
- 高精度整数除法
- 程序员编程艺术第三十~三十一章:字符串转换成整数,通配符字符串匹配
- shell脚本编程学习之路-整数二次元比较操作符
- 高精度定时器在mips上的框架结构
- poj 2325 Persistent Numbers(高精度除法+贪心)
- 金山招聘题目:编程计算从1到2008080808之间的整数有多少个含有数字7
- 编程实现将任意的十进制整数转换成R进制数
- 挑战面试编程:字符串转换为整数
- 黑马程序员之C#编程基础学习笔记:提示用户输入两个整数(假设i1,i2)。如果i1,i2都是正数,则将i2的值递增一个数,然后打印i1+i2的值;如果i1,i2都是负数,则将i1的值递减10个数,然后