You are on page 1of 5

BÁO CÁO THỰC HÀNH 02 – CE119.L22.MTCL.

2
Sinh viên thực hiện: Trần Văn Hải - MSSV: 20521283
Giảng viên hướng dẫn thực hành: Trần Đại Dương
THỰC HÀNH
2 Biên dịch chương trình
C MIPS
if (i == j) beq $s0,$s1,exit
f = g + h; sub $s2,$t0,$t1
else j exit1
f = g – h; exit:
add $s2,$t0,$t1
exit1:

int Sum = 0 li $s2,0


for (int i = 1; i <=N; ++i){ addi $s0,$s0,1
Sum = Sum + i; LOOP:
} bge $s1,$s0,exit
j exit1
exit:
add $s2,$s2,$s0
addi $s0,$s0,1
j LOOP
exit1:

BÀI TẬP
3.a. Nhập 1 ký tự, sau đó xuất ra ký tự liền trước và liền sau
.data
chuoi1:.asciiz"Nhap ky tu: "
chuoi2:.asciiz"\nky tu vua nhap la chu thuong: "
chuoi3:.asciiz"\nKy tu vua nhap la chu HOA: "
chuoi4:.asciiz"\nKy tu vua nhap la so: "
chuoi5:.asciiz"\nKy tu lien truoc la: "
chuoi6:.asciiz"\nKy tu lien sau la: "
chuoi7:.asciiz"\ninvalid type"
.text
li $v0,4 %Đọc mã thanh ghi $v0, 4 là mã xuất chuỗi
la $a0,chuoi1 %Gán địa chỉ chuoi1 cho thanh ghi $a0
syscall %Xuất chuoi1
li $v0,12 %Đọc mã thanh ghi $v0, 12 là mã đọc ký tự
syscall %Xuất ký tự
move $t0,$v0 %$t0 = $v0

bge $t0,48,exit %Nếu $t0 >= 48 đúng thì nhảy đến nhãn exit
j INV % Nếu sai thì nhảy tới nhãn INV
exit: %Nhãn exit
ble $t0,57,exit1 %Nếu $t0 <= 57 đúng thì nhảy đến nhãn exit1
j exit2 %Nếu sai thì nhảy đến nhãn exit2
exit1: %Nhãn exit1
li $v0,4 %Đọc mã thanh ghi $v0, 4 là mã xuất chuỗi
la $a0,chuoi4 %Gán địa chỉ chuoi4 cho thanh ghi $a0
syscall %Xuất chuoi4
subi $t1,$t0,1 %$t1 = $t0 - 1
li $v0,4 %Đọc mã thanh ghi $a0, 4 là mã xuất chuỗi
la $a0,chuoi5 %Gán địa chỉ chuoi5 cho thanh ghi $a0
syscall, %Xuất chuoi5
li $v0,11 %Đọc mã thanh ghi $v0, 11 là mã in ký tự
move $a0,$t1 %$10 = $t1
syscall %Xuất $t1
addi $t2,$t0,1 $t2 = $t0 - 1
li $v0,4 %Đọc mã thanh ghi $v0, 4 là mã xuất chuỗi
la $a0,chuoi6 %Gán địa chỉ chuoi6 cho thanh ghi $a0
syscall,
li $v0,11
move $a0,$t2
syscall

exit2:
bge $t0,65,exitH
j INV
exitH:
ble $t0,90,exitH1
j exit3
exitH1:
li $v0,4
la $a0,chuoi3
syscall
subi $t1,$t0,1
li $v0,4
la $a0,chuoi5
syscall,
li $v0,11
move $a0,$t1
syscall
addi $t2,$t0,1
li $v0,4
la $a0,chuoi6
syscall,
li $v0,11
move $a0,$t2
syscall

