Professional Documents
Culture Documents
Baocao
Baocao
HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
LỚP: CE119.O21.1
Giảng viên hướng dẫn: Nguyễn Thành Nhân
MSSV: 22521154
✓ In ra cửa sổ I/O của MARS tất cả các phần tử của mảng array1 và
array2
PRINT1:
Dùng để in ra các giá trị của mảng
array1.
EXIT1:
Dùng để in ra kí tự ‘\n’ cho biết
xuống dòng.
PRINT2:
Thực hiện so sánh $t0, 16. Để kiểm
tra đã duyệt hết mảng chưa.
Thực hiện in ra các giá trị trong
mảng array2.
✓ Gán các giá trị cho mảng array3 sao cho array3[i] = array2[i] +
array2[size2 - 1 - i]
GAN:
+ Khởi tạo biến đếm $t0, $t1 = 0.
+ Load địa chỉ mảng array3, array2
vào thanh ghi $t6, $t5.
Loop:
Vì array3 chỉ được khai báo .space 8.
Do đó ta chỉ cần load 8 phần tử vào
mảng.
+ Thực hiện load giá trị array2[i] và
lưu vào $s1.
+ Thực hiện load giá trị array2[size2 –
1 – i] và lưu vào $t2.
+ Thực hiện cộng giá trị của 2 phần tử
và lưu vào thanh ghi $t4 (mảng
array3[i])
+ Thực hiện tăng chỉ số lên 1 và nhảy
về vòng lặp Loop.
PRINT3:
Thực hiện in ra giá trị của các phần
tử được lưu trong mảng array3.
✓ Người sử dụng nhập vào mảng thứ mấy và chỉ số phần tử cần lấy trong
mảng đó, chương trình xuất ra phần tử tương ứng.
+ Thực hiện load địa chỉ của các mảng
array1, array2, array3.
+ Thực hiện nhập giá trị mảng và chỉ số
của phần tử cần tìm.
Đặt điều kiện:
• Nếu mảng = 1 nhảy đến print_array1.
• Nếu mảng = 2 nhảy đến print_array2.
• Nếu mảng = 3 nhảy đến print_array3.
+ Nếu mảng > 3 hoặc mảng < 1 nhảy đến
input để nhập lại.
Print_array1:
+ Di chuyển đến vị trí của chỉ số cần tìm.
+ Thực hiện lw giá trị và in giá trị ra.
Print_array2:
+ Di chuyển đến vị trí của chỉ số cần tìm.
+ Thực hiện lw giá trị và in giá trị ra.
Print_array3:
+ Di chuyển đến vị trí của chỉ số cần tìm.
+ Thực hiện lw giá trị và in giá trị ra.
EXIT:
Thực hiện lệnh kết thúc chương trình.
.data
array: .space 1000 # Khai bao mang co do dai toi da 1000 phan tu
msg_prompt_int: .asciiz "Nhap so luong phan tu cho mang: "
msg_array_input: .asciiz "Nhap gia tri cho mang: " Nội dung phần khai báo
msg_max_value: .asciiz "Gia tri lon nhat cua mang: " cho các hàm sử dụng
li $v0, 5
syscall
sw $v0, ($t1)
Print_MaxMin:
li $v0, 4
la $a0, msg_min_value Hàm Print_MaxMin:
Print_Sum:
Print_Sum:
li $v0, 11
Thực hiện in giá trị tổng Sum ra màn
li $a0, '\n' hình.
syscall Nhảy đến hàm input2.
li $v0, 4
la $a0, msg_sum
syscall
li $v0, 1
move $a0, $s0
syscall
j input2
# Nhap chi so cua phan tu can tim va in gia tri cua phan tu tai chi so do
input2:
li $v0, 11 Input2:
Nhập một mảng các số nguyên n phần tử (nhập vào số phần tử và giá trị của từng phần tử).
Mảng này gọi là A.
.data
array: .space 1000 # Khai bao mang co do dai toi da 1000 phan tu
msg_prompt_int: .asciiz "Nhap so luong phan tu cho mang: "
msg_array_before: .asciiz "Mang truoc khi thay doi: " .data:
msg_array_after: .asciiz "Mang sau khi thay doi: " Nội dung phần khai báo
msg_array_input: .asciiz "Nhap gia tri cho mang: " cho các hàm sử dụng.
.text
main:
# Nhap so luong phan tu cho mang
Thực hiện nhập số lượng phần tử
li $v0, 4 cho mảng.
la $a0, msg_prompt_int + Sau đó thực hiện lưu giá trị vào
syscall $t0.
li $v0, 5
syscall
move $t0, $v0 # Luu so luong phan tu vao $t0
print_array:
Print_array:
# Thiet lap con tro ve dau mang
Dùng để thiết lập con trỏ về đầu
move $t1, $t4 mảng.
Gọi thông báo xuất chuỗi kí tự:
li $v0, 4 “Mang truoc khi thay doi”.
la $a0, msg_array_before
syscall
print_loop:
# Kiem tra xem da duyet het mang chua print_loop:
slt $t5, $t1, $t3 + Thực hiện và kiểm tra đã duyệt hết mảng chưa.
beq $t5, $zero, input_i_j Nếu duyệt hết thì nhảy đến hàm “input_i_j”
+ Load giá trị của mảng vào thanh ghi $a0.
# Load gia tri tu mang vao thanh ghi $a0 de in ra + Thực hiện in ra giá trị trong thanh ghi $a0.
lw $a0, ($t1) + Thực hiện tăng con trỏ lên 4 byte ( 1word)
bằng với kích thước của 1 phần tử của mảng.
li $v0, 1
+ Thực hiện nhảy đến nhãn j print_loop: Quay
syscall trở lại vòng lặp.
li $v0, 11
li $a0, ' '
syscall
# Tang con tro len 4 byte (kich thuoc cua mot phan tu trong mang)
addi $t1, $t1, 4
# Lap lai cho den khi duyet het mang
j print_loop
input_i_j:
li $v0, 11 input_i_j:
li $a0, '\n' Thực hiện nhập giá trị của biến i.
syscall
# Nhap gia tri cua bien nguyen i tu nguoi dung
li $v0, 4
la $a0, msg_input_i
syscall
li $v0, 5
syscall
move $s0, $v0 # Luu gia tri cua i vao $s0
# Luu dia chi nen cua mang A vao $s3 Thực hiện lưu giá trị địa chỉ nền của mảng A
la $s3, array vào $s3.
print_loop2:
Print_loop2:
# Thiet lap con tro ve dau mang
Dùng để in ra giá trị mảng sau khi thay đổi.
move $t1, $t4
li $v0, 4
la $a0, msg_array_after
syscall
Loop2:
Loop2:
# Kiem tra xem da duyet het mang chua
+ Thực hiện kiểm tra đã duyệt hết mảng chưa.
slt $t5, $t1, $t3
Nếu duyệt hết thì nhảy đến hàm end_if.
beq $t5, $zero, end_if
+ Thực hiện load giá trị phần tử của mảng vào
thanh ghi $a0.
# Load gia tri tu mang vao thanh ghi $a0 de in ra
+ Thực hiện in ra giá trị của các phần tử mảng.
lw $a0, ($t1)
+ Thực hiện tăng con trỏ lên 4 byte.
li $v0, 1
+ Thực hiện j Loop2: Quay trở lại vòng lặp.
syscall
li $v0, 11
li $a0, ' '
syscall
# Tang con tro len 4 byte (kich thuoc cua mot phan tu trong mang)
addi $t1, $t1, 4