Professional Documents
Culture Documents
Nguyễn Hoàng Duy Lab5
Nguyễn Hoàng Duy Lab5
Nguyễn Hoàng Duy Lab5
MSSV: 22520327
IT012.O14.2
Mảng array1 có 10 word, kích thước được lưu trong size1; Mảng array2 có 16 byte,
kích thước được lưu trong size2; Mảng array3 có 8 byte, kích thước được lưu trong
size3.
Viết code trong phần “.text” thực hiện riêng từng phần việc:
✓ 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
.data
space: .asciiz " "
array1: .word 5, 6, 7, 8, 1, 2, 3, 9, 10, 4
size1: .word 10
array2: .byte 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
size2: .word 16
array3: .space 8
size3: .word
endl: .asciiz "\n"
.text
li $t0, 0
la $t1, array1
lw $s0, size1
#mảng 1
loop1:
sll $t2, $t0, 2
add $t3, $t1, $t2
lw $a0, 0($t3)
li $v0, 1
syscall
addi $t0, $t0, 1
la $a0, space
li $v0, 4
syscall
blt $t0, $s0, loop1
#xuống dòng
li $v0, 4
la $a0, endl
syscall
li $t0, 0
la $t1, array2
lw $s0, size2
#mảng 2
loop2:
add $t3, $t1, $t0
lb $a0, 0($t3)
li $v0, 1
syscall
addi $t0,$t0, 1
li $v0, 4
la $a0, space
syscall
blt $t0, $s0, loop2
end:
✓ Gán các giá trị cho mảng array3 sao cho array3[i] = array2[i] + array2[size2 - 1 – i]
.data
space: .asciiz " "
mang1: .word 5, 6, 7, 8, 1, 2, 3, 9, 10, 4
size1: .word 10
mang2: .byte 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
size2: .word 16
mang3: .space 8
size3: .word 8
sPrint1: .asciiz "Nhap vao mang can truy xuat: "
sPrint2: .asciiz "Nhap vi tri cua phan tu can truy xuat: "
sPrint3: .asciiz "Phan tu can truy xuat la: "
.text
loop:
add $s0, $t1, $t2 #mang2[i]
sub $s5, $s4, $t1 #[size2 - 1 - i]
add $t0, $s5, $t2 #mang2[size2 - i - 1]
lb $t4, 0($s0)
lb $t5, 0($t0)
add $t6, $t4, $t5
add $t7, $t1, $t3
sb $t6, 0($t7)
addi $t1, $t1, 1
ble $t1, $s3, loop
li $t1, 0
loopPrint:
add $t2, $t1, $t3
lb $a0, 0($t2)
li $v0, 1
syscall
la $a0, space
li $v0, 4
syscall
addi $t1, $t1, 1
blt $t1, 8, loopPrint
✓ 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.
.data
space: .asciiz " "
array1: .word 5, 6, 7, 8, 1, 2, 3, 9, 10, 4
size1: .word 10
array2: .byte 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
size2: .word 16
array3: .space 8
size3: .word 8
sPrint1: .asciiz "Nhap vao mang can truy xuat: "
sPrint2: .asciiz "Nhap vi tri cua phan tu can truy xuat: "
sPrint3: .asciiz "Phan tu can truy xuat la: "
.text
lw $s2, size2 #$s2 luu gia tri array2
lw $s3, size3
la $t2, array2 #$t2 la dia chi dau cua array2
la $t3, array3
li $t1, 0 #$t1 la bien i
addi $s4, $s2, -1 #$s4 luu gia tri array2 - 1
loop:
add $s0, $t1, $t2 #array2[i]
sub $s5, $s4, $t1 #[size2 - 1 - i]
add $t0, $s5, $t2 #array2[size2 - i - 1]
lb $t4, 0($s0)
lb $t5, 0($t0)
add $t6, $t4, $t5
la $t1, array1
la $t2, array2
la $t3, array3
lw $s1, size1
lb $s2, size2
lb $s3, size3
la $a0, sPrint1
li $v0, 4
syscall
li $v0, 5
syscall
Case1:
la $a0, sPrint2
li $v0, 4
syscall
li $v0, 5
syscall
addi $t4, $v0, 0
la $a0, sPrint3
li $v0, 4
syscall
sll $t4, $t4, 2 #$t4 là chỉ số; shift left logic $t4 2 để lấy chỉ số
add $t4, $t4, $t1 #Lấy giá trị bằng cách cộng $t4 với vị trí đầu trong mảng
lw $a0, ($t4)
li $v0, 1
syscall
j end
Case2:
la $a0, sPrint2
li $v0, 4
syscall
li $v0, 5
syscall
addi $t4, $v0, 0
la $a0, sPrint3
li $v0, 4
syscall
add $t4, $t4, $t2
lb $a0, ($t4)
li $v0, 1
syscall
j end
Case3:
la $a0, sPrint2
li $v0, 4
syscall
li $v0, 5
syscall
addi $t4, $v0, 0
la $a0, sPrint3
li $v0, 4
syscall
j end
end:
2. Thao tác với con trỏ
Con trỏ là một biến lưu địa chỉ của một biến khác. Thao tác với con trỏ trong MIPS là
thao tác trực tiếp với địa chỉ bộ nhớ.
Thực hiện lại các yêu cầu của nội dung 1 với con trỏ
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:
.data