You are on page 1of 6

BÁO CÁO THỰC HÀNH 03 – CE119.L21.MTCL.

2
Sinh viên thực hiện: Nguyễn Anh Đức - MSSV: 20521195
Giảng viên hướng dẫn thực hành: Trần Đại Dương
THỰC HÀNH
2.a. In ra tất cả các phần tử của mảng array1 và array2
.data
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
.text

la $a0,array1 %đặt $a0 thành địa chỉ của array1


lw $s0,size1 %Lệnh chuyển dữ liệu từ size1 vào $s0
move $t0,$a0 %$t0=$a0
sll $t1,$s0,2 %dịch trái $s0 2 bit rồi gán vào $t1
add $t2,$t1,$a0 %$t2=$t1+$a0

LOOP: %nhãn LOOP


li $v0,1 %$v0=1
lw $a0,($t0) %Lệnh chuyển dữ liệu từ $t0 vào $a0
syscall % Thực hiện lệnh gọi hệ thống được chỉ định bởi
giá trị trong $v0
addi $t0,$t0,4 %$t0=$t0+4
slt $t3,$t0,$t2 %nếu $t0<$t2 đúng thì $t3 nhận giá trị 1 và
ngược lại
bne $t3,$0, LOOP %nếu %t3 khác $0 thì nhảy đến nhãn LOOP

la $a0,array2 %đặt $a0 thành địa chỉ của array2


lw $s0,size2 %Lệnh chuyển dữ liệu từ size2 vào $s0
move $t0,$a0 %$t0=$a0
move $t1,$s0 %$t1=$s0
add $t2,$t1,$a0 %$t2=$t1+$a0

LOOPP: %nhãn LOOP


li $v0,1 %$v0=1
lb $a0,($t0) %gán địa chỉ của $t0 vào $a0
syscall % Thực hiện lệnh gọi hệ thống được chỉ định bởi
giá trị trong $v0
addi $t0,$t0,1 %$t0=$t0+1
slt $t3,$t0,$t2 %nếu $t0<$t2 đúng thì $t3 nhận giá trị 1 và
ngược lại
bne $t3,$0, LOOPP %nếu $t3 khác $0 thì nhảy đến nhãn LOOPP

2.b. Gán giá trị cho mảng array3

2.c. Nhập vào thứ tự mảng và chỉ số phần tử, sau đó xuất ra phần tử tương ứng
add $4, $5, $9 % giải thích ý nghĩa của lệnh này
li $2, 19 % giải thích ý nghĩa của lệnh này
slt $18, $8, $2
syscall

BÀI TẬP
3.a.1 Nhập mảng số nguyên n phần tử, xuất ra giá trị lớn nhất và nhỏ nhất
.data
kt: .space 500 %mảng kt có kích thước 500 byte
liên tục
nhap: .asciiz "Nhap so phan tu cua mang: " %chuỗi nhap có nội dung Nhap so
pha tu cua mang và kết thúc bằng null
nhap2: .asciiz "Nhap mang: \n" %chuỗi nhap2 có nội dung Nhap
mang và kết thúc bằng null
max: .asciiz "\nMax: " %chuỗi max có nội dung Max và
kết thúc bằng null
min: .asciiz "\nMin: " %chuỗi min có nội dung Min và
kết thúc bằng null
.text
li $v0,4 %v0=4
la $a0,nhap %đặt $a0 thành địa chỉ của nhap
syscall % Thực hiện lệnh gọi hệ thống được chỉ định bởi giá trị trong $v0

li $v0,5 %v0=4
syscall % Thực hiện lệnh gọi hệ thống được chỉ định bởi giá trị trong $v0

move $s0,$v0 %$s0=$v0


la $a0,kt %đặt $a0 thành địa chỉ của kt
move $t0,$a0 %$t0=$a0
sll $t1,$s0,2 %dịch trái $s0 2 bit rồi gán vào $t1
add $t2,$t1,$a0 %$t2=$t1+$a0

li $v0,4 %$v0=4
la $a0,nhap2 %đặt $a0 thành địa chỉ của nhap2
syscall % Thực hiện lệnh gọi hệ thống được chỉ định bởi
giá trị trong $v0

LOOP:
li $v0,5 %$v0=5
syscall % Thực hiện lệnh gọi hệ thống được chỉ định bởi
giá trị trong $v0
sw $v0,($t0) % Lệnh chuyển dữ liệu từ thanh ghi $v0 ra $t0
addi $t0,$t0,4 %$t0=$t0+4
slt $t3,$t0,$t2 %nếu $t0<$t2 đúng thì $t3 nhận giá trị 1 và ngược
lại
bne $t3,$0,LOOP %nếu $t3 khác $0 thì nhảy đến nhãn LOOP

la $a0,kt %đặt $a0 thành địa chỉ của kt


