54 lines
2.5 KiB
NASM
54 lines
2.5 KiB
NASM
###############################################################################
|
|
##### Beispielcode fuer den Aufruf eines Unterprogramms #####
|
|
##### mit Uebergabe- und Rueckgabewerten #####
|
|
##### Folgender High-Level-Code wird in Mips-Assembler uebersetzt: #####
|
|
###############################################################################
|
|
##### int main () #####
|
|
##### { #####
|
|
##### int y; #####
|
|
##### ... #####
|
|
##### y = diffofsum (2,3,4,5); #####
|
|
##### ... #####
|
|
##### } #####
|
|
##### int diffofsums (int f, int g, int h, int i) #####
|
|
##### { #####
|
|
##### int result; #####
|
|
##### result = (f+g)-(h+i); #####
|
|
##### return result; #####
|
|
##### } #####
|
|
###############################################################################
|
|
|
|
|
|
main:
|
|
# Laden der f,g,h,i in die Uebergaberegister a0-a3
|
|
addi $a0, $zero, 2
|
|
addi $a1, $zero, 3
|
|
addi $a2, $zero, 4
|
|
addi $a3, $zero, 5
|
|
|
|
# Aufruf der Unterprozedur diffofsum, Speichern der Ruecksprungadresse in $ra
|
|
jal diffofsums
|
|
|
|
# Benutzen des Rueckgabewertes, der in $v0 liegt, $s0 = y
|
|
add $s0, $v0, $zero
|
|
|
|
# exit
|
|
li $v0, 10
|
|
syscall
|
|
|
|
####################### Unterprogramm diffofsums ##############################
|
|
|
|
diffofsums:
|
|
add $t0, $a0, $a1 # t0 = f+g
|
|
add $t1, $a2, $a3 # t1 = h+i
|
|
sub $t2, $t0, $t1 # s0 = (f+g)-(h+i)
|
|
add $v0, $t2, $zero # v0 = result
|
|
jr $ra # Ruecksprung
|
|
|
|
####################### Ende des Unterprogramms diffofsums ####################
|
|
|
|
###############################################################################
|
|
## Dieser Beispielcode fuer den Aufruf eines Unterprogramms wurde dem Buch ##
|
|
## Digital Design & Computer Architecture von Harris & Harris entnommen ##
|
|
###############################################################################
|