Nộp bài tập tuần 5-Hà Tấn Thành-22521345

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 8

Nộp bài tập Tuần 5

Bài 3:
a.
Trước khi thực thi đoạn lệnh, giá trị của các thanh ghi là:
 $s0 = 0x12345678
 $s1 = 0x00000007
Sau khi thực thi đoạn lệnh, giá trị của các thanh ghi là:
 $s0 = 0x12345678
 $s1 = 0x00000007
 $t0 = 0xFFFFFFF8
 $t1 = 0x1234567F
b.
Trước khi thực thi đoạn lệnh, giá trị của thanh ghi là:
 $s0 = 0x0000000f
Sau khi thực thi đoạn lệnh, giá trị của các thanh ghi là:
 $s0 = 0x0000000f
 $t0 = 0x00000002
c.
Trước khi thực thi đoạn lệnh, giá trị của các thanh ghi là:
 $t0 = 0x0000008f
 $t1 = 0x0000009f
Sau khi thực thi đoạn lệnh, giá trị của các thanh ghi là:
 $t2 = 0x0000011e
d.
Trước khi thực thi đoạn lệnh, giá trị của thanh ghi là:
 $s0 = 0x00000002
 $t1 = 0x00000006
Sau khi thực thi đoạn lệnh, giá trị của các thanh ghi là:
 $s0 = 0x00000020
 $t1 = 0x00000000
 $s1 = 0x00000022
Bài 4:
a.
slt $t0, $s0, $s1 // So sánh i và j, nếu i < j
thì $t0 = 1, ngược lại $t0 = 0
beq $t0, $zero, ELSE // Nếu $t0 = 0 thì nhảy
đến nhãn ELSE
sll $t1, $s0, 2 // Tính độ lệch của A[i],
bằng i * 4
add $t1, $t1, $s3 // Tính địa chỉ của A[i],
bằng độ lệch + địa chỉ nền
lw $t2, 0($t1) // Lấy giá trị của A[i]
vào thanh ghi $t2
addi $t2, $t2, 1 // Tăng giá trị của A[i]
lên 1
sw $t2, 0($t1) // Lưu lại giá trị của A[i]
addi $t1, $t1, 4 // Tính địa chỉ của
A[i+1], bằng địa chỉ của A[i] + 4
li $t2, 5 // Đặt giá trị 5 vào thanh
ghi $t2
sw $t2, 0($t1) // Lưu giá trị 5 vào
A[i+1]
j DONE // Nhảy đến nhãn DONE
ELSE: sll $t1, $s0, 2 // Tính độ lệch của A[i],
bằng i * 4
add $t1, $t1, $s3 // Tính địa chỉ của A[i],
bằng độ lệch + địa chỉ nền
lw $t2, 0($t1) // Lấy giá trị của A[i]
vào thanh ghi $t2
addi $t2, $t2, -1 // Giảm giá trị của A[i] đi
1
sw $t2, 0($t1) // Lưu lại giá trị của A[i]
addi $t1, $t1, 4 // Tính địa chỉ của
A[i+1], bằng địa chỉ của A[i] + 4
li $t2, 10 // Đặt giá trị 10 vào
thanh ghi $t2
sw $t2, 0($t1) // Lưu giá trị 10 vào
A[i+1]
DONE: addi $s0, $s0, 1 // Tăng giá trị của i lên 1
b.
sle $t0, $s0, $s1 // So sánh i và j,
nếu i <= j thì $t0 = 1, ngược lại $t0 = 0
bgtz $s1, TRUE // Nếu j > 0 thì
nhảy đến nhãn TRUE
li $t0, 0 // Nếu j <= 0 thì
gán $t0 = 0
TRUE: beq $t0, $zero, ELSE // Nếu $t0 = 0 thì
nhảy đến nhãn ELSE
sll $t1, $s1, 2 // Tính độ lệch của
A[j], bằng j * 4
add $t1, $t1, $s3 // Tính địa chỉ của
A[j], bằng độ lệch + địa chỉ nền
sll $t2, $s0, 2 // Tính độ lệch của
A[i], bằng i * 4
add $t2, $t2, $s3 // Tính địa chỉ của
A[i], bằng độ lệch + địa chỉ nền
lw $t3, 0($t2) // Lấy giá trị của
A[i] vào thanh ghi $t3
lw $t4, 4($t2) // Lấy giá trị của
A[i+1] vào thanh ghi $t4
add $t5, $t3, $t4 // Cộng giá trị của
A[i] và A[i+1], kết quả được lưu vào thanh ghi $t5
sw $t5, 0($t1) // Lưu giá trị của
A[j] vào vùng nhớ tương ứng
j DONE // Nhảy đến nhãn
DONE
ELSE: sll $t1, $s1, 2 // Tính độ lệch của
A[j], bằng j * 4
add $t1, $t1, $s3 // Tính địa chỉ của
A[j], bằng độ lệch + địa chỉ nền
sll $t2, $s0, 2 // Tính độ lệch của
A[i], bằng i * 4
add $t2, $t2, $s3 // Tính địa chỉ của
A[i], bằng độ lệch + địa chỉ nền
lw $t3, 0($t2) // Lấy giá trị của A[i]
vào thanh ghi $t3
lw $t4, 4($t2) // Lấy giá trị của
A[i+1] vào thanh ghi $t4
sub $t5, $t3, $t4 // Trừ giá trị của A[i] và
A[i+1], kết quả được lưu vào thanh ghi $t5
sw $t5, 0($t1) // Lưu giá trị của A[j]
vào vùng nhớ tương ứng
DONE: addi $s0, $s0, 1 // Tăng giá trị của i lên 1

