www.spartan.3000.it  ASSEMBLER HOME PAGE ASSEMBLER  www.spartan.da.ru 

 ASSEMBLER  Lezione 1 Lezione 2 Lezione 3 Lezione 5 Lezione 6 Lezione 7 Lezione 8  ASSEMBLER 

LEZIONE 4




  Il registro SS punta ad un altro blocco che viene denominato STACK: immaginate che il vostro programma ad un certo punto deve andare momentaneamente 1000 istruzioni più avanti, per fare qualcosa ed alla fine deve ritornare dov'era, come fa a ricordarsi dov'era? Semplice, prende l'indirizzo corrente puntato da CS:IP e lo memorizza in 4 byte all' indirizzo SS:SP poi salta al nuovo indirizzo, alla fine preleva da SS:SP l'indirizzo originario e vi ritorna, in pratica questo salvataggio avviene automaticamente quando eseguite un'istruzione 'CALL indirizzo' e viene prelevato automaticamente quando eseguite l'istruzione RETF (ritorna). E se la sub chiamata contenesse a sua volta un'altra chiamata ad un'altra sub?, niente panico, perché il processore prima di salvare l'indirizzo di ritorno diminuisce SP di quattro e quindi accatasta tutti gli indirizzi di ritorno uno sull'altro, ecco perché STACK, ovviamente quando si esegue una RETF avviene l'inverso e viene scaricato l'ultimo indirizzo salvato. In pratica lo stack viene considerato LIFO (Last In First Out) l'ultimo ad entrare è il primo ad uscire. Ecco un esempio:


 
 
 
INDIRIZZO DI MEMORIA ISTRUZIONE CODICI COMMENTI
1000h MOV AL,10 B0h C0h 0Ah mettere 10 in AL
1003h CALL FAR sub 9Ah 00h 11h chiama la routine sub
1100h ADD AL,1 04h 01h aggiungi 1 ad AL
1102h RETF CBh ritorna al chiamante
 
 
  Il compilatore inserisce automaticamente l'indirizzo di sub, quindi vi basta scrivere CALL sub e basta. I registri ES,FS e GS, invece, non sono vincolati ad alcun segmento e si possono usare per puntare a qualsiasi altro segmento, per esempio quello video.

I FILE COM
I file COM sono caratterizzati dal fatto che non possono essere più lunghi di 64Kbytes ossia di un segmento di memoria ed inoltre in questo segmento deve trovar posto anche l'area dati e lo stack, ma niente paura, se riuscite a scrivere un programma che superi la metà del segmento siete già dei mostri. Il DOS carica il programma dall'indirizzo 256 in poi e pone nei primi 255 byte alcune informazioni sull'ambiente operativo tipo le variabili PATH, PROMPT ecc. , inoltre dall'indirizzo 129 in poi inserisce la stringa di comando, ovvero il testo che digitate dopo il nome del programma, es. EDIT LETTERA.TXT, quindi all'indirizzo 128 trovate il numero 12 (la lunghezza di LETTERA.TXT più lo spazio fra EDIT e LETTERA.TXT) e da 129 in poi la stringa stessa, un carattere per ogni byte nel formato ASCII, uno standard mondiale che assegna ad ogni carattere un numero compreso fra 0 e 255. Il programma potrà controllare questa stringa e farne ciò che gli pare, nel caso dell' esempio edit.com aprirà il file per modificarlo o altro' Ovviamente il programma assembler andrà scritto con un editor di testo, EDIT.COM è valido, ma potete usare anche notepad o altro, l'importante è che possa salvare il file in formato testo puro. Prima di introdurre la lista delle istruzioni che il processore riconosce bisogna fare alcune importanti precisazioni, innanzitutto dal 386 in poi i registri principali (AX,BX,CX,DX,DI SI,SP,BP), sono diventati a 32 bit, ovvero hanno raddoppiato le loro dimensioni, ma restano comunque compatibili con l'uso a 16 bit.



@2ooo-2oo1 SPARTAN