hello VietNam de hello VietNam de hello VietNam de
NgcAnhPhm39
8 views
10 slides
Apr 30, 2025
Slide 1 of 10
1
2
3
4
5
6
7
8
9
10
About This Presentation
hello VietNam de
Size: 70.5 KB
Language: none
Added: Apr 30, 2025
Slides: 10 pages
Slide Content
Họ và tên: Phạm Ngọc Anh
MSSV: 52400002
LAP 4: MARS
Bài tập thực hành:
1/ Viết chương trình in ra màn hình câu "Sinh viên TDTU xin chào các bạn"
.data
message: .asciiz "Sinh viên TDTU xin chào các bạn"
.text
.globl main
main:
# Load địa chỉ của chuỗi vào thanh ghi $a0
la $a0, message # $a0 chứa địa chỉ của chuỗi cần in
# Gọi syscall để in chuỗi
li $v0, 4 # syscall số 4: print_string
syscall
# Thoát
li $v0, 10 # syscall số 10: exit
syscall
2/ Viết chương trình nhập vào hai số nguyên từ bàn phím, tính hiệu, tích của 2
số nguyên đó.
.data
prompt1: .asciiz "Nhap so nguyen thu nhat: " # Chuỗi để nhập số thứ nhất
prompt2: .asciiz "Nhap so nguyen thu hai: " # Chuỗi để nhập số thứ hai
result1: .asciiz "Hieu cua hai so: " # Chuỗi để thông báo hiệu
result2: .asciiz "Tich cua hai so: " # Chuỗi để thông báo tích
.text
.globl main
main:
# Nhập số nguyên thứ nhất
li $v0, 4
la $a0, prompt1
syscall
li $v0, 5 # syscall số 5: read_int
syscall
move $t0, $v0 # Lưu số nguyên thứ nhất vào $t0
# Nhập số nguyên thứ hai
li $v0, 4 # syscall số 4: print_string
la $a0, prompt2 # Địa chỉ chuỗi nhập số thứ hai
Syscall
li $v0, 5 # syscall số 5: read_int
syscall
move $t1, $v0 # Lưu số nguyên thứ hai vào $t1
# Tính hiệu
sub $t2, $t0, $t1 # $t2 = $t0 - $t1
li $v0, 4 # syscall số 4: print_string
la $a0, result1 # Địa chỉ của chuỗi thông báo hiệu
syscall
move $a0, $t2 # Đưa kết quả hiệu vào $a0
li $v0, 1 # syscall số 1: print_int
Syscall
# Tính tích
mul $t3, $t0, $t1 # $t3 = $t0 * $t1
li $v0, 4 # syscall số 4: print_string
la $a0, result2 # Địa chỉ của chuỗi thông báo tích
syscall
move $a0, $t3 # Đưa kết quả tích vào $a0
li $v0, 1 # syscall số 1: print_int
Syscall
# Thoát
li $v0, 10 # syscall số 10: exit
syscall
3/ Viết chương trình nhập vào một số nguyên từ bàn phím, tính bình phương
của số nguyên đó.
.data
prompt: .asciiz "Nhap mot so nguyen: " # Chuỗi nhắc nhập số nguyên
result: .asciiz "Binh phuong cua so do la: " # Chuỗi thông báo kết quả
.text
.globl main
main:
# Nhập số nguyên từ bàn phím
li $v0, 4
la $a0, prompt
syscall
li $v0, 5 # syscall số 5: read_int
syscall
move $t0, $v0 # Lưu số nguyên vừa nhập vào $t0
# Tính bình phương
mul $t1, $t0, $t0 # $t1 = $t0 * $t0 (bình phương)
# Hiện kết quả
li $v0, 4 # syscall số 4: print_string
la $a0, result # Địa chỉ của chuỗi thông báo kết quả
syscall
move $a0, $t1 # Đưa kết quả bình phương vào $a0
li $v0, 1 # syscall số 1: print_int
syscall
# Thoát
li $v0, 10 # syscall số 10: exit
syscall
4/ Viết chương trình nhập vào 2 số thực từ bàn phím, tính tổng 2 số thực đó5/
Viết chương trình nhập vào 2 số nguyên x, y từ bàn phím, tính thương 2 số
nguyên đó. (Lưu ý: Thương của 2 số x/y là một số thực)
.data
prompt1: .asciiz "Nhap so thuc thu nhat: " # Chuỗi nhắc nhập số thực thứ nhất
prompt2: .asciiz "Nhap so thuc thu hai: " # Chuỗi nhắc nhập số thực thứ hai
result_sum: .asciiz "Tong cua hai so thuc la: " # Chuỗi thông báo tổng
prompt3: .asciiz "\nNhap so nguyen x: " # Chuỗi nhắc nhập số nguyên x
prompt4: .asciiz "Nhap so nguyen y: " # Chuỗi nhắc nhập số nguyên y
result_div: .asciiz "Thuong cua x/y la: " # Chuỗi thông báo thương
.text
.globl main
main:
# Nhập số thực thứ nhất
li $v0, 4 # syscall số 4: print_string
la $a0, prompt1 # Địa chỉ của chuỗi nhắc nhập số thực thứ nhất
syscall
li $v0, 6 # syscall số 6: read_float
syscall
mov.s $f0, $f0 # Lưu số thực thứ nhất vào $f0
# Nhập số thực thứ hai
li $v0, 4 # syscall số 4: print_string
la $a0, prompt2 # Địa chỉ của chuỗi nhắc nhập số thực thứ hai
syscall
li $v0, 6 # syscall số 6: read_float
syscall
mov.s $f1, $f0 # Lưu số thực thứ hai vào $f1
# Tính tổng hai số thực
add.s $f2, $f0, $f1 # $f2 = $f0 + $f1
li $v0, 4 # syscall số 4: print_string
la $a0, result_sum # Địa chỉ của chuỗi thông báo tổng
syscall
mov.s $f12, $f2 # Chuyển kết quả tổng vào $f12 để in
li $v0, 2 # syscall số 2: print_float
syscall
# Nhập số nguyên x
li $v0, 4 # syscall số 4: print_string
la $a0, prompt3 # Địa chỉ của chuỗi nhắc nhập số nguyên x
syscall
li $v0, 5 # syscall số 5: read_int
syscall
move $t0, $v0 # Lưu số nguyên x vào $t0
# Nhập số nguyên y
li $v0, 4 # syscall số 4: print_string
la $a0, prompt4 # Địa chỉ của chuỗi nhắc nhập số nguyên y
syscall
li $v0, 5 # syscall số 5: read_int
syscall
move $t1, $v0 # Lưu số nguyên y vào $t1
# Tính thương x/y dưới dạng số thực
mtc1 $t0, $f0 # Chuyển số nguyên x vào thanh ghi số thực $f0
mtc1 $t1, $f1 # Chuyển số nguyên y vào thanh ghi số thực $f1
cvt.s.w $f0, $f0 # Đổi x từ số nguyên sang số thực
cvt.s.w $f1, $f1 # Đổi y từ số nguyên sang số thực
div.s $f2, $f0, $f1 # $f2 = $f0 / $f1
li $v0, 4 # syscall số 4: print_string
la $a0, result_div # Địa chỉ của chuỗi thông báo thương
syscall
mov.s $f12, $f2 # Chuyển kết quả thương vào $f12 để in
li $v0, 2 # syscall số 2: print_float
syscall
# Thoát chương trình
li $v0, 10 # syscall số 10: exit
syscall
6/ Viết chương trình tính diện tích, chu vi hình chữ nhật và xuất kết quả ra
màn hình.
.data
prompt_length: .asciiz "Nhap chieu dai hinh chu nhat: " # Chuỗi nhắc nhập chiều
dài
prompt_width: .asciiz "Nhap chieu rong hinh chu nhat: " # Chuỗi nhắc nhập chiều
rộng
result_area: .asciiz "Dien tich hinh chu nhat la: " # Chuỗi thông báo diện tích
result_perimeter: .asciiz "Chu vi hinh chu nhat la: " # Chuỗi thông báo chu vi
.text
.globl main
main:
# Nhập chiều dài
li $v0, 4 # syscall số 4: print_string
la $a0, prompt_length # Địa chỉ của chuỗi nhắc nhập chiều dài
syscall
li $v0, 5 # syscall số 5: read_int
syscall
move $t0, $v0 # Lưu chiều dài vào $t0
# Nhập chiều rộng
li $v0, 4 # syscall số 4: print_string
la $a0, prompt_width # Địa chỉ của chuỗi nhắc nhập chiều rộng
syscall
li $v0, 5 # syscall số 5: read_int
syscall
move $t1, $v0 # Lưu chiều rộng vào $t1
# Tính diện tích
mul $t2, $t0, $t1 # $t2 = $t0 * $t1 (diện tích)
li $v0, 4 # syscall số 4: print_string
la $a0, result_area # Địa chỉ của chuỗi thông báo diện tích
syscall
move $a0, $t2 # Đưa kết quả diện tích vào $a0 để in
li $v0, 1 # syscall số 1: print_int
syscall
# Tính chu vi
add $t3, $t0, $t1 # $t3 = $t0 + $t1
mul $t3, $t3, 2 # $t3 = 2 * ($t0 + $t1) (chu vi)
li $v0, 4 # syscall số 4: print_string
la $a0, result_perimeter # Địa chỉ của chuỗi thông báo chu vi
syscall
move $a0, $t3 # Đưa kết quả chu vi vào $a0 để in
li $v0, 1 # syscall số 1: print_int
syscall
# Thoát
li $v0, 10 # syscall số 10: exit
syscall