nega_pas_asm8088
Transcript
nega_pas_asm8088
File: /home/peppino/Area_Lavori/ese…/CLEARVET_PAS_with_ASM8088.PAS { ******************************************************************** * Usare: TASM e TUBO PASCAL * * Un vettore di 6 elementi booleani impostati a VERO * vengono negati da una procedura Assembler 8088 * * * * * Questo semplice esercizio illustra il passaggio di parametri tra * il linguaggio ad alto livello e quello a basso livello attraverso * l' area di STACK * * by ing. G. TALARICO * * ******************************************************************** } program Vettore_Booleano; uses CRT; const N = 6; type vettore = array [1..N] of boolean; var V:vettore; j:byte; {$F+} procedure Clear_Vett ( lung:word;var W:Vettore);external; {$L b:\CUD\clearvet.obj} {$F-} BEGIN ClrScr; for j:=1 to N do begin V[j]:=True; writeln('V[',j,'] = ',V[j]) end; Clear_Vett(N,V); writeln; for j:=1 to N do begin writeln('V[',j,'] = ',V[j]) end END. (* ; STACK MEMORY LAYOUT: ;-----------------------;- Lunghezza Vettore ;-----------------------;;-Punt. Vettore Boolean ;;-----------------------;- CS ( Turbo Pascal ) ;-----------------------;- IP ( Turbo Pascal ) ;------------------------ BP+10 BP+6 BP+4 BP+2 Pagina 1 di 2 File: /home/peppino/Area_Lavori/ese…/CLEARVET_PAS_with_ASM8088.PAS ;- BP ( Turbo Pascal ) ;SP ---->;------------------------ BP+0 ;Lunghezza_Vettore = ( word ptr ss:[bp+10] ) ;Puntatore_Vettore = ( dword ptr ss:[bp+6] ) ; la procedura effettua la seguente operazione: ; for i:=1 to N do ; V[i]:=false; ; la seguente procedura assembler fa uso delle direttive semplificate. ;---------------------------------------------------------------------------.MODEL TPASCAL ; ; ; ; ; ; ; ; ; ; ; specifica il modello di occupazione di memoria e si adegua alle specifiche Turbo Pascal. Inoltre esegue automaticamente il prologo: PUSH BP MOVE BP,SP e l'epilogo: POP BP e calcola automaticamente il valore N di RET N. Che goduria ! ;---------------------------------------------------------------------------.CODE Clear_Vett PROC FAR Lunghezza_Vettore:WORD, Puntatore_Vettore:DWORD PUBLIC Clear_Vett les bx, Puntatore_Vettore mov di,0 FOR: cmp di,Lunghezza_Vettore je Ritorna mov byte ptr es:[bx][di],0 ; memorizzo FALSE nell' elemento corrente ; del vettore inc di jmp short FOR Ritorna: ret Clear_Vett ENDP END *) Pagina 2 di 2