1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÁO cáo TỔNG kết môn THỰC HÀNH KIẾN TRÚC máy TÍNH – CE119 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

49 19 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Báo Cáo Tổng Kết Môn Thực Hành Kiến Trúc Máy Tính – CE119
Tác giả Nguyễn Tuấn Anh
Người hướng dẫn Trần Quốc Sơn
Trường học Đại Học Quốc Gia Thành Phố Hồ Chí Minh
Chuyên ngành Kỹ Thuật Máy Tính
Thể loại Báo Cáo
Năm xuất bản 2022
Thành phố Thành Phố Hồ Chí Minh
Định dạng
Số trang 49
Dung lượng 2,1 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 2

MỤ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 3

III.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 4

DANH 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 5

DANH 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 6

I 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 7

And 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 8

syscall 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 9

main:

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 10

li $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 11

Bảng 5-Bài tập 1d

Hình 4-Kết quả bài tập 1d

Trang 12

II 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 13

j 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 15

Hì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 16

In 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 18

In 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 19

seven: 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 21

Bả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 22

In 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 26

III 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 27

array2: 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 30

Nế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 31

Lấ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 32

Lư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 33

In 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 34

Nhậ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 35

Xuấ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 36

Xuấ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 38

IV 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 39

In 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 40

Hì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 41

In 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 42

Hì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

Ngày đăng: 20/06/2022, 06:01

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w