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

Lab1 Cấu trúc và kiến trúc máy tính

15 0 0
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

Nội dung

Thực hành lab Cấu trúc và kiến trúc máy tính trương uit, bài tap ve nha. Thực hành lab Cấu trúc và kiến trúc máy tính trương uit, bài tap ve nhaThực hành lab Cấu trúc và kiến trúc máy tính trương uit, bài tap ve nhaThực hành lab Cấu trúc và kiến trúc máy tính trương uit, bài tap ve nhaThực hành lab Cấu trúc và kiến trúc máy tính trương uit, bài tap ve nha

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TINKHOA KHOA HỌC VÀ KỸ THUẬT THÔNG TIN

BÁO CÁO THỰC HÀNH

<Bài lab số 3, 4, 5>

Trang 3

NHẬN XÉT CỦA GIẢNG VIÊN

Trang 4

MỤC LỤC

Câu 1: Nhập vào một ký tự, xuất ra cửa sổ I/O của MARS theo yêu cầu sau: Ký tự liền trước và liền sau của ký tự nhập vào 5Câu 2 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ử), xuất ra cửa sổ I/O của MARS theo từng yêu cầu sau: 6Câu 3: Chuyển số có 3 chữ số 11

Trang 5

Câu 1: Nhập vào một ký tự, xuất ra cửa sổ I/O của MARS theo yêu cầu sau: Ký tự liền trước và liền sau của ký tự nhập vào

Ví dụ: Nhap ky tu (chỉ một ký tự): b Ky tu truoc: a Ky tu sau: cĐoạn mã:

.datanhap: asciiz "Nhap ky tu (chi mot ky tu): "truoc: asciiz "\nKy tu truoc: "

sau: asciiz "\nKy tu sau: ".text

li $v0, 4 la $a0, nhap syscall # Nhập ký tự từ người dùng li $v0, 12

syscall move $t0, $v0 # Lưu ký tự nhập vào $t0 # Tính toán ký tự liền trước và liền sau addi $t1, $t0, -1 # Ký tự liền trước addi $t2, $t0, 1 # Ký tự liền sau # In ký tự liền trước

li $v0, 4 la $a0, truoc syscall li $v0, 11 move $a0, $t1 syscall

Trang 6

# In ký tự liền sau li $v0, 4

la $a0, sau syscall li $v0, 11 move $a0, $t2 syscall

Câu 2 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ử), xuất ra cửa sổ I/O của MARS theo từng yêu cầu sau:

✓ 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ỉ số của một phần tử nào đó và giá trị của phần tử đó được in ra cửa sổĐoạn code:

.datathongbao: asciiz "Nhap so phan tu n: "nhap: asciiz "Nhap phan tu: "

abc: asciiz "A["abc1: asciiz "]= "max_msg: asciiz "Gia tri lon nhat: "min_msg: asciiz "Gia tri nho nhat: "tong_msg: asciiz "Tong cac phan tu: "index_msg: asciiz "Nhap chi so phan tu can lay gia tri: "ketqua: asciiz "Gia tri tai chi so: "

mang: word 10

.text

Trang 7

# Nhập số phần tử n li $v0, 4

la $a0, thongbao syscall

li $v0, 5 syscall move $t0, $v0 # Lưu số phần tử vào $t0

# Nhập các phần tử vào mảng li $t7, 0 # Biến đếm

la $s0, mang

nhap_mang: li $v0, 4 la $a0, nhap syscall

li $v0, 4 la $a0, abc syscall

move $a0, $t7 li $v0, 1 syscall # In chỉ số

li $v0, 4

Trang 8

la $a0, abc1 syscall

li $v0, 5 syscall sll $t1, $t7, 2 add $t2, $s0, $t1 # Tính địa chỉ của phần tử hiện tại sw $v0, 0($t2) # Lưu giá trị vào mảng

addi $t7, $t7, 1 blt $t7, $t0, nhap_mang # Lặp lại nếu chưa nhập đủ

exit: # Tính tổng, tìm max và min la $s2, mang

