@ Name: Matrikelnummer: @ Name: Matrikelnummer: @ Datum: #include "testSuite.inc" .file "fibo.S" .text @ legt eine Textsection fuer PrgrammCode + Konstanten an .align 2 @ sorgt dafuer, dass nachfolgende Anweisungen auf einer durch 4 teilbaren Adresse liegen @ d.h. die unteren 2 Bit sind 0 .global fiborec @ nimmt das Symbol fiborec in die globale Sysmboltabelle auf .type fiborec,function fiborec: TST R0, R0 MOVEQ PC, LR CMP R0, #2 MOVLE R0, #1 MOVLE PC, LR PUSH {r4, r5, LR} MOV R4, R0 SUB R0, R0, #1 BL fiborec MOV R5, R0 SUB R0, R4, #2 BL fiborec ADD R0, R0, R5 POP {R4, R5, PC} .Lfe1: .size fiborec,.Lfe1-fiborec .global fiboiter @ nimmt das Symbol fiboiter in die globale Sysmboltabelle auf .type fiboiter,function fiboiter: MOV R3, R0 // n MOV R0, #0 // a MOV R1, #1 // b fiboiter_loop: SUBS R3, R3, #1 BLT fiboiter_ret ADD R2, R0, R1 MOV R0, R1 MOV R1, R2 B fiboiter_loop fiboiter_ret: bx lr .Lfe2: .size fiboiter,.Lfe2-fiboiter .global fiboreccache @ nimmt das Symbol fiboreccache in die globale Sysmboltabelle auf .type fiboreccache,function fiboreccache: TST R0, R0 MOVEQ PC, LR CMP R0, #1 MOVEQ PC, LR LDR R1, =fiboliste LDR R2, [R1, R0, LSL #2] TST R2, R2 MOVNE R0, R2 MOVNE PC, LR PUSH {R4 - R6, LR} MOV R4, R0 MOV R6, R1 SUB R0, R4, #1 BL fiboreccache MOV R5, R0 SUB R0, R4, #2 BL fiboreccache ADD R0, R0, R5 STR R0, [R6, R4, LSL #2] POP {R4 - R6, PC} .Lfe3: .size fiboreccache,.Lfe3-fiboreccache .global fiboitercache @ nimmt das Symbol fiboitercache in die globale Sysmboltabelle auf .type fiboitercache,function fiboitercache: LDR R1, =fiboliste LDR R2, [R1, R0, LSL #2] TST R2, R2 MOVNE R0, R2 MOVNE PC, LR PUSH {R4, LR} MOV R4, R0 // n BL fiboiter LDR R1, =fiboliste STR R0, [R1, R4, LSL #2] POP {R4, PC} .Lfe4: .size fiboitercache,.Lfe4-fiboitercache .global fibocache_flush @ .type fibocache_flush,function fibocache_flush: LDR R1, =fiboliste EOR R0, R0 MOV R2, #(MAX_ENTRIES) fibocache_flush_loop: SUBS R2, R2, #1 MOVLT PC, LR STR R0, [R1, R2, LSL #2] B fibocache_flush_loop .Lfe5: .size fibocache_flush,.-fibocache_flush .bss .align 2 fiboliste: .space MAX_ENTRIES*4, 0 .end @ End of File