You are on page 1of 8

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

HỒ CHÍ MINH
TRƯỜNG ĐAI HỌC CÔNG NGHỆ THÔNG TIN

TỐ CHỨC VÀ CẤU TRÚC MÁY TÍNH II


LỚP: IT012.N21

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

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


Sinh viên: Đặng Thanh Ngân
MSSV: 22520929

1
MỤC LỤC:

2.Thực hành.................................................................................................................3
2.1 Mô phỏng và cho biết chức năng của một số lệnh MIPS cơ bản.........................3
2.2 Mô phỏng và cho biết chức năng của một số lệnh MIPS cơ bản.........................3
3. Bài tập.......................................................................................................................5
3.1 Nhập vào một chuỗi, xuất ra cửa sổ I/O của MARS theo từng yêu cầu sau:.......5
a) Khai báo và xuất ra cửa sổ I/O 2 chuỗi có giá trị như sau:.................................5
b) Biểu diễn nhị phân của 2 chuỗi trên dưới bộ nhớ là gì?.....................................5
c) Xuất ra lại đúng chuỗi đã nhập...........................................................................6
d) Nhập vào 2 số nguyên sau đó xuất tổng của 2 số nguyên này............................7

2
2.Thực hành
2.1 Mô phỏng và cho biết chức năng của một số lệnh MIPS cơ bản.

STT Lệnh Chức năng Ví dụ


Cộng giá trị hai thanh ghi và lưu kết quả vào 1
1 add add $s1,$s2,$s3
thanh ghi
Cộng giá trị thanh ghi với một số nguyên và lưu kết
2 addi addi $s1,$s2,100
quả vào 1 thanh ghi
Cộng giá trị 2 thanh ghi và lưu kết quả vào 1 thanh
3 addu ghi, giá trị của 2 thanh ghi ban đầu được xem như addu $s1,$s2,$s3
số nguyên không dấu
Cộng giá trị 1 thanh ghi với một số nguyên và lưu
kết quả vào 1 thanh ghi khác, giá trị của thanh ghi
4 addiu addiu $s1,$s2,100
ban đầu, số nguyên được xem như số nguyên
không dấu
Trừ giá trị 2 thanh ghi và lưu kết quả vào 1 thanh
5 sub sub $s1,$s2,$s3
ghi
Trừ giá trị 2 thanh ghi và lưu kết quả vào 1 thanh
6 subu ghi, giá trị của 2 thanh ghi ban đầu được xem như subu $s1,$s2,$s3
số nguyên không dấu
7 and Lưu kết quả thanh ghi s2 and s3 vào thanh ghi s1 and $s1,$s2,$s3
8 andi Lưu kết quả thanh ghi s2 and 100 vào thanh ghi s1 andi $s1,$s2,100
9 or Lưu kết quả thanh ghi s2 or s3 vào thanh ghi s1 or $s1,$s2,$s3
10 nor Lưu kết quá s2 nor s3 vào s1 nor $s1,$s2,$s3
Lưu dữ liệu trong địa chỉ thanh ghi s2 cộng với số
11 lw lw $s1,10($s2)
nguyên 10 vào thanh ghi s1
Lưu dữ liệu trong địa chỉ thanh ghi s1 vào địa chỉ
12 sw sw $s1,10($s2)
thanh ghi $s2 cộng với số nguyên 10
13 slt Gán 1 váo s1 nếu s2<s3 và ngược lại gán 0 slt $s1,$s2,$s3
14 slti Gán 1 váo s1 nếu s2<100 và ngược lại gán 0 slti $s1,$s2,100
Gán 1 váo s1 nếu s2<s3 và ngược lại gán 0, so sánh
15 sltu sltu $s1,$s2,$s3
trên là so sánh không dấu
Gán 1 váo s1 nếu s2<100 và ngược lại gán 0, so
16 sltiu sltiu $s1,$s2,100
sánh trên là so sánh không dấu
Lệnh syscall làm treo sự thực thi của chương trình
và chuyển quyền điều khiển cho HĐH (được giả
syscal
17 lập bởi MARS). Sau đó, HĐH sẽ xem giá trị thanh
l
ghi $v0 để xác định xem chương trình muốn nó làm
việc gì
2.2 Mô phỏng và cho biết chức năng của một số lệnh MIPS cơ bản.

3
Chương trình Ý nghĩa
.data #khai báo vùng nhớ data
varl: .word 23 #khai báo biến kiểu word: var1=23

.text #khai báo vùng nhớ text


