Microsoft Word Huong dan thuc hanh mips asm tren pcspim doc



tải về 0.57 Mb.
Chế độ xem pdf
trang8/10
Chuyển đổi dữ liệu02.11.2023
Kích0.57 Mb.
#55526
1   2   3   4   5   6   7   8   9   10
huong dan thuc hanh mips asm tren pcspim 5652
MIPSSSS, 5
5.9 Cách gọi hàm đơn giản 
Lệnh jal dùng để gọi hàm, lệnh jr dùng để trở về từ hàm được gọi. Lệnh nop cần được 
thêm vào sau các lệnh jal và jr 
Các chú ý về cách gọi hàm đơn giản: 
o Thủ tục con được gọi bởi lệnh 
jal

o Thủ tục con không gọi thủ tục con khác. 
o Thủ tục con trở về chương trình gọi bằng lệnh 
jr $ra

o Các thanh ghi được sử dụng:
ƒ 
$t0 - $t9
— Thủ tục con tự do sử dụng. 
ƒ 
$s0 - $s7
— Thủ tục con không được thay đổi giá trị sau khi trở về. 
jal sub # $ra <― PC+4 (the address 8 bytes away from the jal)
# PC <― sub load the PC with the subroutine entry point 
# a branch delay slot follows this instruction 
jr $ra # PC <― $ra
# A branch delay slot follows this instruction. 
li $t1,-7 # init sum to -7 
lw $t0,
($sp)
# pop 18b 
addu $sp,$sp,
4
addu $t1,$t1,$t0 # 18b -7 
lw $t0,($sp) # pop -12a 
addu $sp,$sp,4 
addu $t1,$t1,$t0 # -12a + 18b -7 
lw $t0,($sp) # pop ab 
addu $sp,$sp,4 
addu $t1,$t1,$t0 # ab - 12a + 18b -7 
done: li $v0,1 # print sum 
move $a0,$t1 
syscall 
li $v0,10 # exit 
syscall
.data 
a: .word 0 
bb: .word 10 


ƒ 
$a0 - $a3
— Chứa các tham số cho thủ tục con. Thủ tục con có thể thay đổi 
các thanh ghi này. 
ƒ 
$v0 - $v1
— Chứa các giá trị trả về từ thủ tục con. 
o Thủ tục 
main
trả điều khiển bằng cách sử dụng hàm exit của hệ thống. 
Thiết lập các tham số trong menu Simulator -> Settings: 
Bare Machine OFF, Allow Pseudo Instructions ON, Load Trap File ON, Delayed 
Branches ON, Delayed Loads ON, Mapped IO ON, Quiet OFF 
Sau đây là chương trình đọc 3 số nguyên và in ra tổng của chúng: 
# read in three integers and print their sum 

.text 
.globl main 
main: 
jal pread # read first integer 
nop # branch delay slot 
move $s0,$v0 # save it in $s0 
jal pread # read second integer 
nop # branch delay slot 
move $s1,$v0 # save it in $s1 
jal pread # read third integer 
nop # branch delay slot 
move $s2,$v0 # save it in $s2 
addu $s0,$s0,$s1 # compute the sum 
addu $a0,$s0,$s2 
li $v0,1 # print the sum 
syscall 
li $v0,10 # exit 
syscall 
# pread -- prompt for and read an integer 
# on entry: 
# $ra -- return address 
# on exit: 
# $v0 -- the integer 
.text 
.globl pread 
pread:
la $a0,prompt # print string 
li $v0,4 # service 4 
syscall 
li $v0,5 # read int 
syscall # service 5 
jr $ra # return 
nop # branch delay slot 
.data 
prompt: 
.asciiz "Enter an integer: " 



tải về 0.57 Mb.

Chia sẻ với bạn bè của bạn:
1   2   3   4   5   6   7   8   9   10




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương