You are on page 1of 9

ĐẠI HỌC QUỐC GIA TP.

HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA KỸ THUẬT MÁY TÍNH

BÁO CÁO MÔN HỌC

THỰC HÀNH KIẾN TRÚC MÁY TÍNH


CE119.M22.MTCL.1

BÁO CÁO BÀI THỰC HÀNH SỐ 2

Giảng viên hướng dẫn: Nguyễn Thành Nhân


Sinh viên thực hiện: Võ Ngọc Hoài - Mssv:21522084

Page | 1
MỤC LỤC:

1.Lý thuyết………………………………………..3
2.Thực hành………………………………………3
3.Bài tập…………………………………………...5

Page | 2
1. Lý thuyết

Giảng viên hướng dẫn sinh viên về chương trình hợp ngữ MIPS dựa theo
tài liệu: Tổngquát về hợp ngữ và kiến trúc MIPS

2. Thực hành

Chuyển đoạn code trong bảng theo sau sang MIPS và sử dụng MARS để kiểm
tra lại kết quả:

if (i == j)

f = g + h;

else

f = g – h;

(Với giá trị của i, j, f, g, h lần lượt chứa trong các thanh ghi $s0, $s1, $s2, $t0, $t1)

Trình bày:

Chuyển đoạn code trên sang MIPS:

Page | 3
Giải thích:

Nếu s0 khác s1 thì thanh ghi PC sẽ có địa chỉ ở nhãn label và sau đó chương trình
chạy tới label cho tới exit còn nếu bằng thì ta sẽ xuống lệnh tiếp theo và thực hiệu
yêu cầu f=g+h

Rồi chạy xuống exit kết thúc chương trình

int Sum = 0

for (int i = 1; i <=N; ++i){

Sum = Sum + i;

}
(Với giá trị của i, N, Sum lần lượt chứa trong các thanh ghi $s0, $s1, $s2)

Trình bày:

Chuyển đoạn code trên sang MIPS:

Page | 4
Giải thích:

Đầu tiên ta sài lệnh li để gán giá trị cho các biến i,N,Sum, giả sử N bằng 4.

Ở dòng 6 ta sài lệnh bgt để so sánh xem i và N lúc đầu như nào nếu i lớn hơn N thì
sẽ chạy xuống lênh exit và kết thúc ngay , còn nếu ngược lại thì sẽ xuống dòng
lệnh tiếp theo , rồi chạy xuống lệnh label thực hiện sum=sum+i, sau đó ta cộng i
lênh một đơn vị bằng cách sài lệnh addi , sau đó ta so sánh xem giữa i và N như
nào nếu i nhỏ hơn N thì sẽ lặp lại bằng cách chạy lên lại lệnh label và thực hiện lại
tiếp , còn không thì ta chạy thẳng xuống exit

3. Bài tập

a. Nhập vào một ký tự, xuất ra cửa sổ I/O của MARS theo từng yêu cầu
sau:
 Ký tự liền trước và liền sau của ký tự nhập vào

Ví dụ:

Nhap ky tu (chỉ
một ký tự): b
Ky tu truoc: a
Ky tu sau: c

 Ký tự nhập vào chỉ được phép là ba loại: số, chữ thường và chữ hoa.
Nếu ký tự nhập vào rơi vào một trong ba loại, xuất ra cửa sổ đó là loại
Page | 5
nào; nếu ký tự nhập không rơi vào một trong ba loại trên, xuất ra
thông báo “invalid type”
Trình bày:

Giải thích:
Ta tạo các chuỗi var 0, var1 ,var2
Để tạo ra các câu xuất ra màn hình khi ta nhập b vào ở dòng 6-7
Xong ta xuất chuỗi var0 để xuống dòng rồi ta xuất tiếp chuỗi var1 và var2
Kết quả:

b. Nhập từ bàn phím 2 số nguyên, in ra cửa sổ I/O của MARS theo từng
yêu cầu sau:
 Số lớn hơn
 Tổng, hiệu, tích và thương của hai số

Trình bày:

Page | 6
Page | 7
Giải thích:

Ta tạo 3 chuỗi là var0 var1 và var2 để khi nhập số thứ nhất và số thứ hai để dễ
nhận biết khi nào nhập, còn chuỗi 2 là để nhằm mục đích xuống dòng cho các câu
khi xuất ra được xuống dòng

Đầu tiên ta nhập vào 2 số xong sau đó ta so sánh chúng qua lệnh blt ở dòng 21,
nếu như s0 lớn hơn s1 thì sẽ chạy xuống dòng tiếp theo để xuất số lớn hơn là s0
rồi chạy đến hàm tổng, còn nếu như ngược lại thì sẽ chạy xuống nhãn label để
xuất số lớn hơn là s1 , rồi ta xuống hàm tổng , ta gán tổng của hai số đó vào biến
$t0 rồi xuất ra biến này bằng tập lệnh syscall hỗ trợ xuất số nguyên , tương tự
hàm hiệu như hàm tổng , hàm tích thì sài mul để tính tích và gán vào $t0 rồi xuất
ra, còn hàm thương đặc biệt hơn là ta sài div xong sau đó thương số của s0 và s1
sẽ được lưu vào trong thanh ghi $lo nên để lấy giá trị trong thanh ghi này thì phải
sài mflo để gán vào $t0 rồi sau đó ta xuất giá trị $t0 này ra là được thương số của
hai số .

Kết quả:

Page | 8
Page | 9

You might also like