IV.1. Lý thuyết
IV.1.1. Thủ tục với MIPS
1. Chuẩn bị đối số
2. Lưu trạng thái
3. Nhảy tới thủ tục
4. Thực thi thủ tục
5. Chuẩn bị kết quả
6. Quay về chương trình chính(tại lệnh kế tiếp) Quy ước:
Thanh ghi đối số: $a0 -$a3
Thanh ghi kết quả: $v0,$v1
Thanh ghi tạm: $t0- $t9
Thanh ghi lưu trữ: $s0 – $s7
Thanh ghi địa chỉ trả về: $ra
Thanh ghi con trỏ ngăn xếp: $sp IV.1.2. Đệ quy
IV.2. Thực hành
IV.2.1. Thực hành với thủ tục IV.2.2. Thực hành với đệ quy IV.3. Bài tập
IV.3.1. Bài 3.1
.data
string1: .asciiz "nhap so nguyen n: " string2: .asciiz "n!= " .text main: li $v0, 4 la $a0, string1 syscall li $v0, 5 syscall addi $t4, $v0, 0 addi $t4, $t4, 1 addi $t0, $0, 1
addi $t1, $0, 1 jal Giaithua li $v0, 4 la $a0, string2 syscall li $v0, 1
add $a0, $t1, $zero
syscall j end Giaithua: addi $sp, $sp, -4 sw $ra, ($sp) slt $t3, $t0, $t4 beq $t3, 0, exit mul $t1, $t1, $t0 addi $t0, $t0, 1 jal Giaithua exit: beq $sp, 0, end lw $ra, ($sp) addi $sp, $sp, 4 jr $ra jal exit end:
Khởi tạo $t1=1 (tich=1) Nhảy tới thủ tục Giaithua
In ra chuỗi string2
In ra kết quả n!
Dừng chương trình Mở ô nhớ stack
Lưu địa chỉ thanh ghi $ra vào stack Nếu i<n+1 thì t3 = 1 Nếu t3= 0 thì nhảy đến exit t1 = t1 *t0
t0 = t0 +1
Nếu $sp=0 nhảy đến end Lưu địa chỉ của $sp vào $ra Trả về stack Nhảy đến $ra Gọi hàm exit Kết thúc chương trình Bảng 16-Bài tập 4a 38
TIEU LUAN MOI download :
Hình 8- Kết quả bài tập 4a.1
Hình 9-Kết quả bài tập 4a.2
IV.3.2. Bài 3.2
.data
chuoi1: .asciiz "nhap so phan tu cua chuoi : "
chuoi2: .asciiz "\nChuoi so fibonaci la: 1" space: .asciiz " " .text main: la $a0, chuoi1 li $v0, 4 syscall li $v0, 5
syscall addi $t0, $v0, 0 addi $t1, $0, 1 addi $t2, $0, 1 addi $t3, $0, 1 la $a0, chuoi2 li $v0, 4 syscall loop: beq $t1, $t0, exit add $t2, $t2, $t3 sub $t3, $t2, $t3 la $a0, space li $v0, 4 syscall addi $a0,$t3, 0 li $v0, 1 syscall addi $t1, $t1, 1 j loop exit: t0 = v0 t1= 1 t2= 1 t3= 1 In ra chuỗi 2
Nếu t1= t0 thì dừng(exit) t2 = t2+ t3
t3 = t2 – t3
In ra khoảng trống In ra giá trị thanh ghi t3 Nhảy đến phần tử kế tiếp Kết thúc chương trình
Bảng 17- Bài tập 4b
TIEU LUAN MOI download :
Hình 10-Kết quả bài tập 4b.1
Hình 11-Kết quả bài tập 4b.2
41
42
V. Thực hành buổi 5 – Lab05
V.1. Datapaths
Lệnh 1: add $t1,$t2,$t3
Các khối hoạt động: Registers + ALU + PC
Ảnh mô phỏng MIPS_Xray:
Hình 12-Lệnh add
Lệnh 2: addi $t1,$t1,5
Các khối hoạt động: Registers + ALU + PC
Ảnh mô phỏng MIPS_Xray:
43
Hình 13-Lệnh addi
Lệnh 3: sub $t1,$t2,$3
Các khối hoạt động: Registers + ALU + PC
Ảnh mô phỏng MIPS_Xray:
Hình 14-Lệnh sub
44
Lệnh 4: lw $t1,4($t2) ; # $t2 = 0x10010000
Các khối hoạt động: Registers(Reading)+ALU+Registers(Writing)+PC
Ảnh mô phỏng MIPS_Xray:
Hình 15-Lệnh lw
Lệnh 5: sw $t1,8($t2); #$t2 = 0x10010020
Các khối hoạt động: ALU
Ảnh mô phỏng MIPS_Xray:
Hình 16-Lệnh sw
45
Lệnh 6: J exit exit:
Các khối hoạt động: Registers + ALU + PC
Ảnh mô phỏng MIPS_Xray:
Hình 17-Lệnh j
Lệnh 7: slt $t1,$t2,$t3
Các khối hoạt động: Registers + ALU + PC
Ảnh mô phỏng MIPS_Xray:
46
Hình 18- Lệnh slt
Lệnh 8: beq $t1, $t2 ; exit exit:
Các khối hoạt động: Registers + ALU + PC Ảnh mô phỏng MIPS_Xray:
Hình 19-Lệnh beq
Lệnh 9: bne $t1, $t2 ; exit exit:
47
Các khối hoạt động: Registers + ALU + PC
Ảnh mô phỏng MIPS_Xray:
Hình 20-Lệnh bne
Lệnh 10: sll $t0, $t0, 2
Các khối hoạt động: Registers + ALU + PC
Ảnh mô phỏng MIPS_Xray:
Hình 21-Lệnh sll
48