lw $t1, 0($s2) move $s3, $t1 # max move $s4, $t1 # min li $s5, 0 # tổng li $s6, 0 # biến đếm

tinh_tong_max_min: lw $t1, 0($s2) add $s5, $s5, $t1 # tổng bgt $t1, $s3, capnhat_max blt $t1, $s4, capnhat_min j tieptuc

Trang 9

capnhat_max: move $s3, $t1 j tieptuc

capnhat_min: move $s4, $t1

tieptuc: addi $s2, $s2, 4 addi $s6, $s6, 1 blt $s6, $t0, tinh_tong_max_min

# In giá trị lớn nhất li $v0, 4

la $a0, max_msg syscall

li $v0, 1 move $a0, $s3 syscall

# In giá trị nhỏ nhất li $v0, 4

la $a0, min_msg syscall

Trang 10

li $v0, 1 move $a0, $s4 syscall

# In tổng các phần tử li $v0, 4

la $a0, tong_msg syscall

li $v0, 1 move $a0, $s5 syscall

# Nhập chỉ số và in giá trị phần tử tại chỉ số đó li $v0, 4

la $a0, index_msg syscall

li $v0, 5 syscall move $t6, $v0 # Lưu chỉ số vào $t6

sll $t6, $t6, 2 # t6 = t6 * 4 (mỗi phần tử 4 bytes) la $a0, mang

add $a0, $a0, $t6 lw $t5, 0($a0) li $v0, 4

Trang 11

la $a0, ketqua syscall

move $a0, $t5 li $v0, 1 syscall

Câu 3: Chuyển số có 3 chữ số

.data thongbao: asciiz "Nhap so 3 chu so: " mang: space 10

so0: asciiz "khong " so1: asciiz "mot " so2: asciiz "hai " so3: asciiz "ba " so4: asciiz "bon " so5: asciiz "nam " so6: asciiz "sau " so7: asciiz "bay " so8: asciiz "tam " so9: asciiz "chin ".text

# Nhập số có 3 chữ số và lưu vào $t0 li $v0, 4

la $a0, thongbao syscall

li $v0, 5 syscall

Trang 12

move $t0, $v0

# Chia lần lượt để lấy từng chữ số và lưu vào mảng li $s7, 10 # Số cơ số (decimal)

li $t7, 0 # Biến đếm lặp la $s1, mang # Địa chỉ bắt đầu của mảng

loop: div $t0, $s7 mfhi $t1 # Số dư mflo $t0 # Thương add $s2, $s1, $t7 sb $t1, 0($s2) # Lưu chữ số vào mảng addi $t7, $t7, 1

beq $t7, 3, exit_loop j loop

exit_loop: # Lấy các chữ số từ mảng và in ra chữ cái tương ứng với các chữ số la $s1, mang

addi $s1, $s1, 2 li $t7, 0

print_loop: lb $t1, 0($s1) li $v0, 4 beq $t1, 9, print_so9

Trang 13

beq $t1, 8, print_so8 beq $t1, 7, print_so7 beq $t1, 6, print_so6 beq $t1, 5, print_so5 beq $t1, 4, print_so4 beq $t1, 3, print_so3 beq $t1, 2, print_so2 beq $t1, 1, print_so1 beq $t1, 0, print_so0 j next_digit

print_so0: la $a0, so0 syscall j next_digit

print_so1: la $a0, so1 syscall j next_digit

print_so2: la $a0, so2 syscall j next_digit

print_so3:

Trang 14

la $a0, so3 syscall j next_digit

print_so4: la $a0, so4 syscall j next_digit

print_so5: la $a0, so5 syscall j next_digit

print_so6: la $a0, so6 syscall j next_digit

print_so7: la $a0, so7 syscall j next_digit

print_so8: la $a0, so8 syscall

Trang 15

j next_digit

print_so9: la $a0, so9 syscall j next_digit

next_digit: subi $s1, $s1, 1 addi $t7, $t7, 1 bne $t7, 3, print_loop

end: # Kết thúc chương trình li $v0, 10

syscall

Ngày đăng: 20/08/2024, 21:55

w