Professional Documents
Culture Documents
TC&CTMT Ii
TC&CTMT Ii
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
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
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
Thực hiện chia giá trị s1 cho s2, kết quả lưu ở a0