You are on page 1of 14

Khoa Kỹ thuật Máy tính – Trường Đại học Công nghệ Thông tin

THỰC HÀNH TỔ CHỨC VÀ CẤU TRÚC MÁY TÍNH II


IT012 – LAB03
Họ và tên Trần Ngô Gia Bảo
MSSV 21521864
Lớp IT012.N14.2

1. Thực hành
1.1. Nội dung 1
2.1. Sinh viên tìm hiểu tài liệu “Một số lệnh MIPS cơ bản” và mô phỏng chức năng của các lệnh cơ bản sau:
STT Lệnh Cú pháp Ý nghĩa lệnh
1 Add add rd,rs,rt R[rd] = R[rs] + R[rt]
Thực hiện cộng giá trị
thanh ghi rs với giá trị
thanh ghi rt, tổng đưa
vào thanh ghi rd
2 Addi Addi rt ,rs,imm R[rt] = R[rs] +
SignExtImm
Thực hiện cộng giá trị
thanh ghi rs với số tức
thời, kết quả đưa vào
thanh ghi rt.
3 Addu addu rd,rs,rt R[rd] = R[rs] + R[rt]
Thực hiện cộng giá trị
thanh ghi rs với giá trị
thanh ghi rt, tổng đưa
vào thanh ghi rd,
không xét kết quả có
bị overflow hay không
4 Sub sub rd,rs,rt R[rd] = R[rs] - R[rt]
Thực hiện trừ giá trị
thanh ghi rs với giá trị
thanh ghi rt, hiệu đưa
vào thanh ghi rd
5 And and rd,rs,rt Thực hiện giao giá trị
Khoa Kỹ thuật Máy tính – Trường Đại học Công nghệ Thông tin
thanh ghi rs với giá trị
thanh ghi rt, kết quả
lưu vào rd
6 Andi and rd,rs,imm Thực hiện giao giá trị
thanh ghi rs với giá trị
tức thời imm, kết quả
lưu vào rd
7 Or or rd,rs,rt Thực hiện hội giá trị
thanh ghi rs với giá trị
thanh ghi rt, kết quả
lưu vào rd
8 Ori ori rt,rs,zeroextimm Thực hiện hội giá trị
thanh ghi rs với 1 số
tức thời , kết quả lưu
vào rd
9 Sll Sll rd,rt,shamt R[rd] = R[rt] << shamt
Thanh ghi rt dịch trái
shamt bit và kết quả
lưu vào thanh ghi rd
( ‘<< ‘ là ký hiệu của
phép toán dịch trái)
10 Srl Srl rd,rt,shamt srl: R[rd] = R[rt] >>>
shamt
Thanh ghi rt dịch phải
shamt bit và kết quả
lưu vào thanh ghi rd
( ‘>>> ‘ là ký hiệu của
phép toán dịch phải)
11 Sw sw rt,address M[R[rs]+SignExtImm]
= R[rt]
Lưu giá trị thanh ghi rt
vào từ nhớ có địa chỉ
được tính bằng giá trị
thanh ghi rs cộng với
offset (offset được mở
Khoa Kỹ thuật Máy tính – Trường Đại học Công nghệ Thông tin
rộng có dấu thành số
32 bits trước khi cộng)
12 Sb sb rt,address M[R[rs] +
SignExtImm](7:0) =
R[rt](7:0)
Lấy byte thấp nhất của
trong thanh ghi rt lưu
vào byte thấp nhất của
từ nhớ có địa chỉ được
tính bằng giá trị thanh
ghi rs cộng với offset
(offset được mở rộng
có dấu thành số 32 bits
trước khi cộng)
13 Lw lw rt,address R[rt] = M[R[rs] +
SingExtImm]
Lấy giá trị trong thanh
ghi rs cộng với số tức
thời đang lưu trong
offset (số tức thời này
này được mở rộng có
dấu thanh 32 bits) ta
được địa chỉ của từ
nhớ cần lấy dữ liệu.
Dữ liệu của từ nhớ này
sẽ được lấy để lưu vào
thanh ghi rt
14 Lb lb rt,address R[rt] = {24’b0,
M[R[rs] +
SignExtImm](7:0)}
Không giống lw là
load hết toàn bộ 1 từ
nhớ vào thanh ghi rt,
lệnh này chỉ load về 1
byte đầu tiên trong từ
Khoa Kỹ thuật Máy tính – Trường Đại học Công nghệ Thông tin
nhớ vào rt
15 Slt slt rd,rs,rt R[rd] = (R[rs] <
R[rt])? 1 : 0
Kiểm tra xem giá trị
trong thanh ghi rs có
nhỏ hơn thanh ghi rt
hay không, nếu nhỏ
hơn thì thanh ghi rd
nhận giá trị là 1;
ngược lại thanh ghi rd
sẽ nhận giá trị 0
16 Slti slti rt,rs,imm R[rd] = (R[rs] <
SignExtImm)? 1 : 0
Ý nghĩa so sánh giá trị
một thanh ghi với một
số tức thời, nếu giá trị
trong thanh ghi rs nhỏ
hơn số tức thời thì
thanh ghi rd nhận giá
trị là 1; ngược lại
thanh ghi rd sẽ nhận
giá trị 0(
so sánh 2 giá trị theo
kiểu có dấu dạng bù 2)
17 Beq beq rs,rt,label if(R[rs] = = R[rt]) PC
= PC + 4 +
BranchAddr
Nếu giá trị thanh ghi rs
bằng rt thì chương
trình nhảy tới lệnh mà
cách lệnh beq đang xét
là imm lệnh, tức địa
chỉ con trỏ/thanh ghi
PC sẽ chuyển thành
PC + 4 + imm*4 (đối
Khoa Kỹ thuật Máy tính – Trường Đại học Công nghệ Thông tin
với trường hợp mỗi
lệnh lưu trong một
word 4 bytes) = PC +
4 + BranchAddr
BranchAddr = imm *
4 (đối với trường hợp
mỗi lệnh lưu trong một
word 4 bytes)
18 Bne bne rs,rt,label Nếu giá trị thanh ghi rs
không bằng rt thì
chương trình nhảy tới
lệnh mà cách lệnh beq
đang xét là imm lệnh,
tức địa chỉ con
trỏ/thanh ghi PC sẽ
chuyển thành PC + 4 +
imm*4 (đối với trường
hợp mỗi lệnh lưu trong
một word 4 bytes) =
PC + 4 + BranchAddr
BranchAddr = imm *
4 (đối với trường hợp
mỗi lệnh lưu trong một
word 4 bytes)
19 Syscall 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ả lập bởi
MARS). Sau đó, HĐH
sẽ xem giá trị thanh
ghi $v0 để
xác định xem chương
trình muốn nó làm
việc gì.
Khoa Kỹ thuật Máy tính – Trường Đại học Công nghệ Thông tin
1.2. Nội dung 2
Mô phỏng các ví dụ bên dưới và cho biết ý nghĩa của chương trình:
Ví dụ 1:
Code Giải thích
.data Khai báo vủng nhớ data
var: .word 10 Tạo biến số nguyên var chiếm 1 word lưu trữ, giá
trị khởi tạo bằng 10
.text Khai báo vùng nhớ text
main: Điểm bắt đầu chương trình
lw $t0,var Thanh ghi t0 lưu giá trị var
li $t1,5 Đưa giá trị 5 vào thanh ghi t1
sw $t1,var Var lưu giá trị t1

