From e2c92bd87fb5ae53544ae673fc84a703723d95ab Mon Sep 17 00:00:00 2001 From: Minh Tien Nguyen Date: Mon, 19 Nov 2018 09:13:45 +0700 Subject: [PATCH] Sua loi thuong khong chinh xac, xu li them ngoai le --- KTMT/Assignment/Assignment1.asm | 57 +++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/KTMT/Assignment/Assignment1.asm b/KTMT/Assignment/Assignment1.asm index d7347c4..2b0e253 100644 --- a/KTMT/Assignment/Assignment1.asm +++ b/KTMT/Assignment/Assignment1.asm @@ -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