move $t0,$a0 %$t0=$a0
lw $t4,($t0) %Lệnh chuyển dữ liệu từ $t0 vào $t4
lw $t5,($t0) %Lệnh chuyển dữ liệu từ $t0 vào $t5
Max: %nhãn Max
lw $s1,($t0) %Lệnh chuyển dữ liệu từ $t0 vào $s1
bge $t4,$s1,Min %Nhảy đến nhãn Min nếu $t4 >= $s1
move $t4,$s1 %$t4=$s1
Min: %nhãn Min
bge $s1,$t5,LOOPP %Nhảy đến nhãn LOOPP nếu $s1 >= $t5
move $t5,$s1 %$t5=$s1

LOOPP: %nhãn LOOPP


addi $t0,$t0,4 %$t0=$t0+4
slt $t3,$t0,$t2 %nếu $t0<$t2 đúng thì $t3 nhận giá trị 1 và ngược
lại
bne $t3,$0,Max %nếu %t3 khác $0 thì nhảy đến nhãn LOOPP

li $v0,4 %$v0=4
la $a0,max %đặt $a0 thành địa chỉ của max
syscall % Thực hiện lệnh gọi hệ thống được chỉ định bởi
giá trị trong $v0

li $v0,1 %$v0=1
la $a0,($t4) %gán giá trị của $t4 vào $a0
syscall % Thực hiện lệnh gọi hệ thống được chỉ định bởi
giá trị trong $v0

li $v0,4 %$v0=4
la $a0,min %đặt $a0 thành địa chỉ của min
syscall % Thực hiện lệnh gọi hệ thống được chỉ định bởi
giá trị trong $v0

li $v0,1 %$v0=1
la $a0,($t5) %gán giá trị của $t5 vào $a0
syscall % Thực hiện lệnh gọi hệ thống được chỉ định bởi
giá trị trong $v0

3.a.2 Nhập mảng số nguyên n phần tử, xuất ra tổng các phần tử trong mảng
.data
kt: .space 500 %mảng kt có kích thước 500 byte
liên tục
nhap: .asciiz "Nhap so phan tu cua mang: " %chuỗi nhap có nội dung Nhap so
pha tu cua mang và kết thúc bằng null
nhap2: .asciiz "Nhap mang: \n" %chuỗi nhap2 có nội dung Nhap
mang và kết thúc bằng null
.text

li $v0,4 %$v0=4
la $a0,nhap %đặt $a0 thành địa chỉ của nhap
syscall % Thực hiện lệnh gọi hệ thống được chỉ định bởi giá
trị trong $v0

li $v0,5 %$v0=4
syscall % Thực hiện lệnh gọi hệ thống được chỉ định bởi
giá trị trong $v0
move $s0,$v0 %$s0=$v0
la $a0,kt %đặt $a0 thành địa chỉ của kt
move $t0,$a0 %$t0=$a0
sll $t1,$s0,2 %dịch trái $s0 2 bit rồi gán vào $t1
add $t2,$t1,$a0 %$t2=$t1+$a0

li $v0,4 %$v0=4
la $a0,nhap2 %đặt $a0 thành địa chỉ của nhap2
syscall % Thực hiện lệnh gọi hệ thống được chỉ định bởi
giá trị trong $v0

LOOP: %nhãn LOOP


li $v0,5 %$v0=5
syscall % Thực hiện lệnh gọi hệ thống được chỉ định bởi
giá trị trong $v0
sw $v0,($t0) % Lệnh chuyển dữ liệu từ thanh ghi $v0 ra $t0
addi $t0,$t0,4 %$t0=$t0+4
slt $t3,$t0,$t2 %nếu $t0<$t2 đúng thì $t3 nhận giá trị 1 và
ngược lại
bne $t3,$0,LOOP %nếu %t3 khác $0 thì nhảy đến nhãn LOOP
la $a0,kt %đặt $a0 thành địa chỉ của kt
move $t0,$a0 %$t0=$a0
TONG: %nhãn TONG
lw $s1,($t0) %Lệnh chuyển dữ liệu từ $t0 vào $s1
add $t4,$t4,$s1 %$t4=$t4+$s1
addi $t0,$t0,4 %$t0=$t0+4
slt $t3,$t0,$t2 %nếu $t0<$t2 đúng thì $t3 nhận giá trị 1 và
ngược lại
bne $t3,$0,TONG %nếu %t3 khác $0 thì nhảy đến nhãn TONG

li $v0,1 %$v0=1
la $a0,($t4) %gán giá trị của $t4 vào $a0
syscall % Thực hiện lệnh gọi hệ thống được chỉ định
bởi giá trị trong $v0

3.a.3 Nhập mảng số nguyên n phần tử và nhập chỉ số phần tử, sau đó xuất ra giá trị của
phần tử
add $4, $5, $9 % giải thích ý nghĩa của lệnh này
li $2, 19 % giải thích ý nghĩa của lệnh này
slt $18, $8, $2
syscall

3.b. Nhập mảng số nguyên n phần tử, sau đó biên dịch chương trình
C MIPS
if(i < j) add $4, $5, $9 % giải thích ý nghĩa của lệnh này
A[i] = j; li $2, 19 % giải thích ý nghĩa của lệnh này
else slt $18, $8, $2
A[i] = j; syscall

You might also like