Ví dụ 2 :
Code Giải thích
.data Khai báo vủng nhớ data
string: .asciiz "UIT-HCMVNU\n" Khai báo chuỗi string "UIT-HCMVNU\n"
.text Khai báo vùng nhớ text
main: Điểm bắt đầu chương trình
li $v0,4 Truyền tham số 4 vào v0, ở đây là chức năng in
chuỗi ký tự mà địa chỉ được lưu trong a0
Khoa Kỹ thuật Máy tính – Trường Đại học Công nghệ Thông tin
la $a0,string Thanh ghi a0 lưu địa chỉ biến string
syscall Thực hiện chức năng

Ví dụ 3 :
Code Giải thích
.data Khai báo vủng nhớ data
.text Khai báo vùng nhớ text
main: Điểm bắt đầu chương trình
addi $s0,$0,3 Cộng giá trị thanh ghi t0 với 3 kết quả lưu vào
thanh ghi s0
li $s1,7 Đưa giá trị 7 vào thanh ghi s1
move $t0,$s0 Di chuyển giá trị thanh ghi s0 vào thanh ghi t0
move $s0, $s1 Di chuyển giá trị thanh ghi s1 vào thanh ghi s0
move $s1,$t0 Di chuyển giá trị thanh ghi t0 vào thanh ghi s1
Khoa Kỹ thuật Máy tính – Trường Đại học Công nghệ Thông tin

