Các dạng MIPS - Tổ chức và Cấu trúc Máy tính II | Trường Đại học CNTT Thành Phố Hồ Chí Minh

Các dạng MIPS - Tổ chức và Cấu trúc Máy tính II | Trường Đại học CNTT Thành Phố Hồ Chí Minh được được sưu tầm và soạn thảo dưới dạng file PDF để gửi tới các bạn sinh viên cùng tham khảo, ôn tập đầy đủ kiến thức, chuẩn bị cho các buổi học thật tốt. Mời bạn đọc đón xem!

lOMoARcPSD| 39651089
#Bài 1 - Cách gán số nguyên cho 1 thanh ghi (3 cách):
#Gán 10 cho thanh ghi $t1
#Gán 15 cho thanh ghi $t2
#Gán 20 cho thanh ghi $t3
.data # Phần để khai báo dữ liệu
number: .word 10
.text # Phần code chính lw $t1, number #lấy giá trị của nhãn number gán
vào thanh ghi $t1 li $t2, 15 # $t2 = 15 addi $t3, $zero, 20 #$t3 = 0
+ 20
#Bài 2 - Gán chuỗi vào thanh ghi (chỉ có 1 cách)
.data string: .asciiz "Hi, xin chao"
.text la $t1, string
# Bài 3 - Cách thao tác các phép toán +, -, *, /
.data
.text li $t1, 32 # $t1 = 32
li $t2, 5 #$t2 = 5
#phép +
add $t3, $t1, $t2 #$t3 = $t1 + $t2
#phép -
sub $t4, $t1, $t2 #$t3 = $t1 - $t2
#phép *
mul $t5, $t1, $t2 #$t3 = $t1 * $t2
#phép /
div $t1, $t2 #$t3 = $t1 / $t2, kết quả ra ở lo, số dư ra ở
hi mflo $t6 # Gán kết quả thương vào $t6 mfhi $t7
# Gán kết quả số dư vào $t7
#Bài 4 - Nhập số nguyên từ bàn phím
.data
.text
addi $v0, $zero, 5 # $v0 = 0 + 5
syscall move
$t2, $v0
#Bài 5 - Nhập chuổi từ bàn phím
.data chuoi: .asciiz
.text
li $v0, 8
la $a0, chuoi
li $a0, 30 #Số ký tự tối đa là 30 ghi vào a0
syscall
lOMoARcPSD| 39651089
#Bài 6 - In so nguyên ra màn hình
.data
.text li $v0, 1 li
$a0, 5
syscall
#Bài 7 - Xuất chuổi ra màn hình
.data chuoi: .asciiz "Hey, hello!!!\n"
.text li $v0, 4 la
$a0, chuoi
syscall
li $v0, 4
la $a0, chuoi
syscall
#Bài 9 - THao tác các phép so sanh: =, <, <=, >, >=
.data
.text li $s1, 10 li
$s2, 5
seq $t1, $s1, $s2
#($s1 = $s2) đúng -> $t1 = 1, sai $t1 = 0
slt $t2, $s1, $s2
#($s1 < $s2) đúng -> $t2 = 1, sai $t2 = 0
sle $t3, $s1, $s2
#($s1 <= $s2) đúng -> $t3 = 1, sai $t3 = 0
sgt $t4, $s1, $s2
#($s1 > $s2) đúng -> $t4 = 1, sai $t4 = 0
sge $t5, $s1, $s2
#($s1 >= $s2) đúng -> $t5 = 1, sai $t5 = 0
#Bài 10 - Thao tác điều khiển rẻ nhánh
.data chuoi1: .asciiz "Bang nhau"
chuoi2: .asciiz "Khong bang nhau"
.text li $t1, 50 li
$t2, 5
#Rẻ nhánh có điều kiện
#beq $t1, $t2, in_chuoi1 #($t1 = #t2) đúng -> in_chuoi1
#Rẻ nhánh kho6gn điều kiện
b in_chuoi1
#In chuổi 2
#li $v0, 4
#la $a0, chuoi2
#syscall
#Kết thúc chương trình syscall
lOMoARcPSD| 39651089
li $v0, 10
syscall
in_chuoi1: #In chuổi
1 li $v0, 4 la
$a0, chuoi1
syscall
#Bài 11: Điều khiển lặp
.data chuoi: .asciiz "Hello!!!\n"
.text
li $t1, 1 #Biến điều khiển lặp
lap: # Điều kiện lặp $t1 <=5
bgt $t1, 5, thoat_lap #điều khiển kết thúc lặp. ($t1> 5) dúng -> thoát lặp
#In chuổi ra màn hình
li $v0, 4
la $a0, chuoi syscall addi $t1, $t1, 1 #tăng
biến điều khiển lên 1
j lap #Nhảy tới nhãn lập
thoat_lap:
#Bài 12: - Hàm thủ tục
.data chuoi: .asciiz "Hey hello!!!"
.text
main:
jal inra_manhinh #Nhảy đến inra_namhinh lưu địa chỉ dòng lệnh kế tiếp vào
thanh $ra
#kết thúc chuong trình
li $v0, 10
syscall
inra_manhinh:
#In ra màn hình li
$v0, 4 la
$a0, chuoi
syscall
jr $ra #Lệnh này nhảy về nhãn main: ở dòng tiếp theo của nhãn đang chạy là: li
$v0, 10
lOMoARcPSD| 39651089
# Bài 13 - Lệnh sb(store byte), lb(load byte)
# Lệnh sb lưu 1 giá trị vào 1 byte bộ nhớ
# Lệnh lb lấy 1 giá trị vào 1 byte bộ nhớ
.data chuoi: .asciiz "Hello!"
.text li $t1, 'a' #Thanh ghi $t1 hiện thị số 97
#sb <tham số đầu tiên là giá trị> giá_trị, offset(address) = offset + address li
$t2, 268500992
sb $t1, 0($t2) #lúc này offset = 0
#Load byte
la $t3, chuoi
lb $t4, 1($t3)
# Bài 14 - Lệnh sw(store word), lw(load word)
# Lệnh sb lưu 1 giá trị vào 1 word (4byte) bộ nhớ
# Lệnh lb lấy 1 giá trị vào 1 byte bộ nhớ
.data list: .word 5, 10, 4, 7
.text
#sw (store word)
#li $t1, 10
#li $t2, 268500992
#sw $t1, 268500996 # 268500996 địa chỉ của word
#sw $t1, 8($t2)
#Load wrod
la $t4, list lw
$t5, 8($t4)
#bai 15: Kỹ thuật sao lưu
#mặc định dữ liệu ghi dữ liệu theo Stack: vào trước -> ngăn dưới, vào sau ngăn trên
.data
.text
main:
li $a0, 10
jal func #in
giá trị $a0
li $v0, 1
syscall
#Kết thúc chuong trình
li $v0, 10
syscall
func: # Hàm in 5 ra màn hình addi $sp, $sp,-4
#kỹ thuật sao lưu dữ liệu
lOMoARcPSD| 39651089
sw $a0, ($sp) #kỹ thuật sao lưu dữ liệu li $v0,
1 li $a0, 5
syscall
lw $a0, ($sp) #kỹ thuật sao lưu dữ liệu
jr $ra
#Bài tập all: Viết chương trình cho phép nhập tên và tuổi, sau đó in ra màn hình
.data chuoi1: .asciiz "Nhap Ten: "
chuoi2: .asciiz "Nhap tuoi "
ten: .asciiz
.text
#hiển thị chuỗi 1
li $v0, 4 la $a0,
chuoi1 syscall
#Nhap ten li
$v0, 8 la $a0,
ten li $a1, 50
syscall move
$t1, $a0
#Hiển thị chuỗi 2
li $v0, 4 la $a0,
chuoi2 syscall
#Nhap tuoi li
$v0, 5 syscall
move $t2, $v0
#In ten ra màn hình
li $v0, 4
move $a0, $t1
syscall #In tuổi ra
màn hình li $v0, 1
move $a0, $t2
syscall
| 1/5