exit3:
bge $t0,97,exitT
j INV
exitT:
ble $t0,122,exitT1
j INV
exitT1:
li $v0,4
la $a0,chuoi2
syscall
subi $t1,$t0,1
li $v0,4
la $a0,chuoi5
syscall,
li $v0,11
move $a0,$t1
syscall
addi $t2,$t0,1
li $v0,4
la $a0,chuoi6
syscall,
li $v0,11
move $a0,$t2
syscall
INV:
li $v0,4
la $a0,chuoi7
syscall
EXIT:
3.b. Nhập 2 số nguyên, sau đó xuất ra số lớn hơn, tổng, hiệu, tích và thương
.data
chuoi1:.asciiz"Nhap so thu nhat: "
chuoi2:.asciiz"\nNhap so thu hai: "
chuoi3:.asciiz"\nSo lon hon la: "
chuoi4:.asciiz"\nTong hai so la: "
chuoi5:.asciiz"\nHieu hai so la: "
chuoi6:.asciiz"\nTich hai so la: "
chuoi7:.asciiz"\nThuong cua hai so la: "
.text
li $v0,4 %Đọc mã syscall thanh ghi $v0, 4 là mã xuất chuỗi
la $a0,chuoi1 %Gán địa chỉ của chuoi1 qua thanh ghi $a0
syscall %Xuất chuoi1
li $v0,5 %Đọc mã syscall thanh ghi $v0, 5 là mã nhập số nguyên
syscall %Nhập số nguyên thứ nhất
move $t0,$v0 %$t0 = $v0
li $v0,4 %Đọc mã syscall thanh ghi $v0, 4 là mã xuất chuỗi
la $a0,chuoi2 %Gán địa chỉ của chuoi2 qua thanh ghi $a0
syscall %Xuất chuoi2
li $v0,5 %Đọc mã syscall thanh ghi $v0, 5 là mã nhập số nguyên
syscall %Nhập số nguyên thứ hai
move $t1,$v0 %$t1 = $v0
bgt $t0,$t1,exit %Nếu $t0 > $t1 đúng thì nhảy tới nhãn exit

li $v0,4 %Đọc mã syscall thanh ghi $v0, 4 là mã xuất chuỗi


la $a0,chuoi3 %Gán đại chỉ chuoi3 qua thanh ghi $a0
syscall %Xuất chuoi3
li $v0,1 %Đọc mã syscall thanh ghi $v0, 1 là mã xuất số nguyên
move $a0,$t1 %$a0 = $t1
syscall %Xuất $t1
j exit1 %Nhảy tới nhãn exit1

exit: %Nhãn exit


li $v0,4 %Đọc mã syscall thanh ghi $v0, 4 là mã xuất chuỗi
la $a0,chuoi3 %Gán địa chỉ chuoi3 qua thanh ghi $a0
syscall %Xuất chuoi3
li $v0,1 %Đọc mã syscall thanh ghi $v0, 1 là mã xuất số nguyên
move $a0,$t0 %$a0 = $t0
syscall %Xuất $t0

exit1: %Nhãn exit1


add $t2,$t0,$t1 %$t2 = $t0 + $t1
li $v0,4 %Đọc mã syscall thanh ghi $v0, 4 là mã xuất chuỗi
la $a0,chuoi4 %Gán địa chỉ chuoi4 qua thanh ghi $a0
syscall %Xuất chuoi4
li $v0,1 %Đọc mã syscall thanh ghi $v0, 1 là mã xuất số nguyên
move $a0,$t2 %$a0 = $t2
syscall %Xuất $t2

sub $t3,$t0,$t1 %$t3 = $t0 - $t1


li $v0,4 %Đọc mã thanh ghi $v0, 4 là mã xuất chuỗi
la $a0,chuoi5 %Gán địa chỉ chuoi5 cho $a0
syscall %Xuất chuoi5
li $v0,1 %Đọc mã thanh ghi $v0, 1 là mã xuất số nguyên
move $a0,$t3 %$a0 = $t3
syscall %Xuất $t3

mul $t4,$t0,$t1 %$t4 = $t0 * $t1


li $v0,4 %Đọc mã thanh ghi $v0, 4 là mã xuất chuỗi
la $a0,chuoi6 %Gán địa chỉ chuoi6 cho thanh ghi $a0
syscall %Xuất chuoi6
li $v0,1 %Đọc mã thanh ghi $v0, 1 là mã Xuất số nguyên
move $a0,$t4 %$a0 = $t4
syscall %Xuất $t4

div $t5,$t0,$t1 %$t5 = $t0 / $t1


li $v0,4 %Đọc mã thanh ghi $v0, 4 là mã xuất chuỗi
la $a0,chuoi7 %Gán địa chỉ chuoi7 vào thanh ghi $a0
syscall %Xuất chuoi7
li $v0,1 %Đọc mã thanh ghi $v0, 1 là mã xuất số nguyên
move $a0,$t5 %$a0 = $t5
syscall %Xuất $t5

You might also like