Ví dụ 4:
Code Giải thích
.data Khai báo vủng nhớ data
array: .word 1234567 Khai báo mảng array đã được khởi tạo
.text Khai báo vùng nhớ text
start:
la $a0,array Thanh ghi a0 lưu địa chỉ array
lw $t0,0($a0) Thanh ghi t0 lưu giá trị array[0]
lw $t1,4($a0) Thanh ghi t1 lưu giá trị array[1]
addi $t7,$a0,8 Cộng địa chỉ a0 với 8 kết quả lưu vào thanh ghi t7
lw $t2,($t7) Thanh ghi t2 lưu giá trị thanh ghi t7
lw $t3,12($a0) Thanh ghi t3 lưu giá trị array[3]
li $t4,8 Đưa giá trị 8 vào thanh ghi t4
sw $t4,4($a0) Gán array[1]= giá trị thanh ghi t4
lw $t4,4($a0) Thanh ghi t4 lưu giá trị array[1]
Khoa Kỹ thuật Máy tính – Trường Đại học Công nghệ Thông tin

1.3. Nội dung 3


3.1 a.Thực hiện Khai báo và xuất ra cửa số I/O các chuỗi sau:
- Chuỗi 1: “Chuong trinh lam quen hop ngu Assembly”
- Chuỗi 2: “Hello World!”
Code Giải thích
.data Khai báo vủng nhớ data
constr1: .asciiz "Chuong trinh lam quen hop Khai báo chuỗi constr1= Chuong trinh lam quen
ngu Assembly\n" hop ngu Assembly\n
constr2: .asciiz "Hello World!" Khai báo chuỗi constr2 =Hello World!
.text Khai báo vùng nhớ text
main: Điểm bắt đầu chương trình
la $a0,constr1 Thanh ghi a0 lưu địa chỉ constr1
li $v0,4 Truyền tham số 4 vào v0, ở đây là chức năng in
chuỗi ký tự mà địa chỉ được lưu trong a0
syscall Thực hiện chức năng in chuỗi constr1
la $a0,constr2 Thanh ghi a0 lưu địa chỉ constr2
li $v0,4 Truyền tham số 4 vào v0, ở đây là chức năng in
chuỗi ký tự mà địa chỉ được lưu trong a0
syscall Thực hiện chức năng in chuỗi constr2
Khoa Kỹ thuật Máy tính – Trường Đại học Công nghệ Thông tin

b. Xuất chuỗi đã nhập từ bàn phím


Ví dụ: Nhap: Truong Dai hoc Cong nghe Thong tin
Xuat: Truong Dai hoc Cong nghe Thong tin
Code Giải thích
.data Khai báo vủng nhớ data
nhap: .asciiz "Nhap chuoi: " Khai báo chuỗi nhap=”Nhap chuoi”
xuat: .asciiz"\nXuat chuoi: " Khai báo chuỗi xuat=”Xuat chuoi”
buffer: .space 100 Tạo 1 mảng buffer có 100 bytes liên tục nhau, chua
khởi tạo giá trị
.text Khai báo vùng nhớ text
Điểm bắt đầu chương trình
main:
li $v0,4 Truyền tham số 4 vào v0, ở đây là chức năng in
chuỗi ký tự mà địa chỉ được lưu trong a0
la $a0,nhap Thanh ghi a0 lưu địa chỉ của nhap
syscall Thực hiện chức năng

li $v0,8 Truyền tham số 8 vào v0, ở đây là chức năng đọc


chuỗi ký tự mà địa chỉ được lưu trong a0
la $a0,buffer Thanh ghi a0 lưu địa chĩ buffer
li $a1,100
Đưa 100 vào thanh ghi a1
Khoa Kỹ thuật Máy tính – Trường Đại học Công nghệ Thông tin
syscall
Thực hiện chức năng
move $s0,$a0

Gán giá trị trị của a0 vào s0


li $v0,4

Truyền tham số 4 vào v0, ở đây là chức năng in


la $a0,xuat
chuỗi ký tự mà địa chỉ được lưu trong a0
syscall
Thanh ghi a0 lưu địa chỉ của xuat
Thực hiện chức năng
move $a0,$s0
syscall
Gán giá trị của s0 vào a0

Thực hiện chức năng

3.2. Nhập xuất số ra cửa sổ I/O của MARS


