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

CE119 Lab02 IT012 Lab04 có đáp án UIT

9 276 2

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 9
Dung lượng 170,57 KB

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

Nội dung

Nhập vào một ký tự, xuất ra cửa sổ I/O của MARS theo từng yêu cầu sau: ✓ Ký tự liền trước và liền sau của ký tự nhập vào - Ký tự nhập vào chỉ được phép là ba loại: số, chữ thường và chữ

Trang 1

Code Giải thích data

.text

main:

li $s0,0

li $s1,1

li $s2,2

li $s3,3

li $s4,4

beq $s0,$s1, True

#false

sub $s2,$s3,$s4

j Fin

True:

add $s2,$s3,$s4

Fin:

li $v0, 10

syscall

#Khai báo vùng nhớ data

#

#Khai báo vùng nhớ chứa mã lệnh

#Code

# i->$s0

# j->$s1

# f->$s2

# g->$s3

# h->$s4

# nếu (i=j) -> True

# false

# f = g – h

# nhảy đến Fin label

# True label

# f = g + h

# Fin label

# lệnh exit data

.text

.globl main

main:

li $s3,0

loop:

beq $t0,$s1,exit

addi $s0,$s0,1

add $t1,$s3,$s0

j loop

exit:

#Khai báo vùng nhớ data

#Khai báo vùng nhớ chứa mã lệnh

#Code

# sum = 0

#

# so sánh i < =N sai thì -> exit

# i=0

# sum = sum + i

# lặp

#

# lệnh exit

3 Bài tập

a Nhập vào một ký tự, xuất ra cửa sổ I/O của MARS theo từng yêu cầu sau:

✓ Ký tự liền trước và liền sau của ký tự nhập vào

- Ký tự nhập vào chỉ được phép là ba loại: số, chữ thường và chữ hoa Nếu ký tự nhập vào rơi vào một trong ba loại, xuất ra cửa sổ đó là loại nào; nếu ký tự nhập không rơi vào một trong

Trang 2

ba loại trên, xuất ra thông báo “invalid type”

.data

invalid: asciiz "\ninvalid type"

ktnhap: asciiz "Nhap ky tu: "

kttruoc: asciiz "\nKy tu truoc: "

ktsau: asciiz "\nKy tu sau: "

.text

li $v0, 4

la $a0, ktnhap

syscall

li $v0, 12

syscall

move $s0, $v0

jal ktSo #0-9 = 48 -57

jal ktChuHoa

jal ktChuThuong

or $t3, $t0,$t1

#Khai báo vùng nhớ data

#Khai báo các biến

#

#

#

# Code

#

# $a0 = ktNhap

#

# nhập kí tự

#

# s0 = v0

# nhảy label ktSo từ 0 đến 9 = từ 48 đến 57

# nhảy label ktChuHoa từ A-Z = 65 -90

# nhảy label ktChuThuong từ a-z = 97 – 122

# t3 = t0 | t1

Trang 3

or $t3, $t3, $t2

beq $t3,0, false

j print

ktSo:

bge $s0, 48, ktSo_1

j end_ktSo

ktSo_1:

ble $s0, 57, end_ktSo_1

j end_ktSo end_ktSo_1:

li $t0,1 end_ktSo:

jr $ra

ktChuHoa:

bge $s0, 65, ktChuHoa_1

j end_ktChuHoa

ktChuHoa_1:

ble $s0, 90, end_ktChuHoa_1

j end_ktChuHoa end_ktChuHoa_1:

li $t1,1 end_ktChuHoa:

jr $ra

ktChuThuong:

bge $s0, 97, ktChuThuong_1

j end_ktChuThuong

ktChuThuong_1:

ble $s0, 122, end_ktChuThuong_1

j end_ktChuThuong end_ktChuThuong_1:

li $t2,1 end_ktChuThuong:

jr $ra

false:

la $a0, invalid

li $v0, 4

syscall

j end

print:

la $a0, kttruoc

# t3 = t3 | t2

# Nếu t3=0 -> label false

# nhảy đến print

# label ktSo

