Software > Coding

Was hindert den Turboasm, eine INL für ds GFA-basic zu erstellen.

<< < (4/7) > >>

laufkopf:
Das musst Du wissen

guest3744:
Hallo, danke laufkopf.

Dein Programm läuft wunderbar.
Jetzt habe ich für GFA-Basic genug Varianten mit ASM , die auch überzeugend funktionieren.

Danke.
Gruss

laufkopf:
Kein Thema.

Für zwei, drei Unterfunktionen ist das ja ok. Sollten es jedoch mehr werden, bietet sich eine Sprungtabelle an.


--- Code: ---                move.l  4(SP),D0
                asl.w   #1,D0
                lea     tabelle(PC),A0
                movea.w 0(A0,D0.w),A1
                suba.w  (A1),A0
                jmp     (A0)
                rts

eins:
                rts
zwei:
                rts
drei:
                rts
vier:
                rts
fuenf:
                rts

tabelle:       DC.W 0
               DC.W tabelle-eins
               DC.W tabelle-zwei
               DC.W tabelle-drei
               DC.W tabelle-vier
               DC.W tabelle-fuenf
               END

--- Ende Code ---

guest3744:
Habe es in GFA umgesetzt als INL:


--- Code: ---CLS
INLINE inl%,100
BLOAD "d:\inl\ctabelle.inl",inl%
par1%=1
wert1%=@eins(par1%)
PRINT wert1%
'
PAUSE 50
END
'
FUNCTION eins(p1%)
  $F%
  RETURN C:inl%(L:p1%)
ENDFUNC
'

--- Ende Code ---

Stürzt ab mit  Bömbchen....

--- Code: ---                move.l  4(SP),D0
                asl.w   #1,D0
                lea     tabelle(PC),A0
                movea.w 0(A0,D0.w),A1
                suba.w  (A1),A0
                jmp     (A0)
                rts
                                                                                                                                                                                                                                                               
eins:
                move.l  #100,D0
                rts
zwei:
                move.l  #200,D0
                rts
drei:
                move.l  #300,D0
                rts
vier:
                move.l  #400,D0
                rts
fuenf:
                move.l  #500,D0
                rts

tabelle:    DC.W 0
               DC.W tabelle-eins
               DC.W tabelle-zwei
               DC.W tabelle-drei
               DC.W tabelle-vier
               DC.W tabelle-fuenf
               END

--- Ende Code ---
 

Ich habe immer den Wert erwartet von D0 je nach aufruf der Tabelle.
Oder mache ich da einen Fehler?

Danke.
Gruss             

laufkopf:
Der Assemblerteil gehört alles zusammen übersetzt.
Ich probier das gleich aber selbst mal aus.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln