You are on page 1of 4

Machine Translated by Google

Hà Không có I
trường đại học củaKhoa học và Công nghệ
Trường học của Công nghệ thông tin và truyền thông

Phòng thí nghiệm3

Tải / Lưu trữ , Jump & Branchinstructions

Bàn thắng

Sau bài tập trong phòng thí nghiệm này, bạn sẽ biết cách sử dụng tải / lưu trữ, nhảy và

hướng dẫn rẽ nhánh. Bạn cũng sẽ có thể triển khai cấp độ cao

cấu trúc ngôn ngữ lập trình như câu lệnh điều kiện (if-then-else),

vòng lặp và câu lệnh lựa chọn (switch-case)

Văn chương

Behrooz Parhami (CAMS): Phần 5.4, 5.5

Sự chuẩn bị

Trước khi bắt đầu phòng thí nghiệm này, bạn nên xem lại sách giáo khoa và đọc chi
tiết toàn bộ bài tập trong phòng thí nghiệm. Bạn cũng cần xem lại Bài tập Phòng thí nghiệm
2 và thử tự mình trải nghiệm MARS.

Bài tập tại nhà và tại phòng thí nghiệm

HomeAssignment1

Việc gán nhà này thực hiện câu lệnh “if-then-else” bằng cách sử dụng một số
hướng dẫn cơ bản, chẳng hạn như slt, Add, jump và branch.
nếu (i <= j)
x = x + 1;

z = 1;
khác

y = y-1;
z = 2 * z;

Lúc đầu, bạn nên vẽ biểu đồ thuật toán cho câu lệnh này. Sau đó, bạn đọc kỹ ví dụ này,
cố gắng làm rõ chức năng của từng lệnh xâm nhập.
# Bài tập Phòng thí nghiệm 3, Bài tập về nhà 1
khởi đầu:

slt $ t0, $ s2, $ s1 bne # j <i


$ t0, $ 0, khác tăng thêm $ # nhánh sang khác nếu j <i
t1, $ t1,1 người khác $ t3, # then part: x = x + 1
$ không, 1 j endif khác: add # z = 1
$ t2, $ t2,
t3, -1
$ t3
thêm $ t3, $ # bỏ qua phần “khác”
# begin else part: y = y-1
# z = 2 * z
endif:
Machine Translated by Google

Hà Không có I
trường đại học củaKhoa học và Công nghệ
Trường học của Công nghệ thông tin và truyền thông

HomeAssignment2
Ví dụ sau minh họa cách triển khai câu lệnh lặp. Chương trình này tính tổng các
phần tử của mảng A.
Với ngôn ngữ C:
tổng = 0;
for (int i = 0; i <n; i + = step)
sum + = A [i];
Với hợp ngữ:
sum = 0
i = 0

vòng: if (i> = n) goto endloop


sum = sum + A [i]
i = i + bước
vòng lặp goto
endloop:

Giả sử rằng chỉ số i, địa chỉ bắt đầu của A, hằng số so sánh n, bước và tổng lần
lượt được tìm thấy trong các thanh ghi $ s1, $ s2, $ s3, $ s4 và $ s5. Bạn nên cố
gắng hiểu từng dòng trong mã này.
# Phòng thí nghiệm 3, Chuyển nhượng nhà 2
.bản văn

nghiện $ s5, $ không, 0 # sum = 0


nghiện $ s1, $ không, 0 # i = 0
vòng lặp: slt $ t2, $ s1, $ s3 # $ t2 = i <n? 1: 0
beq $ t2, $ 0, endloop
thêm $ t1, $ s1, $ s1 thêm $ # $ t1 = 2 * $ s1
t1, $ t1, $ t1 thêm $ t1, $ # $ t1 = 4 * $ s1
t1, $ s2 lw $ t0, 0 ($ t1) # $ t1 lưu trữ địa chỉ của A [i]
thêm $ s5,s1,
$ s5, $ t0
$ s1, thêm
$ s4 j $ # tải giá trị của A [i] trong $ t0
loop endloop: # sum = sum + A [i]
# i = i + bước
# vòng lặp goto