Preview text:

lOMoAR cPSD| 39651089
#Bài 1 - Cách gán số nguyên cho 1 thanh ghi (3 cách): #Gán 10 cho thanh ghi $t1 #Gán 15 cho thanh ghi $t2 #Gán 20 cho thanh ghi $t3
.data # Phần để khai báo dữ liệu number: .word 10
.text # Phần code chính lw $t1, number #lấy giá trị của nhãn number gán
vào thanh ghi $t1 li $t2, 15 # $t2 = 15 addi $t3, $zero, 20 #$t3 = 0 + 20
#Bài 2 - Gán chuỗi vào thanh ghi (chỉ có 1 cách)
.data string: .asciiz "Hi, xin chao" .text la $t1, string
# Bài 3 - Cách thao tác các phép toán +, -, *, / .data .text li $t1, 32 # $t1 = 32 li $t2, 5 #$t2 = 5 #phép + add $t3, $t1, $t2 #$t3 = $t1 + $t2 #phép - sub $t4, $t1, $t2 #$t3 = $t1 - $t2 #phép * mul $t5, $t1, $t2 #$t3 = $t1 * $t2 #phép / div $t1, $t2
#$t3 = $t1 / $t2, kết quả ra ở lo, số dư ra ở hi mflo $t6
# Gán kết quả thương vào $t6 mfhi $t7
# Gán kết quả số dư vào $t7
#Bài 4 - Nhập số nguyên từ bàn phím .data .text addi $v0, $zero, 5 # $v0 = 0 + 5 syscall move $t2, $v0
#Bài 5 - Nhập chuổi từ bàn phím .data chuoi: .asciiz .text li $v0, 8 la $a0, chuoi li $a0, 30
#Số ký tự tối đa là 30 ghi vào a0 syscall lOMoAR cPSD| 39651089
#Bài 6 - In so nguyên ra màn hình .data .text li $v0, 1 li $a0, 5 syscall
#Bài 7 - Xuất chuổi ra màn hình
.data chuoi: .asciiz "Hey, hello!!!\n" .text li $v0, 4 la $a0, chuoi syscall li $v0, 4 la $a0, chuoi syscall
#Bài 9 - THao tác các phép so sanh: =, <, <=, >, >= .data .text li $s1, 10 li $s2, 5 seq $t1, $s1, $s2
#($s1 = $s2) đúng -> $t1 = 1, sai $t1 = 0 slt $t2, $s1, $s2
#($s1 < $s2) đúng -> $t2 = 1, sai $t2 = 0 sle $t3, $s1, $s2
#($s1 <= $s2) đúng -> $t3 = 1, sai $t3 = 0 sgt $t4, $s1, $s2
#($s1 > $s2) đúng -> $t4 = 1, sai $t4 = 0 sge $t5, $s1, $s2
#($s1 >= $s2) đúng -> $t5 = 1, sai $t5 = 0
#Bài 10 - Thao tác điều khiển rẻ nhánh
.data chuoi1: .asciiz "Bang nhau"
chuoi2: .asciiz "Khong bang nhau" .text li $t1, 50 li $t2, 5
#Rẻ nhánh có điều kiện #beq $t1, $t2, in_chuoi1
#($t1 = #t2) đúng -> in_chuoi1
#Rẻ nhánh kho6gn điều kiện b in_chuoi1 #In chuổi 2 #li $v0, 4 #la $a0, chuoi2 #syscall
#Kết thúc chương trình syscall lOMoAR cPSD| 39651089 li $v0, 10 syscall in_chuoi1: #In chuổi 1 li $v0, 4 la $a0, chuoi1 syscall
#Bài 11: Điều khiển lặp
.data chuoi: .asciiz "Hello!!!\n" .text li $t1, 1 #Biến điều khiển lặp lap:
# Điều kiện lặp $t1 <=5
bgt $t1, 5, thoat_lap #điều khiển kết thúc lặp. ($t1> 5) dúng -> thoát lặp #In chuổi ra màn hình li $v0, 4
la $a0, chuoi syscall addi $t1, $t1, 1 #tăng biến điều khiển lên 1
j lap #Nhảy tới nhãn lập thoat_lap:
#Bài 12: - Hàm thủ tục
.data chuoi: .asciiz "Hey hello!!!" .text main:
jal inra_manhinh #Nhảy đến inra_namhinh lưu địa chỉ dòng lệnh kế tiếp vào thanh $ra #kết thúc chuong trình li $v0, 10 syscall inra_manhinh: #In ra màn hình li $v0, 4 la $a0, chuoi syscall
jr $ra #Lệnh này nhảy về nhãn main: ở dòng tiếp theo của nhãn đang chạy là: li $v0, 10 lOMoAR cPSD| 39651089
# Bài 13 - Lệnh sb(store byte), lb(load byte)
# Lệnh sb lưu 1 giá trị vào 1 byte bộ nhớ
# Lệnh lb lấy 1 giá trị vào 1 byte bộ nhớ .data chuoi: .asciiz "Hello!"
.text li $t1, 'a' #Thanh ghi $t1 hiện thị số 97
#sb giá_trị, offset(address) = offset + address li $t2, 268500992
sb $t1, 0($t2) #lúc này offset = 0 #Load byte la $t3, chuoi lb $t4, 1($t3)
# Bài 14 - Lệnh sw(store word), lw(load word)
# Lệnh sb lưu 1 giá trị vào 1 word (4byte) bộ nhớ
# Lệnh lb lấy 1 giá trị vào 1 byte bộ nhớ .data list: .word 5, 10, 4, 7 .text #sw (store word) #li $t1, 10 #li $t2, 268500992
#sw $t1, 268500996 # 268500996 địa chỉ của word #sw $t1, 8($t2) #Load wrod la $t4, list lw $t5, 8($t4)
#bai 15: Kỹ thuật sao lưu
#mặc định dữ liệu ghi dữ liệu theo Stack: vào trước -> ngăn dưới, vào sau ngăn trên .data .text main: li $a0, 10 jal func #in giá trị $a0 li $v0, 1 syscall #Kết thúc chuong trình li $v0, 10 syscall
func: # Hàm in 5 ra màn hình addi $sp, $sp,-4
#kỹ thuật sao lưu dữ liệu lOMoAR cPSD| 39651089
sw $a0, ($sp) #kỹ thuật sao lưu dữ liệu li $v0, 1 li $a0, 5 syscall
lw $a0, ($sp) #kỹ thuật sao lưu dữ liệu jr $ra
#Bài tập all: Viết chương trình cho phép nhập tên và tuổi, sau đó in ra màn hình
.data chuoi1: .asciiz "Nhap Ten: " chuoi2: .asciiz "Nhap tuoi " ten: .asciiz .text #hiển thị chuỗi 1 li $v0, 4 la $a0, chuoi1 syscall #Nhap ten li $v0, 8 la $a0, ten li $a1, 50 syscall move $t1, $a0 #Hiển thị chuỗi 2 li $v0, 4 la $a0, chuoi2 syscall #Nhap tuoi li $v0, 5 syscall move $t2, $v0 #In ten ra màn hình li $v0, 4 move $a0, $t1 syscall #In tuổi ra màn hình li $v0, 1 move $a0, $t2 syscall