Code Giải thích
.data Khai báo vủng nhớ data
nhapa: .asciiz "Nhap a = " Khai báo chuỗi nhapa=”Nhap a = ”
Khai báo chuỗi nhapb=”Nhap b = ”
nhapb: .asciiz "Nhap b = "
tong: .asciiz "Tong a + b = " Khai báo chuỗi tong=”Tong a + b = ”
Khoa Kỹ thuật Máy tính – Trường Đại học Công nghệ Thông tin
hieu: .asciiz "\nHieu a - b = "
tich: .asciiz "\nTich a * b = " Khai báo chuỗi hieu=”Hieu a - b = ”
Khai báo chuỗi tich=”Tich a * b = ”
thuong: .asciiz "\nThuong a / b = " Khai báo chuỗi thuongn=”\nThuong a / b = ”
.text
Khai báo vùng nhớ text
main:
Điểm bắt đầu chương trình
li $v0,4
Truyền tham số 4 vào v0, ở đây là chức năng in
la $a0,nhapa chuỗi ký tự mà địa chỉ được lưu trong a0
syscall Thanh ghi a0 lưu địa chỉ nhapa
Thực hiện chức năng

li $v0,5
syscall Truyền tham số 5 vào v0, ở đây là chức năng đọc
số nguyên mà địa chỉ được lưu ở trong v0
Thực hiện chức năng
move $s1,$v0

Lưu giá trị số nguyên ở v0 vào s1


li $v0,4

la $a0,nhapb Truyền tham số 4 vào v0, ở đây là chức năng in


syscall chuỗi ký tự mà địa chỉ được lưu trong a0
Thanh ghi a0 lưu địa chỉ của nhapb
Thực hiện chức năng
li $v0,5
syscall
Truyền tham số 5 vào v0, ở đây là chức năng đọc
số nguyên mà địa chỉ được lưu ở trong v0
move $s2,$v0
Thực hiện chức năng

li $v0,4
Lưu giá trị số nguyên ở v0 vào s2

la $a0,tong
syscall Truyền tham số 4 vào v0, ở đây là chức năng in
chuỗi ký tự mà địa chỉ được lưu trong a0
li $v0,1 Thanh ghi a0 lưu địa chỉ tong
add $a0,$s1,$s2 Thực hiện chức năng

syscall
Truyền tham số 1 vào v0, ở đây là chức năng in số
li $v0,4 nguyên mà địa chỉ được lưu ở trong a0
Tổng giá trị của s1 và s2 , kết quả lưu ở trong a0
Khoa Kỹ thuật Máy tính – Trường Đại học Công nghệ Thông tin
Thực hiện chức năng
la $a0,hieu
syscall
Truyền tham số 4 vào v0, ở đây là chức năng in
chuỗi ký tự mà địa chỉ được lưu trong a0
li $v0,1
Thanh ghi a0 lưu địa chỉ của hieu
sub $a0,$s1,$s2 Thực hiện chức năng
syscall

Truyền tham số 1 vào v0, ở đây là chức năng in số


li $v0,4 nguyên mà địa chỉ được lưu ở trong a0
Hiệu giá trị của s1 và s2 , kết quả lưu ở trong a0
Thực hiện chức năng
la $a0,tich
syscall
Truyền tham số 4 vào v0, ở đây là chức năng in

li $v0,1 chuỗi ký tự mà địa chỉ được lưu trong a0


Thanh ghi a0 lưu địa chỉ của tich

mult $s1,$s2 Thực hiện chức năng


syscall

Truyền tham số 1 vào v0, ở đây là chức năng in số


li $v0,4
nguyên mà địa chỉ được lưu ở trong a0

la $a0,thuong Thực hiện tích giá trị s1 và s2


Thực hiện chức năng
syscall

li $v0,1 Truyền tham số 4 vào v0, ở đây là chức năng in


chuỗi ký tự mà địa chỉ được lưu trong a0
div $a0, $s1,$s2 Thanh ghi a0 lưu địa chỉ của thuong

Thực hiện chức năng


syscall

Truyền tham số 1 vào v0, ở đây là chức năng in số


nguyên mà địa chỉ được lưu ở trong a0

Thực hiện chia giá trị s1 cho s2, kết quả lưu ở a0

Thực hiện chức năng


Khoa Kỹ thuật Máy tính – Trường Đại học Công nghệ Thông tin

You might also like