1. Trang chủ
  2. » Công Nghệ Thông Tin

CE119Lab03IT012Lab05 có đáp án uit

11 959 4
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 11
Dung lượng 140,42 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Xuất ra giá trị lớn nhất và nhỏ nhất của mảng Hình 5- 1: Lưu đồ thuật toán Xuất ra giá trị lớn nhất và nhỏ nhất của mảng... Tổng tất cả các phần tử của mảng... Người sử dụng nhập vào chỉ

Trang 1

LAB 5: THAO TÁC VỚI MẢNG VÀ CON TRỎ TRONG MIPS

1) Bài tập (chỉ sử dụng con trỏ)

1.1 Xuất ra giá trị lớn nhất và nhỏ nhất của mảng

Hình 5- 1: Lưu đồ thuật toán Xuất ra giá trị lớn nhất và nhỏ nhất của mảng

Trang 2

Code Giải thích data

array1: space 200

size1: word 200

Max: asciiz "\n Max: "

Min: asciiz "\n Min: "

string1: asciiz "Moi nhap so luong phan tu: "

string2: asciiz "Nhap gia tri cac phan tu: \n"

.text

li $v0, 4

la $a0, string1

syscall

li $v0, 5

syscall

la $s1, size1

sw $v0, 0($s1)

li $v0, 4

la $a0, string2

syscall

la $a1, array1

lw $a2, size1

add $t1, $a1, $0

add $t2, $a1, $a2

NHAP:

li $v0, 5

syscall

sb $v0, 0($t1)

addi $t1, $t1, 1

slt $t3, $t1, $t2

bne $t3, $0, NHAP

j Tim_Min_Max

Tim_Min_Max:

la $a1, array1

lw $a2, size1

add $t0, $a1, $0

add $t1, $a1, $a2

lb $s0, 0($t0)

lb $s1,0($t0)

FIND:

lb $t3, 0($t0)

slt $t4, $s0, $t3

#Khai báo vùng nhớ data

#mảng array có kích thước 200 byte

#

#

#

#

#

#

#v0 = 4 -> in chuỗi

# a0 = string1

#

# v0=5 -> Nhập int

#

# s1 = size1

#

#

# v0=4 -> in chuỗi

# a0=string2

#

#nap dia chi cua mang array1 vao $a1

#nap n vao $a2

#Tao con tro chi vao mang array1[0]

#Tao con tro chi vao mang array1[size1]

#

#

#

#

#Tang con tro len 1 don vi

#Xem con tro co chay den cuoi mang chua

#

#

#

#

#Nap dia chi mang Array1 cho $a1

#nap gia tri size1 cho $a2

#Khoi tao con tro chi vao mang Array[0]

#Khoi tao con tro chi vao mang Array[size1]

#$s0=array1[0] , luu gia tri Max tam

#$s0=array1[0] , luu gia tri Min tam

#

#$t3=array1[0]

#if( $s0<$t3)

Trang 3

beq $t4, $0, ELSE1

add $s0, $t3, $0

j ELSE2

ELSE1:

slt $t4,$s1,$t3

bne $t7,$0,ELSE2

add $s1,$t3,$0

ELSE2:

addi $t0,$t0,1

slt $t3,$t0,$t1

bne $t3,$0,FIND

li $v0,4

la $a0,Max

syscall

li $v0,1

add $a0,$s0,$0

syscall

li $v0,4

la $a0,Min

syscall

li $v0,1

add $a0,$s1,$0

syscall

#

#Gan $s0=$t3

#

#

#if($s1<$t3)

#

#Gan $s1=$t3

#

#tăng con trỏ 1 đơn vị

#xem con trỏ chạy đến cuối mảng chưa

#Neu chua cuoi mang thì -> FIND

#Xuất chuỗi

#

#

# Xuất giá trị lớn nhất

#

#

#

#Xuất chuỗi

#

#

#Xuất giá trị nhỏ nhất

1.2 Tổng tất cả các phần tử của mảng

Trang 4

Code Giải thích data

phantu: asciiz "Nhap so phan tu: "

tong: asciiz "\nTong: "

arr: word 0:10

.text

li $v0, 4

la $a0, phantu

syscall

li $v0, 5

syscall