#

# s0 >= 48 -> ktSo_1

# không thỏa điều kiện trên -> jump end_ktSo

# label ktSo_1

# s0<=57 -> end_ktSo_1

# không thỏa -> jump end_ktSo

# end_ktSo

#

#

# jump $ra

# label ktChuHoa

#

# s0 >= 65 -> ktChuHoa_1

# không thỏa -> jump end_ ktChuHoa

# label ktChuHoa_1

# s0<=90 -> end_ ktChuHoa_1

# không thỏa -> jump end_ ktChuHoa

# end_ ktChuHoa_1

#

#

# jump $ra

# label ktChuThuong

#

# s0 >= 97 -> ktChuThuong_1

# không thỏa -> jump end_ ktChuThuong

# label ktChuThuong _1

# s0<=122-> end_ ktChuThuong _1

# không thỏa -> jump end_ ktChuThuong

# end_ ktChuThuong _1

#

#

# jump $ra

#label false

# a0 = invalid

# v0 = 4 -> in chuỗi

#

#jump label end

#label print

#a0 = kttruoc

Trang 4

li $v0, 4

syscall

addi $a0, $s0, -1

li $v0, 11

syscall

la $a0, ktsau

li $v0, 4

syscall

addi $a0, $s0, 1

li $v0, 11

syscall

end:

# v0=4 -> in chuỗi

#

# a0 = s0 – 1

# in kí tự

#

#a0 = ktsau

# v0=4 -> in chuỗi

#

# a0 = s0 + 1

# in kí tự

Bt bổ sung

a.Con trỏ là gì? Chức năng của con trỏ? Mảng là gì? Chức năng của mảng? Con trỏ là gì?

- Con trỏ là một công cụ hiệu quả giúp tăng hiệu năng của chương trình và thực tế nhiều nhiệm vụ không thể thực hiện được nếu như không sử dụng con trỏ Chức năng của con trỏ?

- Con trỏ được dùng để trỏ tới tới địa chỉ trên bộ nhớ nơi được dùng để lưu trữ giá trị của biến Một biến sau khi khai báo nó sẽ có 4 đặc tính như sau: Tên biến Giá trị hiện tại của biến Địa chỉ trên bộ nhớ nơi lưu trữ giá trị của biến Kiểu dữ liệu Mảng là gì? Mảng (Array) là một trong các cấu trúc dữ liệu quan trọng nhất Mảng có thể lưu giữ một số phần tử cố định và các phần tử này nền có cùng kiểu Hầu hết các cấu trúc dữ liệu đều sử dụng mảng để triển khai giải thuật Chức năng của mảng? Mảng được dùng để hiện thực các vector và các ma trận cũng như các loại bảng chữ nhật Nhiều cơ sở dữ liệu từ nhỏ đến lớn chứa (hoặc bao gồm) các mảng một chiều mà các phần tử là các bản ghi Mảng cũng được dùng để hiện thực các cấu trúc dữ liệu khác, như đống, bảng băm, hàng đợi hai đầu, hàng đợi, ngăn xếp, xâu và VList

b Thủ tục là gì? Trình bày luồng hoạt động của một thủ tục trong MIPS MIPS hỗ trợ một số thanh ghi để lưu trữ các dữ liệu phục vụ cho thủ tục • Đối số $a0, $a1, $a2, $a3 • Kết quả trả về $v0, $v1 • Biến cục bộ $s0, $s1, , $s7 • Địa chỉ quay về $ra Cấu trúc của một thủ tục: Đầu thủ tục entry_label: addi $sp,$sp, -framesize # khai báo kích thước cho stack sw $ra, framesize-4($sp) # cất địa chỉ trở về của thủ tục trong $ra vào ngăn xếp

Trang 5

(dùng khi gọi hàm lồng nhau) Lưu tạm các thanh ghi khác (nếu cần) Thân thủ tục (có thể gọi các thủ tục khác ) Cuối thủ tục Phục hồi các thanh ghi khác (nếu cần) lw $ra, framesize-4($sp) # lấy địa chỉ trở về ra $ra addi $sp,$sp, framesize jr $ra Gọi thủ tục: jal entry_label

