Software > Coding

ASM : Wie funktioniert die Datenübergabe über den Stack?

(1/1)

guest3744:
Hallo,guten Tag.
Ich brauche bitte einmal Hilfe für die Datenübernahme mit dem Stack.

So rufe ich auf in GFA-Basic:
RETURN C:inl%(L:w0%,L:w1%,L:w2%)

In ASM soll es so sein:
1. Wert in D0 > w0%
2. Wert in D1 > w1%
3. Wert in D2 > w2%

Wie übergebe ich jetzt bitte in welcher Reigenfolge die Daten über den Stack SP?
Muss der Stack danach wieder neu gesetzt werden?

--- Code: ---                move.l  4(SP),D0
                move.l  8(SP),D1
                move.l  12(SP),D2
                asl.w   #2,D0
                lea     tab(PC),A0
                movea.l A0,A1
                adda.w  D0,A1
                suba.l  (A1),A0
                jmp     (A0)
                rts

mul:
                mulu    D1,D2
                move.l  D2,D0
                rts
div:
                divu    D2,D1
                move.l  D1,D0
                rts

muls:
                muls    D1,D2
                move.l  D2,D0
                rts

divs:
                divs    D2,D1
                move.l  D1,D0
                rts

tab:            DC.L 1
                DC.L tab-mul
                DC.L tab-div
                DC.L tab-muls
                DC.L tab-divs

--- Ende Code ---

So rufe ich auf in GFA-Basic:

--- Code: ---CLS
INLINE inl%,100
BLOAD "D:\INL\CMULDIV.INL",inl%
'
erg%=@muldiv(3,30,45)
PRINT erg%
PAUSE 50
'
FUNCTION muldiv(w0%,w1%,w2%)
  $F%
  RETURN C:inl%(L:w0%,L:w1%,L:w2%)
ENDFUNC

--- Ende Code ---

Danke.
Gruss

laufkopf:
Genau so ist es richtig

guest3744:
Und der Stack wird dadurch nicht beeinflusst?

Dane.
Gruss

laufkopf:
Im Beispiel hast Du den Stack nicht verändert. Ansonsten natürlich immer korrigieren.
Bei c: und call: dürfen die Register a3-a6 und a7 (der stack) nicht verändert werden.

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln