mirror of
https://github.com/tiennm99/HCMUT.git
synced 2026-08-13 01:20:01 +00:00
Sua loi thuong khong chinh xac, xu li them ngoai le
This commit is contained in:
@@ -1,19 +1,22 @@
|
||||
#Chuong trinh chia 2 so thuc
|
||||
#Input: 2 so thuc nhap vao tu ban phim
|
||||
#Output: Thuong cua 2 so thuc da nhap
|
||||
# Trong truong hop so chia bang 0 hoac ket qua bi tran so thi bao loi
|
||||
#Han che: Ket qua tinh toan khong chinh xac tuyet doi
|
||||
#Output: Neu so chia hoac so bi chia khong hop le (NaN)
|
||||
# Trong truong hop so bi chia bang cong/tru vo cuc (Infinity) thi bao loi
|
||||
# Trong truong hop so chia bang 0.0 (hoac -0.0) thi bao loi
|
||||
# Cac truong hop con lai xuat gia tri thuong cua 2 so thuc da nhap (trong tam bieu dien cua kieu float)
|
||||
# Trong truong hop tri tuyet doi cua thuong >= 2^128 thi ket qua la vo cuc (Infinity)
|
||||
# Trong truong hop tri tuyet doi cua thuong <= 2^-127 thi ket qua la 0
|
||||
#Khai bao bien:
|
||||
.data
|
||||
f1: .float 1.5 #So thuc thu nhat (So bi chia)
|
||||
f2: .float 2.5 #So thuc thu hai (So chia)
|
||||
f1: .float 0 #So thuc thu nhat (So bi chia)
|
||||
f2: .float 0 #So thuc thu hai (So chia)
|
||||
f: .space 8 #O nho luu ket qua (Thuong cua 2 so)
|
||||
|
||||
#Cau nhac lenh:
|
||||
in1: .asciiz "Nhap vao so bi chia:\n"
|
||||
in2: .asciiz "Nhap vao so chia:\n"
|
||||
err1: .asciiz "So chia bang 0!"
|
||||
err2: .asciiz "Ket qua bi tran so!"
|
||||
err: .asciiz "So da nhap khong hop le!"
|
||||
err2: .asciiz "So chia bang 0!"
|
||||
out: .asciiz "Thuong cua hai so da nhap la:\n"
|
||||
|
||||
#Code:
|
||||
@@ -41,7 +44,15 @@ main:
|
||||
#Load f1, f2 vao $a1, $a2
|
||||
lw $a1, f1
|
||||
lw $a2, f2
|
||||
beqz $a2, error1
|
||||
#Kiem tra 2 so da nhap co hop le hay khong (= NaN)
|
||||
beq $a1, 0x7FC00000, error
|
||||
beq $a2, 0x7FC00000, error
|
||||
#Kiem tra so bi chia co bang cong/tru vo cuc (Infinity) hay khong
|
||||
beq $a1, 0x7F800000, error1
|
||||
beq $a2, 0xFF800000, error1
|
||||
#Kiem tra so chia co bang 0.0 hoac -0.0 hay khong
|
||||
beqz $a2, error2
|
||||
beq $a2, 0x80000000, error2
|
||||
|
||||
#Xu ly bit dau cua f:
|
||||
#Luu bit dau cua f1, f2 vao $t1, $t2
|
||||
@@ -76,7 +87,7 @@ main:
|
||||
#Thuc hien phep chia $t3 cho $t4
|
||||
#Luu ket qua vao $t2
|
||||
li $t2, 0
|
||||
loop: ble $t3, $t4, next
|
||||
loop: blt $t3, $t4, next
|
||||
addi $t2, $t2, 1
|
||||
sub $t3, $t3, $t4
|
||||
next: sll $t2, $t2, 1
|
||||
@@ -90,23 +101,23 @@ next: sll $t2, $t2, 1
|
||||
addi $t1, $t1, 23
|
||||
|
||||
#Phat hien loi tran so mu:
|
||||
#Neu $t1 < 0 hoac $t1 > 255 thi xay ra tran so
|
||||
bltz $t1, error2
|
||||
bgt $t1, 0xFF, error2
|
||||
#Neu $t1 < 0 hoac $t1 > 255 thi xu li ngoai le
|
||||
bltz $t1, case2
|
||||
bgt $t1, 0xFE, case3
|
||||
|
||||
#Gop ket qua thanh so thuc hoan chinh (f)
|
||||
#Luu f vao $v0
|
||||
li $v0, 0x0
|
||||
comb: li $v0, 0x0
|
||||
or $v0, $v0, $t0
|
||||
sll $v0, $v0, 8
|
||||
or $v0, $v0, $t1
|
||||
sll $v0, $v0, 23
|
||||
or $v0, $v0, $t2
|
||||
#Luu f vao bo nho
|
||||
sw $v0, f
|
||||
save: sw $v0, f
|
||||
|
||||
#Xuat ket qua ra man hinh
|
||||
la $a0, out
|
||||
output: la $a0, out
|
||||
li $v0, 4
|
||||
syscall
|
||||
lwc1 $f12, f
|
||||
@@ -118,13 +129,25 @@ exit: li $v0, 10
|
||||
syscall
|
||||
|
||||
#Xu ly ngoai le trong chuong trinh
|
||||
#Loi: so chia bang 0
|
||||
#Loi: so nhap khong hop le (NaN)
|
||||
error: la $a0, err
|
||||
li $v0, 4
|
||||
syscall
|
||||
j exit
|
||||
#Loi: so bi chia bang vo cuc
|
||||
error1: la $a0, err1
|
||||
li $v0, 4
|
||||
syscall
|
||||
j exit
|
||||
#Loi: ket qua bi tran so
|
||||
#Loi: so chia bang 0
|
||||
error2: la $a0, err2
|
||||
li $v0, 4
|
||||
syscall
|
||||
j exit
|
||||
#Truong hop tri tuyet doi thuong <= 2^-127
|
||||
case2: li $v0, 0x0
|
||||
j save
|
||||
#Truong hop tri tuyet doi thuong >= 2^128
|
||||
case3: li $t1, 0xFF
|
||||
li $t2, 0x0
|
||||
j comb
|
||||
|
||||
Reference in New Issue
Block a user