__start:
lw $t0,varl #t0 lưu giá trị var1
#t1=5
#var1 lưu giá trị t1
Bảng 2.2.1 Ví dụ 1
Chương trình Ý nghĩa
.data #khai báo vùng nhớ data
array1: .space 12 #cấp 12-byte bộ nhớ, chưa được khởi tạo
.text #khai báo vùng nhớ text
la $t0, array1 #t0 lưu giá trị var1
li $t1,5 #t1=5
sw $t1, ($t0) #var1 lưu giá trị t1
li $t1, 13 #t1=13
sw $t1, 4($t0) #giá trị của thanh ghi 1 gán vào t0 +4
li $t1, -7 #t1=-7
sw $t1, 8($t0) #giá trị của thanh ghi 1 gán vào t0 +8
Bảng 2.2.2 Ví dụ 2
Chương trình Ý nghĩa
li $v0,5 #v0=5
syscall #Xuất gia trị v0

Bảng 2.2.33 Ví dụ 3
Chương trình Ý nghĩa
.data #khai báo vùng nhớ data
string1: .asciiz "Print this.\n" #khai báo mảng kiểu asciiz: string1 ="Print this.\n"
.text #khai báo vùng nhớ text
main:
li $v0,4 #v0 =4
la $a0, string1 #gán mảng a0= string
syscall #Xuất mảng được lưu ở a0
Bảng 2.2.33 Ví dụ 4

4
3. Bài tập
3.1 Nhập vào một chuỗi, xuất ra cửa sổ I/O của MARS theo từng yêu cầu sau:
a) 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 ^-^
Chương trình Ý nghĩa
.data
string1: .asciiz "Chao ban! Ban la sinh vien nam # Gán mảng string1 là một chuỗi
thu may?"
string2: .asciiz "Hihi, minh la sinh vien nam thu 1
^-^"
.text #Gán v0 bằng 4
li $v0, 4 #Gán a0 là mảng cần xuất
la $a0, string1 # Thực hiện xuất mảng
syscall
la $a0, string2
syscall

b) Biểu diễn nhị phân của 2 chuỗi trên dưới bộ nhớ là gì?
Mỗi ô nhớ lưu 4 kí tự từ phải sang trái. Các kí tự lần lượt được lưu trong mỗi ô trong 1 word
cho đến khi đủ 4 byte mới chuyển sang địa chị mới tiếp theo.
01101111011000010110100001000011 :oahC
01101110011000010110001000100000 :nab
01100001010000100010000000100001 :! Ba
01100001011011000010000001101110 :al n
01101110011010010111001100100000 :nis
01101001011101100010000001101000 :iv h
01101110001000000110111001100101 :n ne
01110100001000000110110101100001 :t ma

01101101001000000111010101101000 :m uh

5
00000000001111110111100101100001 :\0?ya
01101001011010000110100101001000 :ihiH
01101001011011010010000000101100 :im ,
01101100001000000110100001101110 :l hn
01101001011100110010000001100001 :is a
01110110001000000110100001101110 :v hn
00100000011011100110010101101001 : nei
00100000011011010110000101101110 : man
00100000011101010110100001110100 : uht
00101101010111100010000000110001 :-^ l
00000000000000000000000001011110 :\0\0\0^

c) Xuất ra lại đúng chuỗi đã nhập


Chương trình Ý nghĩa
.data
6
string: .space 40 #string là một không gian gồm 40 bit
.text
li $v0, 8 #Gán v0 là 8 ứng với việc nhập chuỗi
la $a0,string #Đưa địa chỉ biến để nhập chuỗi
li $a1, 40 #Chiều dài của biến lưu chuỗi input
syscall #Nhập chuỗi
li $v0,4 #Gán v0 là 4 ứng với xuất chuỗi
syscall #Xuất chuỗi được lưu ở a0

d) Nhập vào 2 số nguyên sau đó xuất tổng của 2 số nguyên này


Chương trình Ý nghĩa
.data

.text
li $v0, 5 #Gán v0 bằng 5 ứng với nhập một số nguyên
syscall #Nhập một số nguyên
la $t1,($v0) #Gán giá trị t1 bằng giá trị v0 cộng 0
li $v0, 5 # Gán v0 bằng 5 ứng với nhập một số nguyên
syscall #Nhập một số nguyên
la $t2,($v0) #Gán giá trị t2 bằng giá trị v0 cộng 0
add $t3, $t2, $t1 #Giá trị t3 bằng t2 cộng t1
li $v0, 1 #Giá trị v0 gán bằng 1 ứng với xuất số nguyên
la $a0, ($t3) #Giá trị a0 gán bằng giá trị t3
#Xuất giá trị của a0
7
syscall

You might also like