From f452f3e6928a67b2e91d612cff87e846380b4f31 Mon Sep 17 00:00:00 2001 From: Minh Tien Nguyen Date: Sun, 11 Nov 2018 19:33:20 +0700 Subject: [PATCH] Update Assignment --- Assignment/Assignment1.asm | 130 +++++++++++++++++++++++++ Others/BaiTapCaNhan.asm | 192 +++++++++++++++++++++++++++++++++++++ 2 files changed, 322 insertions(+) create mode 100644 Assignment/Assignment1.asm create mode 100644 Others/BaiTapCaNhan.asm diff --git a/Assignment/Assignment1.asm b/Assignment/Assignment1.asm new file mode 100644 index 0000000..d7347c4 --- /dev/null +++ b/Assignment/Assignment1.asm @@ -0,0 +1,130 @@ +#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 +#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) +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!" +out: .asciiz "Thuong cua hai so da nhap la:\n" + +#Code: + .text + .globl main +main: + +#Nhap du lieu: + #Nhap so bi chia: + la $a0, in1 + li $v0, 4 + syscall + li $v0, 6 + syscall + swc1 $f0, f1 + #Nhap so chia + la $a0, in2 + li $v0, 4 + syscall + li $v0, 6 + syscall + swc1 $f0, f2 + +#Xu ly: + #Load f1, f2 vao $a1, $a2 + lw $a1, f1 + lw $a2, f2 + beqz $a2, error1 + +#Xu ly bit dau cua f: + #Luu bit dau cua f1, f2 vao $t1, $t2 + andi $t1, $a1, 0x80000000 + srl $t1, $t1, 31 + andi $t2, $a2, 0x80000000 + srl $t2, $t2, 31 + #Neu bit dau cua f1 va f2 giong nhau thi bit dau cua f la 0 (duong) nguoc lai la am (1) + #Do do bit dau cua f = xor($t1, $t2) + #Luu bit dau cua f vao $t0 + xor $t0, $t1, $t2 + +#Xu ly cac bit mu cua f: + #Luu cac bit mu cua f1, f2 vao $t2, $t3 + andi $t2, $a1, 0x7F800000 + srl $t2, $t2, 23 + andi $t3, $a2, 0x7F800000 + srl $t3, $t3, 23 + #Do f = f1 / f2 nen bit mu cua f se bang bit mu cua f1 tru bit mu cua f2 + #Luu bit mu cua f vao $t1 + sub $t1, $t2, $t3 + #Them bias = 127 vao $t1 + addi $t1, $t1, 127 + +#Xu ly cac bit co so cua f: + #Luu cac bit co so cua f1, f2 vao $t3, $t4 + andi $t3, $a1, 0x007FFFFF + andi $t4, $a2, 0x007FFFFF + #Them 1 vao bit 24 + ori $t3, $t3, 0x00800000 + ori $t4, $t4, 0x00800000 + #Thuc hien phep chia $t3 cho $t4 + #Luu ket qua vao $t2 + li $t2, 0 +loop: ble $t3, $t4, next + addi $t2, $t2, 1 + sub $t3, $t3, $t4 +next: sll $t2, $t2, 1 + sll $t3, $t3, 1 + addi $t1, $t1, -1 + blt $t2, 0x007FFFFF, loop + + #Sau khi chia, loai bo bit 1 o vi tri bit 24 cua $t2 + andi $t2, $t2, 0x007FFFFF + #Cong so mu len 23 + 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 + +#Gop ket qua thanh so thuc hoan chinh (f) + #Luu f vao $v0 + 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 + +#Xuat ket qua ra man hinh + la $a0, out + li $v0, 4 + syscall + lwc1 $f12, f + li $v0, 2 + syscall + +#Thoat chuong trinh: +exit: li $v0, 10 + syscall + +#Xu ly ngoai le trong chuong trinh + #Loi: so chia bang 0 +error1: la $a0, err1 + li $v0, 4 + syscall + j exit + #Loi: ket qua bi tran so +error2: la $a0, err2 + li $v0, 4 + syscall + j exit diff --git a/Others/BaiTapCaNhan.asm b/Others/BaiTapCaNhan.asm new file mode 100644 index 0000000..4effafe --- /dev/null +++ b/Others/BaiTapCaNhan.asm @@ -0,0 +1,192 @@ +#Chuong trinh tinh dien tich tu giac +#Input: Toa do 4 diem A, B, C, D +#Output: Dien tich tu giac ABCD (neu A, B, C, D tao thanh tu giac don) +# Hoac bao loi ABCD khong phai la tu giac don (theo dinh nghia cua Wikipedia) +#Han che: Khong xu ly duoc truong hop tran so +# Khong tinh toan chinh xac tuyet doi dien tich cua tu giac +#Khai bao bien + .data +xA: .float 0 +yA: .float 0 +xB: .float 0 +yB: .float 0 +xC: .float 0 +yC: .float 0 +xD: .float 0 +yD: .float 0 +zero: .float 0 +half: .float 0.5 +one: .float 1 +#Cau nhac lenh +inXA: .asciiz "Nhap toa do xA:\n" +inYA: .asciiz "Nhap toa do yA:\n" +inXB: .asciiz "Nhap toa do xB:\n" +inYB: .asciiz "Nhap toa do yB:\n" +inXC: .asciiz "Nhap toa do xC:\n" +inYC: .asciiz "Nhap toa do yC:\n" +inXD: .asciiz "Nhap toa do xD:\n" +inYD: .asciiz "Nhap toa do yD:\n" +outS: .asciiz "Dien tich tu giac ABCD la:\n" +err: .asciiz "Loi: ABCD khong tao thanh tu giac don!\n" +#Code + .text + .globl main +main: +#Nhap du lieu + la $a0, inXA + li $v0, 4 + syscall + li $v0, 6 + syscall + swc1 $f0, xA + mov.s $f1, $f0 + la $a0, inYA + li $v0, 4 + syscall + li $v0, 6 + syscall + swc1 $f0, yA + mov.s $f3, $f0 + la $a0, inXB + li $v0, 4 + syscall + li $v0, 6 + syscall + swc1 $f0, xB + mov.s $f3, $f0 + la $a0, inYB + li $v0, 4 + syscall + li $v0, 6 + syscall + swc1 $f0, yB + mov.s $f4, $f0 + la $a0, inXC + li $v0, 4 + syscall + li $v0, 6 + syscall + swc1 $f0, xC + la $a0, inYC + li $v0, 4 + syscall + li $v0, 6 + syscall + swc1 $f0, yC + la $a0, inXD + li $v0, 4 + syscall + li $v0, 6 + syscall + swc1 $f0, xD + la $a0, inYD + li $v0, 4 + syscall + li $v0, 6 + syscall + swc1 $f0, yD +#Xu ly + l.s $f0, zero +#Doc toa do A, B, C, D vao $f1 den $f8 + lwc1 $f1, xA + lwc1 $f2, yA + lwc1 $f3, xB + lwc1 $f4, yB + lwc1 $f5, xC + lwc1 $f6, yC + lwc1 $f7, xD + lwc1 $f8, yD +#Kiem tra B va D co nam 2 phia duong thang AC khong + #Tinh gia tri a, b, c trong phuong trinh duong thang AC: ax + by + c = 0 + #Gan gia tri vao $f29, $f30, $f31 + sub.s $f29, $f2, $f6 #a = yA - yC + sub.s $f30, $f5, $f1 #b = xC - xA + #Neu a = b = 0 thi bao loi do A trung voi C + c.eq.s 0, $f29, $f0 + bc1f 0, next1 + c.eq.s 1, $f30, $f0 + bc1f 1, next2 + j error + #Neu a != 0 thi rut gon b = b/a, a = 1 + #Neu khong thi b = 1 +next1: + div.s $f30, $f30, $f29 + lwc1 $f29, one + j ok +next2: + lwc1 $f30, one +ok: mul.s $f27, $f29, $f1 #$f27 = xA*a + mul.s $f28, $f30, $f2 #$f28 = yA*b + add.s $f31, $f27, $f28 #$f31 = xA*a + yA*b + neg.s $f31, $f31 #$f31 = -(xA*a + yA*b) + #Tinh a*xB + b*yB + c gan vao $f28 + mov.s $f28, $f31 #$f28 = c + mul.s $f27, $f29, $f3 #$f27 = a*xB + add.s $f28, $f28, $f27 #$f28 = a*xB + c + mul.s $f27, $f30, $f4 #$f27 = b*yB + add.s $f28, $f28, $f27 #$f28 = a*xB + b*yB + c + #Bao loi neu $f28 = 0 do B thuoc duong thang AC + c.eq.s $f28, $f0 + bc1t error + #Tinh a*xD + b*yD + c gan vao $f27 + mov.s $f27, $f31 #$f27 = c + mul.s $f26, $f29, $f7 #$f26 = a*xD + add.s $f27, $f27, $f26 #$f27 = a*xD + c + mul.s $f26, $f30, $f8 #$f26 = b*yD + add.s $f27, $f27, $f26 #$f27 = a*xD + b*yD + c + #Bao loi neu $f27 = 0 do D thuoc duong thang AC + c.eq.s $f27, $f0 + bc1t error + #Tinh $f26 = $f27 * $f28 + mul.s $f26, $f27, $f28 + #Neu $f26 > 0 thi bao loi do B, D cung phia voi duong thang AC + c.le.s $f26, $f0 + bc1f error +#Tinh dien tich 2 tam giac ABC va ACD + #Tinh do dai doan thang AC va luu vao $f26 + sub.s $f24, $f1, $f5 #$f24 = xA - xC + mul.s $f24, $f24, $f24 #$f24 = (xA - xC)^2 + sub.s $f25, $f2, $f6 #$f25 = yA - yC + mul.s $f25, $f25, $f25 #$f25 = (yA - yC)^2 + add.s $f26, $f24, $f25 #$f26 = (xA - xC)^2 + (yA - yC)^2 + sqrt.s $f26, $f26 #$f26 = AC + #Tinh sqrt(a*a + b*b) va luu vao thanh ghi $f25 + mul.s $f23, $f29, $f29 #$f23 = a^2 + mul.s $f24, $f30, $f30 #$f24 = b^2 + add.s $f25, $f24, $f23 #$f25 = a^2 + b^2 + sqrt.s $f25, $f25 #$f25 = sqrt(a^2 + b^2) + #Tinh khoang cach tu B den AC (hB), luu vao $f24 + mov.s $f24, $f28 + abs.s $f24, $f24 + div.s $f24, $f24, $f25 + #Tinh khoang cach tu D den AC (hD), luu vao $f23 + mov.s $f23, $f27 + abs.s $f23, $f23 + div.s $f23, $f23, $f25 + #Tinh Sabc, luu vao $f22 + lwc1 $f22, half #$f22 = 0.5 + mul.s $f22, $f22, $f24 + mul.s $f22, $f22, $f26 + #Tinh Sacd, luu vao $f21 + lwc1 $f21, half #$f21 = 0.5 + mul.s $f21, $f21, $f23 + mul.s $f21, $f21, $f26 + #Tinh Sabcd = Sabc + Sacd, luu vao $f20 + add.s $f20, $f21, $f22 +#Xuat ket qua + la $a0, outS + li $v0, 4 + syscall + mov.s $f12, $f20 + li $v0, 2 + syscall +#Thoat chuong trinh +exit: + li $v0, 10 + syscall +#Xu ly ngoai le +error: + la $a0, err + li $v0, 4 + syscall + j exit \ No newline at end of file