move $s0, $v0

li $t0, 0

la $a1, arr

loop1:

beq $t0, $s0, end_loop1

li $v0, 5 syscall

sw $v0, ($a1) addi $t0, $t0, 1 addi $a1, $a1, 4

j loop1

#Khai báo vùng nhớ data

#

#

# mảng arr[10]

#code

# v0 = 4 -> in string

# a0 = phantu

#

#v0 =5 -> nhập int

#

#index

#counter

#a1[10]

# label loop1

#t0 = s0-> end_loop1

# v0=5-> nhập int

#

#input a[i]

#i=i+1

#a[i+1]

# Hình 5- 2: Lưu đồ thuật toan tính tổng tất cả các phần tử của mảng

Trang 5

li $t0, 0

la $a1, arr

li $t3, 0

loop2:

beq $t0, $s0, end_loop2

lw $t2, ($a1)

add $t3, $t3, $t2 addi $t0, $t0, 1 addi $a1, $a1, 4

j loop2

end_loop2:

li $v0, 4

la $a0, tong

syscall

move $a0, $t3

li $v0, 1

syscall

#

#

#

#sum

#

#

# t3=t3+t2

# i++

# a[i+1]

#

#

#

# v0 =4

# a0 = tong

#

# a0 = t3

#

#

1.3 Người sử dụng nhập vào chỉ số của một phần tử nào đó và giá trị của phần tử

đó được in ra cửa sổ

Trang 6

Code Giải thích data

phantu: asciiz "Nhap so phan tu: "

input: "Nhap phan tu can in: "

arr: word 0:10

.text

li $v0, 4

la $a0, phantu

syscall

li $v0, 5

syscall

move $s0, $v0

li $t0, 0

la $a1, arr

loop1:

beq $t0, $s0, end_loop1

#Khai báo vùng nhớ data

#

#

# mảng arr[10]

#code

# v0 = 4 -> in string

# a0 = phantu

#

#v0 =5 -> nhập int

#

#index

#counter

#a1[10]

#t0 = s0-> end_loop1 Hình 5- 3: in vị trí của phần tử ra cửa sổ

Trang 7

li $v0, 5 syscall

sw $v0, ($a1) addi $t0, $t0, 1 addi $a1, $a1, 4

j loop1

end_loop1:

li $t0, 0

la $a1, arr

li $v0, 4

la $a0, input

syscall

li $v0, 5

syscall

mul $a2, $v0, 4

add $a1, $a1, $a2

lw $t2, ($a1)

move $a0, $t2

li $v0, 1

syscall

# v0=5-> nhập int

#

#input a[i]

#i=i+1

#a[i+1]

#

#

#

#

#

# v0 =4

#

#

# v0=5

#

# s2 = v0-4

# a1 = a1+a2

# Lệnh chuyển dữ liệu từ a1 vào t2

# a0=t2

#

# in kí tự

1.4 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ử).

Code C Code MIPS Giải Thích

if (i<j) A[i]= i;

else A[i] = j; add $s4,$s3,$s0 slt $t0,$s0,$s1

beq $t0,$0,ELSE

sw $s0,0($s4) ELSE:

sw $s1,0($s4)

#con trỏ $s4 trỏ đến A[i]

#if( $s0 < $s1 )

#neu $s0<$s1 -> ELSE

#A[i]=i

#

#A[i]=j

2) Bài tập bổ sung

2.1 Viết chương trình hợp ngữ nhập mảng gồm N phần tử Sắp xếp mảng theo thứ

tự giảm dần.

Trang 8

phantu: asciiz "Nhap so phan tu n: "

arr: word 0:10

.text

li $v0, 4

la $a0, phantu

syscall

li $v0, 5

syscall

move $s0, $v0

li $t0, 0

la $a1, arr

loop1:

li $v0, 5

syscall

sw $v0, ($a1)

addi $t0, $t0, 1

beq $t0, $s0, end_loop1

addi $a1, $a1, 4

j loop1

end_loop1:

li $t0,0

la $a1, arr

addi $s1, $s0, -1

jal soft

loop2:

lw $a0, ($a1)

li $v0, 1

syscall

li $a0, 32

li $v0, 11

syscall

addi $t0, $t0, 1