c Ngăn xếp(stack là gì)? Trình bày cấu trúc của ngăn xếp và kể tên ứng dụng của ngăn xếp ? Ngăn xếp(stack là gì)?

- Stack là một kiểu danh sách tuyến tính đặc biệt mà phép bổ sung và phép loại bỏ luôn luôn được thực hiện ở một đầu (gọi là đỉnh) Hay còn có một định nghĩa khác: Trình bày cấu trúc của ngăn xếp và kể tên ứng dụng của ngăn xếp ? Ngăn xếp Stack là một cấu trúc

dữ liệu trừu tượng làm việc theo nguyên lý vào sau ra trước LIFO (last in first out) Xử lý gọi hàm trong C/C++ - Trong máy tính, sử dụng để tính giá trị biểu thức, xử lý ngắt - Trong các chương trình biên dịch - Trong trình duyệt web, trình soạn thảo văn bản - Định giá biểu thức + Biểu thức trung tố: toán tử hai ngôi đứng giưã hai toán hạng, toán tử một ngôi đứng trước toán hạng + Biểu thức hậu tố : toán tử đứng sau toán hạng + Biểu thức tiền tố : toán tử đứng trước toán hạng

D,

Trang 6

Code Giải thích data

input_num: asciiz"a = "

IsPrime: asciiz " la so nguyen to"

IsNotPrime: asciiz " khong la so

nguyen to"

.text

li $v0,4

la $a0,input_num

syscall

#Khai báo vùng nhớ data

#Khai báo input

#

#

#

#

# $v0 = 4 -> in

#

#

#

Trang 7

li $v0, 5

syscall

move $t0, $v0

ble $t0, 1, isNotPrime

addi $t1, $zero, 2

Loop:

beq $t1, $t0, isPrime

div $t0, $t1

mfhi $s0

beq $s0, $zero, isNotPrime

addi $t1, $t1, 1

j Loop

isNotPrime:

li $v0, 1

add $a0, $zero, $t0

syscall

li $v0, 4

la $a0, IsNotPrime

syscall

j exit

isPrime:

li $v0, 1

add $a0, $zero, $t0

syscall

li $v0, 4

la $a0, IsPrime

syscall

exit:

# $v0 = 5 -> Nhập

# input number

# dịch $v0 sang $t0

#

# $t1 <= 1 nếu đúng -> isNotPrime

# $t1 = 2

#

#

# t1<=t0

#

# chia dư

# s0<=0

# i=i+1

# lặp

#

# $v0 = 1 -> in số nguyên

#

#

# $v0 = 4 - > in địa chỉ

#

#

#

#

# $v0 = 1 -> in số nguyên

#

#

# $v0 = 4 - > in địa chỉ

#

#

f,

Trang 8

Code Giải thích data

.text

li $v0, 5

syscall

move $s0, $v0

sub $s0, $s0, 2

li $s1, 0

li $a1,1

li $a2,1

li $a0, 1

li $v0, 1

syscall

li $a0, 32

li $v0, 11

syscall

li $a0, 1

li $v0, 1

#Khai báo vùng nhớ data

#Code

# v0 = 5 -> nhập

#

# s0 = v0

# s0 = s0-2

#loop counter

#

#

#

#

#

#print space

#

# in kí tự

#

#

#

#

Trang 9

syscall

jal while

j end

while:

beq $s1, $s0, end_loop

li $a0, 32

li $v0, 11

syscall

add $a1, $a1, $a2

move $a0, $a1

li $v0, 1

syscall

#swap

move $a3, $a1

move $a1, $a2

move $a2, $a3

addi $s1, $s1, 1

j while

end_loop:

jr $ra

end:

#

#

#

#

#

#

#

# a1=1, a2=1,a3 (a3=temp)

#print space

#

#

#

#

#

#

#

#

#swap

#

#

#

#

# counter +1

#

#

#

#

#

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

TỪ KHÓA LIÊN QUAN

w