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

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