Một số lệnh assembly MIPS cơ bản .... Một số lệnh assembly MIPS cơ bản Sinh viên tìm hiểu tài liệu “Một số lệnh assembly MIPS cơ bản” và mô phỏng việc thực thi các lệnh và cho biết chức
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ 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 TỔNG KẾT MÔN THỰC HÀNH KIẾN TRÚC MÁY TÍNH – CE119
HỌ VÀ TÊN: NGUYỄN TUẤN ANH
MSSV: 21520580 LỚP: CE119.M21.1
GIẢNG VIÊN HƯỚNG DẪN:
Trần Quốc Sơn
TP HỒ CHÍ MINH – Tháng 6 năm 2022
Trang 2MỤC LỤC
DANH MỤC HÌNH ẢNH 3
DANH MỤC BẢNG 4
I Thực hành buổi 1 – Lab01 5
I.1 Lý thuyết 5
I.1.1 Bộ nhớ 5
I.1.2 Biểu diễn thông tin 5
I.1.3 Cấu trúc chương trình 5
I.2 Thực hành 5
I.2.1 Một số lệnh assembly MIPS cơ bản 5
I.2.2 Mô phỏng các chương trình bên dưới và cho biết ý nghĩa của chương trình: 6
I.3 Bài tập 7
I.3.1 Bài tập 1a 7
I.3.2 Bài tập 1b 8
I.3.3 Bài tập 1c 8
I.3.4 Bài tập 1d 9
II Thực hành buổi 2 – Lab02 11
II.1 Lý thuyết 11
II.1.1 Cấu trúc if, if-else 11
II.1.2 Cấu trúc switch/case 11
II.1.3 Cấu trúc vòng lặp 11
II.2 Thực hành 12
II.3 Bài tập 15
II.3.1 Bài tập 2a 15
II.3.2 Bài tập 2b 17
II.3.3 Bài tập 2c 20
III Thực hành buổi 3 – Lab03 25
III.1 Lý thuyết 25
III.1.1 Kiến trúc thanh ghi – thanh ghi 25
III.1.2 Thao tác với mảng 25
III.1.3 Thao tác với con trỏ 27
Trang 3III.2 Thực hành con trỏ 27
III.3 Bài tập 27
III.3.1 Bài tập 3a 27
III.3.2 Bài tập 3b 30
IV Thực hành buổi 4 -Lab04 37
IV.1 Lý thuyết 37
IV.1.1 Thủ tục với MIPS 37
IV.1.2 Đệ quy 37
IV.2 Thực hành 37
IV.2.1 Thực hành với thủ tục 37
IV.2.2 Thực hành với đệ quy 37
IV.3 Bài tập 37
IV.3.1 Bài 3.1 37
IV.3.2 Bài 3.2 39
V Thực hành buổi 5 – Lab05 43
V.1 Datapaths 43
Trang 4DANH MỤC HÌNH ẢNH
Hình 1 - Kết quả bài tập 1a 8
Hình 2 - Biểu diễn dạng bộ nhớ 8
Hình 3 - Kết quả bài tập 1c 9
Hình 4 - Kết quả bài tập 1d 10
Hình 5 - Kết quả bài thực hành 2a.1 14
Hình 6 - Kết quả bài thực hành 2a.2 14
Hình 7 - Kết quả bài tập 2c 23
Hình 8 - Kết quả bài tập 4a.1 39
Hình 9 - Kết quả bài tập 4a.2 39
Hình 10 - Kết quả bài tập 4b.1 41
Hình 11 - Kết quả bài tập 4b.2 41
Hình 12 - Lệnh add 43
Hình 13 - Lệnh addi 44
Hình 14 - Lệnh sub 44
Hình 15 - Lệnh lw 45
Hình 16 - Lệnh sw 45
Hình 17 - Lệnh j 46
Hình 18 - Lệnh slt 47
Hình 19 - Lệnh beq 47
Hình 20 - Lệnh bne 48
Hình 21 - Lệnh sll 48
Trang 5DANH MỤC BẢNG
Bảng 1 - Một số lênh assembly MIPS cơ bản 6
Bảng 2 - Một số chương trình cơ bản 7
Bảng 3 - Bài tập 1a 7
Bảng 4 - Bài tập 1c 9
Bảng 5 - Bài tập 1d 10
Bảng 6 - So sánh 2 ngôn ngữ 12
Bảng 7 - Bài thực hành 2a 13
Bảng 8 - Bài thực hành 2b 15
Bảng 9 -Bài tập 2a 17
Bảng 10 - Bài tập 2b 20
Bảng 11 - Bài tập 2c 23
Bảng 12 - Thao tác với mảng 25
Bảng 13 - Chương trình thao tác với mảng 27
Bảng 14 - Bài tập 3a 30
Bảng 15 - Bài tập 3b 35
Bảng 16 - Bài tập 4a 38
Bảng 17 - Bài tập 4b 40
Trang 6I Thực hành buổi 1 – Lab01
I.1 Lý thuyết
I.1.1 Bộ nhớ
Lưu dữ liệu theo byte, half, word
Một kí tự được lưu trong 1 byte
Một số nguyên được lưu trong word
Một lệnh được lưu trong 1 word
I.1.2 Biểu diễn thông tin
Ký số:
o Hệ thập phân: Viết bình thường(17)
o Hệ thập lục phân: Thêm tiền tố 0x(0x11)
Ký tự: Đặt trong cặp nháy đơn ‘b’
Chuỗi: Đặt trong cặp nháy kép “Embedded System”
I.1.3 Cấu trúc chương trình
.data #Khai báo dữ liệu sau hàng này
#Khai báo dữ liệu text #Viết chương trinh sau hàng này
#Viết chương trinh
# Comment bằng đầu ký tự #
I.2 Thực hành
I.2.1 Một số lệnh assembly MIPS cơ bản
Sinh viên tìm hiểu tài liệu “Một số lệnh assembly MIPS cơ bản” và mô phỏng việc
thực thi các lệnh và cho biết chức năng của các lệnh cơ bản sau:
Trang 7And and $s1, $s2, $s3 $s1 = $s2 & $s3
Hiển thị các kết quả được chỉ định
Bảng 1- Một số lênh assembly MIPS cơ bản
I.2.2 Mô phỏng các chương trình bên dưới và cho biết ý nghĩa của
Tạo biến var1 có kiểu word có độ lớn 23
Lưu giá trị của var1[0] vào thanh ghi t0 Gán cho t1 = 5
Lưu t1 vào var1[0] => var1[0] = 5 .data
t0[0] = 5 Gán t1 = 13 t0[1] = 12 Gán t1 = -7 t0[2] = -7
li $v0, 5
syscall
Gán v0 = 5 Đọc số nguyên vào máy .data
string1: .asciiz “Print this \n”
Trang 8syscall In chuỗi ra màn hình
Bảng 2- Một số chương trình cơ bản
I.3 Bài tập
I.3.1 Bài tập 1a
Khai báo và xuất ra cửa sổ I/O 2 chuỗi có giá trị như sau:
- Chuỗi 1: Chao ban! Ban la sinh vien nam thu may?
- Chuỗi 2: Hihi, minh la sinh vien nam thu 1
.data
string1: asciiz "Chao ban ! Ban la sinh vien nam thu may? \n"
string2: asciiz "Hihi, minh la sinh vien nam thu 1 \n"
.text
main: li $v0, 4
la $a0, string1 syscall
li $v0,4
la $a0, string2 syscall
Khai báo chuỗi 1
Khai báo chuỗi 2
Khởi tạo thanh ghi v0 có giá trị =4 a0 = string1
Xuất chuỗi 1
a0 = string 2 Xuất chuỗi 2
Bảng 3 - Bài tập 1a
Trang 9main:
li $v0, 8
la $a0, string1
li $a1, 100 syscall
Tạo chuỗi string1 với độ lớn 100 bytes
Khởi tạo thanh ghi v0, gọi lệnh đọc chuỗi a0 = string1
a1= 100 Nhập chuỗi
Trang 10li $v0, 4 syscall
Xuất chuỗi
li $v0,5 syscall add $t1,$0,$v0
li $v0,1 add $t2,$t0,$t1 add $a0,$t2,$0 syscall
Nhập số thứ 1
Lưu số thứ 1 vào t0
Nhập số thứ 2 Lưu số thứ 2 vào t1
Lưu tổng t0 và t1 vào t2
Xuất t2
Trang 11Bảng 5-Bài tập 1d
Hình 4-Kết quả bài tập 1d
Trang 12II Thực hành buổi 2 – Lab02
II.1 Lý thuyết
II.1.1 Cấu trúc if, if-else
- Đối với ngôn ngữ C:
if (điều kiện){ nhóm lệnh;}
Hoặc if (điều kiện){ nhóm lệnh 1;}
else {nhóm lệnh 2;}
- Đối với hợp ngữ: thực hiện so sánh, sau đó quyết định có nhảy hay không?
II.1.2 Cấu trúc switch/case
- Đối với ngôn ngữ C:
switch (<biến>){
case 0: Nhóm lệnh 1; break;
case 1: Nhóm lệnh 2; break;
… default: Nhóm lệnh n;
}
- Đối với hợp ngữ: thực hiện lồng nhiều cấu trúc if-else với nhau
II.1.3 Cấu trúc vòng lặp
- Đối với ngôn ngữ C:
while (điều kiện){
Nhóm lệnh;
Tăng/Giảm biến đếm;
} Hoặc for (biến đếm; điều kiện; tăng/giảm biến đếm){
Nhóm lệnh;
Trang 13j Loop exit:
Bảng 6-So sánh 2 ngôn ngữ
II.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ả:
Trang 15Hình 5-Kết quả bài thực hành 2a.1
Hình 6-Kết quả bài thực hành 2a.2
(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)
Gán biến so sánh với t0 = 1
Nếu i < N thì t0 =1 Ngược lại thì t0 =0
Trang 16In Sum ra màn hình Thoát chương trình
Bảng 8-Bài thực hành 2b
(Với giá trị của i, N, Sum lần lượt chứa trong các thanh ghi $s0, $s1, $s2)
II.3 Bài tập
II.3.1 Bài tập 2a
Trang 17.data
Nhap:.asciiz "Nhap mot ky tu: "
Truoc: asciiz "\n Ky tu truoc: "
Nhập ký tự
Gọi lệnh đọc ký tự
Kiểm tra kiểu ký tự số
Kiểm tra kiểu ký tự chữ cái in hoa
Kiểm tra kiểu ký tự chữ cái thường
Nếu ký tự nhập không thuộc trường đã khai báo trước như ký tự số, chữ cái in hoa, thường thì nhảy đến lệnh Invalid
Trang 18In ra chuỗi Invalid
Bảng 9-Bài tập 2a
II.3.2 Bài tập 2b
.data
mang: word zero,one, two, three, four,five,
six, seven, eight,nine
zero: asciiz "Zero "
one: asciiz "One "
two: asciiz "Two "
three: asciiz "Three "
four: asciiz "Four "
five: asciiz "Five "
six: asciiz "Six "
Khai báo mảng ký tự từ 0 đến 9
Phần tử “zero” = chuỗi “Zero” Phần tử “one” = chuỗi “One” Phần tử “two” = chuỗi “Two” Phần tử “three” = chuỗi “Three” Phần tử “four” = chuỗi “Four” Phần tử “five” = chuỗi “Five” Phần tử “six” = chuỗi “Sĩx”
Trang 19seven: asciiz "Seven "
eight: asciiz "Eight "
nine: asciiz "Nine "
nhap: asciiz "Nhap so vao: "
invalid: asciiz "Invalid Entry!"
Khai báo chuỗi “nhap”
Khai báo chuỗi invalid
In chuỗi “nhap” ra màn hình
Nhập chuỗi số
t1 = 1 t2 = 1 Nếu v0 < t1 thì t0 = 1 Else t0 = 0 Nếu t0 = 1 thì sẽ nhảy đến lệnh label1 Nếu không thì t0 = v0
t1= 10 t2 =1
Lấy t0 % t1
Trang 21Bảng 10-Bài tập 2b
II.3.3 Bài tập 2c
.data
nhap1: asciiz”Nhap so thu nhat:”
nhap2: asciiz”Nhap so thu hai: “
tong: asciiz"\n Tong: "
hieu: asciiz"\n Hieu: "
tich: asciiz"\n Tich: "
thuong: asciiz"\n Phan thuong: "
du: asciiz" , Phan du: "
be: asciiz"So thu nhat be hon so thu
hai"
bang: asciiz"Hai so bang nhau"
lon: asciiz"So thu nhat lon hon so thu
Khai báo chuỗi bang Khai báo chuỗi lon
In ra chuỗi nhap1
Nhập số thứ 1
In ra chuỗi nhap2 Nhập số thứ 2
Trang 22In ra chuỗi lon Nhảy đến lệnh exit
Xuất ra chuỗi be Nhảy đến lệnh exit
In ra chuỗi bang
t1= s0 + s1
In ra chuỗi tong
Xuất ra tổng cảu 2 số
Trang 26III Thực hành buổi 3 – Lab03
III.1 Lý thuyết
III.1.1 Kiến trúc thanh ghi – thanh ghi
việc tạo các mã máy đơn giản, chiều dài mã máy cố định và số chu kỳ xung nhịp cần thiết cho việc thực hiện lệnh là cố định, ít thâm nhập bộ nhớ Tuy nhiên, kiểu kiến trúc này cũng có một vài hạn chế của nó như: số lượng thanh ghi bị giới hạn, việc các thanh ghi có cùng độ dài dẫn đến không hiệu quả trong các lệnh xử lý chuối cũng như các lệnh có cấu trúc Việc lưu và phục hồi các trạng thái khi có các lời gọi thủ tục hay chuyển đổi ngữ cảnh
III.1.2 Thao tác với mảng
Mảng với n phần tử là một chuỗi n phần tử liên tiếp nhau trong bộ nhớ Thao tác
với mảng trong MIPS là thao tác trực tiếp với byte/word trong bộ nhớ
▪ Để cấp phát chuỗi word hoặc byte trong bộ nhớ, có giá trị khởi tao
sử dụng “.word” hoặc “.byte” trong “.data”
▪ Để cấp phát chuỗi byte không có giá trị khởi tạo trước, sử dụng
“.space” trong “.data”
✓ In ra cửa sổ I/O của MARS tất cả các phần tử của mảng array1 và array2:
khai báo phần tử mảng array1
khai báo kích thước mảng arr1
Trang 27array2: byte 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16
size2: word 16
mang1: asciiz "Phan tu mang arr1 la: "
mang2: asciiz "\nPhan tu mang arr2 la:
khai báo phần tử mảng array2
khai báo kích thước array2
khai báo chuỗi mang1
khai báo chuỗi mang2
Trang 28 In ra khoảng trắng
$s1=$1+1 (byte kế tiếp)
$t2=$t2+1
Kết thúc chương trình
Bảng 13-Chương trình thao tác với mảng
III.1.3 Thao tác với con trỏ
III.2 Thực hành con trỏ
Con trỏ là một biến lưu địa chỉ của một biến khác Thao tác với con trỏ trong
MIPS là thao tác trực tiếp với địa chỉ bộ nhớ
Thực hiện lại các yêu cầu của nội dung 1 với con trỏ
str1: asciiz “Nhap so phan tu cua mang: \n”
str2: asciiz “\nXuat phan tu cua mang:”
str3: asciiz "\nGia tri lon nhat cua mang: "
str4: asciiz "\nTong cac phan tu cua mang: "
str5: asciiz "\nDia chi phan tu can tim: "
str6: asciiz "\nPhan tu la: "
In ra chuỗi str1
Trang 29$s2=$s2+$s0
$t8=0
Nếu s1< s2 thì t1 = 1 Nếu t1 = 0 thì nhảy đến pre
Nhập vào v0
Lưu lại giá trị v0
$t8+=$t2 Lưu vào mảng Tăng vị trí con trỏ
In ra chuỗi str2
Nếut0 < s2 thì t3 =1 T3 = 0 thì nhảy đến pre2 Lấy giá trị tại t0
In ra khoảng trắng
Di chuyển trỏ
Trang 30Nếu s3 < s2 thì s4 =1 Nếu s4 = 0 thì nhảy đén max Lấy giá trị tại s3
Nếu s6<s5 thì s7 = 1 Nếu s7= 0 thì nhảy đến swap
Trang 31Lấy giá trị tại ô nhớ cần tìm
for (i = 2; i<10;i++)
A[i]= B[A[i-2]];
.data
str1: asciiz "Nhap vao so luong mang A: "
str2: asciiz "\nNhap vao phan tu mang A: "
str3: asciiz "\nNhap vao so luon mang B: "
str4: asciiz "\nNhap vao phan tu mang B: "
str5: asciiz "\nMang A: "
Trang 32Lưu giá trị nền cho s1
Cho t0 giữ địa chỉ cuối mảng Khởi tạo $t1=giá trị nền của mảng Khởi tạo $t4= giá trị nền của mảng
Nếu t1<t0 thì t2 = 1 Nếu t2 = 0 thì nhảy đến preA
Nhập vào v0
Trang 33In ra str5
Nếu t4 < t0 thì t5 = 1 Nếu t5 = 0 thì nhảy đến ArrB Lưu địa chỉ t4 vào t6
Xuất ra giá trị phần tử trong mảng a
Xuất ra khoảng trắng Chuyển đến phần tử kế tiếp
Trang 34Nhập vào v0, lưu vào t0 Lưu giá trị nền của mảng B
Lưu giá trị cuối mảng B vào t0 Lưu giá trị nền của mảng B
Nếu t1 < t0 thì t2 = 1 Nếu t2 = 0 thì nhảy đến preB
Nhập vào v0
Lưu lại phần tử vào mảng B
Xuất ra chuỗi str6
Trang 35Xuất ra phần tử trpng mảng
Xuất ra khoảng trắng
Nhảy đến phần tử kế tiếp
s0 = 2 Lưu giá trị nền mảng A
In ra chuỗi str5
Nếu s0 = 10 thì thoát t8 = s0 -2
t8 = t8*4 t8 = t8+s1 Lưu địa chỉ của t8 vào t9
Trang 36Xuất ra giá trị trong t7
In ra space
Lặp kế tiếp Trỏ đến địa chỉ kế tiếp của mảng A
Bảng 15-Bài tập 3b
Trang 38IV Thực hành buổi 4 -Lab04
Thanh ghi đối số: $a0 -$a3
Thanh ghi kết quả: $v0,$v1
Thanh ghi tạm: $t0- $t9
Thanh ghi lưu trữ: $s0 – $s7
Thanh ghi địa chỉ trả về: $ra
Thanh ghi con trỏ ngăn xếp: $sp
In ra chuỗi string1
Nhập n từ bàn phím
Khởi tạo $t4=$v0 (n) Khởi tạo $t4=$t4+1 (n+1) Khởi tạo $t0=1 (int i=1)
Trang 39In ra kết quả n!
Dừng chương trình
Mở ô nhớ stack Lưu địa chỉ thanh ghi $ra vào stack Nếu i<n+1 thì t3 = 1
Nếu t3= 0 thì nhảy đến exit t1 = t1 *t0
t0 = t0 +1
Nếu $sp=0 nhảy đến end Lưu địa chỉ của $sp vào $ra Trả về stack
Nhảy đến $ra Gọi hàm exit
Kết thúc chương trình
Bảng 16-Bài tập 4a
Trang 40Hình 8- Kết quả bài tập 4a.1
Hình 9-Kết quả bài tập 4a.2
In ra chuỗi 1
Nhập giá trị vào v0
Trang 41In ra chuỗi 2
Nếu t1= t0 thì dừng(exit) t2 = t2+ t3
t3 = t2 – t3
In ra khoảng trống
In ra giá trị thanh ghi t3
Nhảy đến phần tử kế tiếp Kết thúc chương trình
Bảng 17-Bài tập 4b
Trang 42Hình 10-Kết quả bài tập 4b.1
Hình 11-Kết quả bài tập 4b.2
Trang 49 Các khối hoạt động: Registers + ALU + PC