32 lines
1.4 KiB
NASM
32 lines
1.4 KiB
NASM
########################################################################
|
|
##### Folgender High-Level Code wird in Assembler umgesetzt: #####
|
|
##### int sum = 0; #####
|
|
##### for (i = 1; i < 101; i = i*2) #####
|
|
##### sum = sum + i; #####
|
|
########################################################################
|
|
##### addiert die Vielfachen von 2 von 1 bis 100, zeigt die #####
|
|
##### Verwendung der 'set less than' Anweisung slt #####
|
|
########################################################################
|
|
|
|
addi $s1, $zero, 0 # Initialisierung der Summe sum in $s1 mit 0
|
|
addi $s0, $zero, 1 # Initialisierung des Zaehlers i in $s0 mit 1
|
|
addi $t0, $0, 101 # Obergrenze 101
|
|
|
|
|
|
loop:
|
|
slt $t1, $s0, $t0 # if (i<101) $t1 = 1, else $t1 = 0
|
|
beq $t1, $zero, done # if $t1 == 0 (i >=101), spring zur Marke done
|
|
add $s1, $s1, $s0 # sum = sum + i
|
|
sll $s0, $s0, 1 # i = i * 2
|
|
j loop # Sprung zu loop
|
|
|
|
done:
|
|
li $v0, 10 # Der Wert 10 fuer den syscall bedeutet:
|
|
syscall # terminate execution
|
|
|
|
|
|
##########################################################################
|
|
# Dieses Beispiel fuer eine Schleife, die slt nutzt, entstammt dem Buch: #
|
|
# Harris & Harris: Digital Design and Computer Architecture, Kap. 6 #
|
|
##########################################################################
|