beq $t0, $s0, end_loop2

addi $a1, $a1, 4

j loop2

end_loop2:

li $v0, 10

syscall

#

#

#

#

# v0=4

# a0=phantu

#

#v0=5

#

#index

#counter

#a1[10]

#

# input array

#

#

# a1 có v0

#

#i++

# so sánh t0 = s0 -> end_loop1

#a[i+1]

#

#

#counter

#

#n-1 for soft loop

#

#

#

#

#

#print space

#

#

#

#i++

#

#a[i+1]

#

#

#

#

#

Trang 9

soft:

move $t1, $t0

lw $v0, ($a1)

move $a2, $a1

move $a3, $a1

max:

lw $v1, ($a2)

bgt $v1, $v0, compare

j continue

compare:

lw $k0, ($a3)

bgt $v1, $k0, change

j continue

change:

move $a3, $a2

continue:

addi $t1, $t1, 1

beq $t1, $s0, end_max

addi $a2, $a2, 4

j max

end_max:

lw $k0, ($a3)

sw $k0, ($a1)

sw $v0, ($a3)

addi $t0, $t0, 1

beq $t0, $s1, end_soft

addi $a1, $a1, 4

j soft

end_soft:

li $t0,0

la $a1, arr

jr $ra

#

#

# counter for max loop

#

#

#

#

#a1 not chage, #a2 change $a3 = max address

#

# v1<=v0 -> compare

#

#

#

# v1<=k0 -> change

#

#

# a3=a2

#

# t1=s1+1

#t1=s0->end_max

# a2=a2+4

#

#

#

#

#

# increase counter

#t0=t0+1

#t0=s1-> end_soft

#a[i+1]

#

#

#counter

#

#

2.2 Viết chương trình hợp ngữ nhập vào N và mang gồm N phần tử In ra mảng đảo ngược của mảng vừa nhập

Trang 10

phantu: asciiz "N = "

input: asciiz "\nARR = "

out: asciiz "\noutput = "

arr: word 0:10

.text

li $v0, 4

la $a0, phantu

syscall

li $v0, 5

syscall

move $s0, $v0

li $v0, 4

la $a0, input

syscall

li $t0, 0

la $a1, arr

loop1:

beq $t0, $s0, end_loop1

li $v0, 5 syscall

sw $v0, ($a1) addi $t0, $t0, 1 addi $a1, $a1, 4

j loop1

end_loop1:

li $t0, 0

li $v0, 4

la $a0, out

syscall

subi $a1, $a1, 4

syscall

loop2:

beq $t0, $s0, end_loop2

lw $a0, ($a1)

li $v0,1

syscall

li $a0, 32

li $v0,11

syscall

#Khai báo vùng nhớ data

# nhập n

# mảng arr[i]

# xuất output

# mảng arr 10 phần tử

# code

# v0=4

# a0= phantu

# xuất string

#

#v0=5 -> nhập int

#

#index

#

# v0=4

#a0=input

#

#counter

#a1[10]

#

#

#t0=s0 -> end_loop1

# v0=5

#

#input a[i]

# i=i+1

#a[i+1]

#

#

#

#

#

#

# a1= a1+4

#

#

# t0=s0 -> end_loop2

# load a1 vào a0

# v0=1 -> in int

#

#print space

#

#

Trang 11

addi $t0, $t0, 1 subi $a1, $a1, 4

j loop2

end_loop2:

end_program:

#i++

#a[i-1]

#

#

#

Ngày đăng: 09/12/2021, 08:11

HÌNH ẢNH LIÊN QUAN

Hình 5- 1: Lưu đồ thuật toán Xuất ra giá trị lớn nhất và nhỏ nhất của mảng - CE119Lab03IT012Lab05 có đáp án uit
Hình 5 1: Lưu đồ thuật toán Xuất ra giá trị lớn nhất và nhỏ nhất của mảng (Trang 1)
Hình 5- 2: Lưu đồ thuật toan tính tổng tất cả các phần tử của mảng - CE119Lab03IT012Lab05 có đáp án uit
Hình 5 2: Lưu đồ thuật toan tính tổng tất cả các phần tử của mảng (Trang 4)

TỪ KHÓA LIÊN QUAN

w