Autor Thema: ASM : Wie funktioniert die Datenübergabe über den Stack?  (Gelesen 2693 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

guest3744

  • Gast
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?
                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

So rufe ich auf in GFA-Basic:
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

Danke.
Gruss

Offline laufkopf

  • Benutzer
  • Beiträge: 341
Re: ASM : Wie funktioniert die Datenübergabe über den Stack?
« Antwort #1 am: Do 24.09.2015, 16:58:11 »
Genau so ist es richtig

guest3744

  • Gast
Re: ASM : Wie funktioniert die Datenübergabe über den Stack?
« Antwort #2 am: Do 24.09.2015, 19:49:13 »
Und der Stack wird dadurch nicht beeinflusst?

Dane.
Gruss

Offline laufkopf

  • Benutzer
  • Beiträge: 341
Re: ASM : Wie funktioniert die Datenübergabe über den Stack?
« Antwort #3 am: Sa 03.10.2015, 22:01:47 »
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.