HomeAssignment3
Câu lệnh switch / case cho phép phân nhánh nhiều đường dựa trên giá trị của một
biến số nguyên. Trong ví dụ sau, kiểm tra biến chuyển đổi có thể giả định một
trong ba giá trị trong [0, 2] và một hành động khác được chỉ định cho từng trường hợp.
chuyển đổi (thử nghiệm) {
trường hợp 0:

a = a + 1; phá vỡ;
trường hợp 1:

a = a-1; phá vỡ;


trường hợp 2:

b = 2 * b; phá vỡ;
}
Giả sử rằng a và b được lưu trữ trong các thanh ghi $ s2 và $ s3. Bạn nên đọc kỹ
phần mã này, hiểu cách triển khai câu lệnh switch / case.
# Bài tập Phòng thí nghiệm 3, Bài tập về nhà 3
.dữ liệu
kiểm tra: .word 1
Machine Translated by Google

Hà Không có I
trường đại học củaKhoa học và Công nghệ
Trường học của Công nghệ thông tin và truyền thông

.bản văn
la $ s0, test #load địa chỉ của biến thử nghiệm
lw $ s1, 0 ($ s0) # tải giá trị thử nghiệm để đăng ký $ t1
li $ t0, 0 #load giá trị cho trường hợp thử nghiệm
li $ t1, 1
li $ t2, 2
beq $ s1, $ t0, case_0
beq $ s1, $ t1, case_1
beq $ s1, $ t2, case_2
mặc định

case_0: j add $ s2, $ s2, 1 j # a = a + 1

tiếp tục
trường hợp 1: sub $ s2, $ s2, $ t1 j tiếp # a = a-1
tục
case_2: thêm $ s3, $ s3, $ s3 j tiếp # b = 2 * b

tục
mặc định:
tiếp tục:

Bài tập1
Tạo một dự án mới để triển khai mã trong Bài tập ở nhà 1. Khởi tạo cho biến i và j. Biên dịch và

tải lên trình mô phỏng. Chạy chương trình này từng bước, quan sát sự thay đổi của bộ nhớ và nội

dung của các thanh ghi ở mỗi bước.

Chuyển nhượng 2

Tạo một dự án mới thực hiện mã trong Bài tập về nhà 2. Khởi tạo cho các biến i, n, bước, tổng và

mảng A. Biên dịch và tải lên trình mô phỏng. Chạy chương trình này từng bước, quan sát sự thay đổi

của bộ nhớ và nội dung của các thanh ghi theo từng bước. Hãy thử kiểm tra với một số trường hợp

nữa (thay đổi giá trị của các biến).

Bài tập 3
Tạo một dự án mới triển khai mã trong Bài tập ở nhà 3. Biên dịch và tải lên trình mô phỏng.

Chạy chương trình này từng bước; quan sát sự thay đổi của bộ nhớ và nội dung của các thanh ghi

theo từng bước. Thay đổi giá trị của biến kiểm tra và chạy chương trình này một số lần để kiểm

tra tất cả các trường hợp.

Bài tập 4
Sửa đổi Nhiệm vụ 1, để điều kiện được kiểm tra là

một. tôi <j

b. tôi> = j

c. i + j <= 0

d. i + j> m + n

Nhiệm vụ5
Sửa đổi Bài tập 2, để điều kiện được kiểm tra ở cuối vòng lặp là
một. tôi <n

b. tôi <= n

c. tổng> = 0

d. A [i] == 0
Machine Translated by Google

Hà Không có I
trường đại học củaKhoa học và Công nghệ
Trường học của Công nghệ thông tin và truyền thông

Bài tập 6

Sử dụng tất cả các hướng dẫn và câu lệnh ở trên, hãy tạo một dự án mới để thực hiện chức năng này:

tìm phần tử có giá trị tuyệt đối lớn nhất trong danh sách các số nguyên.

Giả sử rằng danh sách này được lưu trữ trong một mảng số nguyên và chúng ta biết số phần tử
trong đó.

Kết luận

Trước khi bạn vượt qua bài tập trong phòng thí nghiệm, hãy nghĩ về những câu hỏi dưới đây:

Thanh ghi nào bị ảnh hưởng bởi lệnh rẽ nhánh?

You might also like