diff --git a/KTMT/Lab3_1/2.asm b/KTMT/Lab3_1/2.asm new file mode 100644 index 0000000..8c26c5e --- /dev/null +++ b/KTMT/Lab3_1/2.asm @@ -0,0 +1,47 @@ + .data +nhapD: .asciiz "Nhap chieu dai: " +nhapR: .asciiz "Nhap chieu rong: " +xuatCV: .asciiz "\nChu vi: " +xuatDT: .asciiz "\nDien tich: " +dai: .float 0 +rong: .float 0 +cv: .float 0 +dt: .float 0 + .text + .globl main +main: + #Nhap + la $a0, nhapD + li $v0, 4 + syscall + li $v0, 6 + syscall + swc1 $f0, dai + la $a0, nhapR + li $v0, 4 + syscall + li $v0, 6 + syscall + swc1 $f0, rong + #Xu ly + lwc1 $f1, dai + lwc1 $f2, rong + add.s $f3, $f1, $f2 + swc1 $f3, cv + mul.s $f4, $f1, $f2 + swc1 $f4, dt + #Xuat + la $a0, xuatCV + li $v0, 4 + syscall + lwc1 $f12, cv + li $v0, 2 + syscall + la $a0, xuatDT + li $v0, 4 + syscall + lwc1 $f12, dt + li $v0, 2 + syscall + li $v0, 10 + syscall \ No newline at end of file diff --git a/KTMT/Lab3_1/3.asm b/KTMT/Lab3_1/3.asm new file mode 100644 index 0000000..0919ce3 --- /dev/null +++ b/KTMT/Lab3_1/3.asm @@ -0,0 +1,178 @@ + .data +xa: .float 0 +ya: .float 0 +xb: .float 0 +yb: .float 0 +xc: .float 0 +yc: .float 0 +a: .float 0 +b: .float 0 +c: .float 0 +two: .float 2.0 +inXA: .asciiz "Nhap xA: " +inYA: .asciiz "Nhap yA: " +inXB: .asciiz "Nhap xB: " +inYB: .asciiz "Nhap yB: " +inXC: .asciiz "Nhap xC: " +inYC: .asciiz "Nhap yC: " +outMax: .asciiz "(Cac) dinh co gia tri x lon nhat:\n" +outErr: .asciiz "Ba diem da cho khong tao thanh tam giac!" +outDT: .asciiz "Dien tich tam giac da cho la:\n" + .text + .globl main +main: la $a0, inXA + li $v0, 4 + syscall + li $v0, 6 + syscall + swc1 $f0, xa + la $a0, inYA + li $v0, 4 + syscall + li $v0, 6 + syscall + swc1 $f0, ya + la $a0, inXB + li $v0, 4 + syscall + li $v0, 6 + syscall + swc1 $f0, xb + la $a0, inYB + li $v0, 4 + syscall + li $v0, 6 + syscall + swc1 $f0, yb + 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 + lwc1 $f1, xa + lwc1 $f2, xb + lwc1 $f3, xc + lwc1 $f4, ya + lwc1 $f5, yb + lwc1 $f6, yc + mov.s $f27, $f1 + mov.s $f28, $f2 + mov.s $f29, $f3 + jal findM + la $a0, outMax + li $v0, 4 + syscall + c.eq.s $f1, $f26 + bc1f skipf1 + mov.s $f31, $f1 + mov.s $f30, $f4 + jal print +skipf1: c.eq.s $f2, $f26 + bc1f skipf2 + mov.s $f31, $f2 + mov.s $f30, $f5 + jal print +skipf2: c.eq.s $f3, $f26 + bc1f skipf3 + mov.s $f31, $f3 + mov.s $f30, $f6 + jal print +skipf3: mov.s $f8, $f1 + mov.s $f9, $f4 + mov.s $f10, $f2 + mov.s $f11, $f5 + jal cal + swc1 $f7, c + mov.s $f10, $f3 + mov.s $f11, $f6 + jal cal + swc1 $f7, b + mov.s $f8, $f2 + mov.s $f9, $f5 + jal cal + swc1 $f7, a + lwc1 $f27, a + lwc1 $f28, b + lwc1 $f29, c + jal findM + mov.s $f15, $f26 + jal findm + mov.s $f17, $f26 + add.s $f16, $f27, $f28 + add.s $f16, $f16, $f29 + sub.s $f16, $f16, $f15 + c.le.s $f16, $f15 + bc1t error + add.s $f18, $f16, $f15 + sub.s $f16, $f16, $f17 + lwc1 $f19, two + div.s $f18, $f18, $f19 + mov.s $f19, $f18 + sub.s $f20, $f18, $f15 + mul.s $f19, $f19, $f20 + sub.s $f20, $f18, $f16 + mul.s $f19, $f19, $f20 + sub.s $f20, $f18, $f17 + mul.s $f19, $f19, $f20 + sqrt.s $f19, $f19 + la $a0, outDT + li $v0, 4 + syscall + mov.s $f12, $f19 + li $v0, 2 + syscall +exit: li $v0, 10 + syscall +findM: mov.s $f26, $f27 + c.le.s $f28, $f26 + bc1t Mskip + mov.s $f26, $f28 +Mskip: c.le.s $f29, $f26 + bc1t Mret + mov.s $f26, $f29 +Mret: jr $ra +findm: mov.s $f26, $f27 + c.lt.s $f28, $f26 + bc1f mskip + mov.s $f26, $f28 +mskip: c.lt.s $f29, $f26 + bc1f mret + mov.s $f26, $f29 +mret: jr $ra +print: li $a0, '(' + li $v0, 11 + syscall + mov.s $f12, $f31 + li $v0, 2 + syscall + li $a0, ';' + li $v0, 11 + syscall + mov.s $f12, $f30 + li $v0, 2 + syscall + li $a0, ')' + li $v0, 11 + syscall + li $a0, '\n' + li $v0, 11 + syscall + jr $ra +cal: sub.s $f13, $f10, $f8 + mul.s $f13, $f13, $f13 + sub.s $f14, $f11, $f9 + mul.s $f14, $f14, $f14 + add.s $f7, $f13, $f14 + sqrt.s $f7, $f7 + jr $ra +error: la $a0, outErr + li $v0, 4 + syscall + j exit