mirror of
https://github.com/tiennm99/KTMT.git
synced 2026-08-10 10:21:46 +00:00
Update Assignment
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user