0000 0000 .word #%0000 ;RST 0002 0000 .word #%0000 ;RST FCW 0004 0000 .word #%0000 ;RST SEG 0006 0000 .word #%0000 ;RST PC 0008 abf5 dec r15,#6 !reserviere 6 byte speicher fuer die funktion! 000a 6ffe0004 ld %0004(r15),r14 !sichere r14! 000e 2ff7 ld @r15,r7 !ablegen 1.ueberg.parameter auf der Adresse in r15 (stack)! 0010 4d080000 clr %0000 !init ext. var "swap_flg" mit 0x0000! 0014 61f20000 ld r2,%0000(r15) !===>LABEL0 - lade 1.ueberg.parameter auf r2! 0018 6f020000 ld %0000,r2 !lade r2 auf den anfang des vergl.structs "magics"! 001c bdea ldk r14,#10 !zaehler auf 10 (anzahl elemente vergl.struct "magics")! 001e abe0 dec r14,#1 !===>LABEL1 - zaehler 1 minimieren! 0020 a1e2 ld r2,r14 !zaehler in register r2 laden! 0022 81e2 add r2,r14 !im vergl. struct "magics" stehen integers und die sind 2 byte gross - also doppelt so weit hinten im speicher! 0024 61f30000 ld r3,%0000(r15) !1.ueberg. parameter in r3 laden! 0028 4b230000 cp r3,%0000(r2) !vergleiche r3 mit vergl.struct - position "r2" (position "zaehler")! 002c eef8 jr nz,%001e !wenn ungleich GOTO LABEL1! 002e 8de4 test r14 !wenn zaehler gesetzt (!=0)! 0030 ee0b jr nz,%0048 !GOTO LABEL3! 0032 a137 ld r7,r3 !besetzen 1.ueberg.parameter-von-swap() (r7) mit r3! 0034 5f000000 call %0000 !call swap()! 0038 6ff20000 ld %0000(r15),r2 !1.ueberg.parameter mit rueckgabewert von swap() neu setzen! 003c 61020000 ld r2,%0000 !nach r2 swap_flg laden! 0040 69000000 inc %0000,#1 !swap_flg inkrementieren um 1! 0044 8d24 test r2 !wenn swap_flg leer (1. durchlauf, gerade erst swap() aufgerufen)! 0046 e6e6 jr z,%0014 !GOTO LABEL0! 0048 8de4 test r14 !===>LABEL3 - pruefe zaehler! 004a ee02 jr nz,%0050 !gesetzt (!=0), GOTO LABEL4! 004c 4d080000 clr %0000 !ergo wenn 0 => leeren swap_flg (magic wurde nicht gefunden => swap_flg definiert auf 0 setzten auch wenn geswapt wurde)! 0050 a1e2 ld r2,r14 !zaehler in den return-value laden! 0052 61fe0004 ld r14,%0004(r15) !rueckladen r14! 0056 a9f5 inc r15,#6 !6 byte wieder freigeben! 0058 9e08 ret !nm + objdu output #130 nm goodmagic.o 0000 T _goodmagic 0000 D _magics U _swap 0002 C _swap_flg #131 objdu goodmagic.o File goodmagic.o Image size: 102 Bss size: 0 Entry point: 0x0 Segment 0 Text size: 82 Data size: 20 Bss size: 0 Text...... 0000: abf5 6ffe 0004 2ff7 4d08 0000 61f2 0000 0010: 6f02 0000 bdea abe0 a1e2 81e2 61f3 0000 0020: 4b23 0000 eef8 8de4 ee0b a137 5f00 0000 0030: 6ff2 0000 6102 0000 6900 0000 8d24 e6e6 0040: 8de4 ee02 4d08 0000 a1e2 61fe 0004 a9f5 0050: 9e08 Data...... 0000: 0000 e707 e711 e705 e607 e611 e605 e507 0010: e511 e505 #132 !