trucchi-com

tutti i trucchi che nessuno sà

 

AREA PERSONALE

 

TAG

 

ARCHIVIO MESSAGGI

 
 << Luglio 2024 >> 
 
LuMaMeGiVeSaDo
 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
 
 

FACEBOOK

 
 

CONTATTA L'AUTORE

Nickname: romoletto640
Se copi, violi le regole della Community Sesso: M
Età: 59
Prov: EE
 

 

« assembler per principiantiassembler per principianti »

assembler per principianti

Post n°13 pubblicato il 02 Giugno 2007 da romoletto640
 

Cap. 4 STRUTTURA DI UN PROGRAMMA IN MEMORIA

Qualsiasi programma generalmente è formato dal codice, cioè le istruzioni che voi avete inserito, più i dati necessari, per esempio la stringa 'Hello world' che nella prima lezione abbiamo stampato sullo schermo, bene, il codice ed i dati dei file EXE vengono caricati in memoria in due blocchi separati, inoltre il DOS o Windows che si occupano di caricare in memoria questi programmi inseriscono nel registro CS il blocco che contiene le istruzioni cioè inserisce il valore del segmento del codice in CS ed il valore del segmento dei dati in DS. Semplice no?.

Certo, ma e gli altri?. Bene, il registro SS punta ad un altro blocco che viene denominato STACK (in inglese CATASTA), a che serve questo stack?

Immaginate che il vostro programma ad un certo punto deve andare momentaneamente 1000 istruzioni più avanti (deve richiamare una funzione o sub per gli amanti del C), 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. Volete un esempio?. Eccolo:

Indir. mem. istruzione codici commenti

1000h MOV AL,10 B0h C0h 0Ah inserisci 10 in AL

1003h CALL FAR sub 9Ah 00h 11h chiama la routine sub

………….

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

Veniamo ora ai file .COM che sono anche la scelta più naturale per chi ha intenzione di scrivere in assembler.

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, inoltre esistono altre istruzioni che permettono di usare la memoria in modo diverso, ma ne riparleremo.

 
 
 
Vai alla Home Page del blog
 
 

INFO


Un blog di: romoletto640
Data di creazione: 29/05/2007
 

CERCA IN QUESTO BLOG

  Trova
 

ULTIME VISITE AL BLOG

precious445benny1984fredom010pantera_blanca2NevegGgiallAea.joobleRjegu73developer68OLIO5wallygator54istrice82hiram9mrk2005rospetta000erconte5
 

CHI PUò SCRIVERE SUL BLOG

Solo l'autore può pubblicare messaggi in questo Blog e tutti gli utenti registrati possono pubblicare commenti.
 
RSS (Really simple syndication) Feed Atom
 
 

I MIEI LINK PREFERITI

 

© Italiaonline S.p.A. 2024Direzione e coordinamento di Libero Acquisition S.á r.l.P. IVA 03970540963