c.
loop: blez $s0, end // Nếu i <= 0 thì nhảy đến
nhãn end
sll $t0, $s0, 2 // Tính độ lệch của A[i], bằng
i*4
add $t0, $t0, $s3 // Tính địa chỉ của A[i], bằng
độ lệch + địa chỉ nền
lw $t1, 0($t0) // Lấy giá trị của A[i] vào
thanh ghi $t1
sll $t1, $t1, 3 // Nhân giá trị của A[i] với 8,
kết quả được lưu vào thanh ghi $t1
addi $t0, $t0, 4 // Tính địa chỉ của A[i+1],
bằng địa chỉ của A[i] + 4
sw $t1, 0($t0) // Lưu giá trị của A[i+1] vào
vùng nhớ tương ứng
addi $s0, $s0, -1 // Giảm giá trị của i đi 1 đơn vị
j loop // Nhảy đến nhãn loop
end: li $t1, 5 // Đặt giá trị 5 vào thanh ghi $t1
sw $t1, 0($s3) // Lưu giá trị 5 vào A[0]

d.
add $s1, $s5, $zero // Gán giá trị của value vào
thanh ghi $s1
li $s0, 1 // Gán giá trị 1 vào thanh
ghi $s0
loop: bge $s0, $s1, end // Nếu i >= j thì nhảy đến
nhãn end
sll $t0, $s0, 2 // Tính độ lệch của A[i],
bằng i * 4
add $t0, $t0, $s3 // Tính địa chỉ của A[i], bằng
độ lệch + địa chỉ nền
sll $t1, $s0, 2 // Tính độ lệch của B[i], bằng
i*4
add $t1, $t1, $s4 // Tính địa chỉ của B[i], bằng
độ lệch + địa chỉ nền
lw $t2, 0($t1) // Lấy giá trị của B[i] vào
thanh ghi $t2
sw $t2, 0($t0) // Lưu giá trị của B[i] vào A[i]
addi $s0, $s0, 1 // Tăng giá trị của i lên 1 đơn vị
j loop // Nhảy đến nhãn loop
end: li $s1, 0 // Gán giá trị 0 vào thanh ghi
$s1

e.

add $s1, $s5, $zero // Gán giá trị của value


vào thanh ghi $s1
li $s4, 0 // Gán giá trị 0 vào
thanh ghi $s4
li $s0, 0 // Gán giá trị 0 vào
thanh ghi $s0
loop: bge $s0, $s1, end // Nếu i >= j thì nhảy đến
nhãn end
sll $t0, $s0, 2 // Tính độ lệch của A[i],
bằng i * 4
add $t0, $t0, $s3 // Tính địa chỉ của A[i],
bằng độ lệch + địa chỉ nền
lw $t1, 0($t0) // Lấy giá trị của A[i] vào
thanh ghi $t1
slt $t2, $s4, $t1 // So sánh max và A[i],
nếu max < A[i] thì $t2 = 1, ngược lại $t2 = 0
beq $t2, $zero, next // Nếu $t2 = 0 thì nhảy đến
nhãn next
add $s4, $t1, $zero // Nếu max < A[i] thì gán
giá trị của A[i] vào thanh ghi $s4
next: addi $s0, $s0, 1 // Tăng giá trị của i lên 1
đơn vị
j loop // Nhảy đến nhãn loop
end: li $s1, 0 // Gán giá trị 0 vào thanh
ghi $s1

You might also like