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