Oppure

Loading
25/05/09 19:00
theprogrammer
Qualcosa del genere (buttato giu' senza provarlo ... fai tutti i controlli e le correzioni del caso)

Per la chiamata

   mov [sp],ax
   sub sp,2
   mov [sp],bx
   sub sp,2
   call tuafunzione
   add sp,4


e per la funzione

   mov bx,[sp+6]
   mov ax,[sp+8]

   ret
Ultima modifica effettuata da theprogrammer 25/05/09 19:09
aaa
25/05/09 19:05
umberto1211
scusa per esp cosa itendi ?
aaa
25/05/09 19:09
manvb.net
Io ti scrivo una parte del codice.

start:
;Ponendo che in AX ci sia il valore1 e in BX il valore2
mov DX, BX ;Imposto DX per la funzione fpush
call fpush
mov DX, AX ;Imposto DX per la funzione fpush
call fpush
call funzione

...  ;Fine programma int 21h ecc...

fpop:
mov CX, [SP]
add SP, 2    ;Non dimentichiamoci di IP
mov DX, [SP]
add SP, 2
mov [SP], CX
sub SP, 2    ;Di nuovo IP
ret

fpush:
mov CX, [SP]
add SP, 2   ;Non dimentichiamoci di IP
mov [SP], DX 
sub SP, 2
mov [SP], CX
sub SP, 2    ;Di nuovo IP
ret

funzione:
call fpop    ;IP in DX
mov CX, DX   ;IP in CX
call fpop    ;AX valore1
mov AX, DX
call fpop    ;BX valore2
mov BX, DX
...
...   ;qui fai quello che vuoi con i valori
...   ;e fai in modo che il risultato vada in AX
mov DX, CX   ;ripristiniamo IP
call fpush
ret


Vedi se funziona l'ho scritto di corsa perchè dovevo andare a cena.
@Theprogrammer: esp (extended stack pointer (32 bit)) non esisteva nella 8086.
Ultima modifica effettuata da manvb.net 25/05/09 19:10
aaa
25/05/09 19:10
theprogrammer
Postato originariamente da umberto1211:

scusa per esp cosa itendi ?


No ... e' sp

(era un residuo del codice a 32 bit)
aaa