trucchi-com

assembler per principianti


Cap. 1 La memoria In questo corso presumo che abbiate già delle conoscenze almeno a livello nozionistico della programmazione di un computer, ad ogni modo non sarà una grande mancanza, perché mi servirà solo per dei semplici esempi. Dunque per prima cosa facciamo una breve carrellata sull'arte della programmazione:Qualunque programma per PC sia esso con estensione EXE o COM per DOS o WINDOWS x.x ecc. ecc. ,esso è composto da una serie di numeri in sequenza che indicano al processore (486, Pentium o altro) cosa fare.A questo punto urge una breve spiegazione della circuiteria interna di un computer.Il computer possiede una memoria, (quella che è già insita nel sistema più quella che aggiungete voi comprando le famose SIMM), bene, cos'è questa memoria ?, essa è semplicemente una sequenza di minuscole celle in ognuna delle quali è possibile memorizzare un numero compreso fra 0 e 255, (più avanti capirete perché proprio 255), inoltre ogni cella è caratterizzata da un indirizzo formato da un numero, proprio come il numero civico della vostra abitazione, ovviamente questi numeri vanno da 0 per la prima cella fino alla fine della memoria.Se vi è chiaro questo sappiate che le cose sono un po' più complicate. Vi state chiedendo come? Bene, allora bisogna sapere che il primo processore da cui discende il vostro Pentium poteva indirizzare, ossia accedere fino 65535 celle di memoria, alias 64Kb, ma ora i programmi più moderni 64Kb di memoria se la mangiano a colazione, e quindi si è deciso di aumentare questo numero di blocchi di memoria, ma non aumentando la dimensione del blocco originario, bensì aggiungendo altri blocchi da 64Kb e facendo in modo che i processori successivi tra cui il vostro Pentium potesse scegliere tra i diversi blocchi in modo da averli tutti a disposizione per l'uso. Comodo no?Bene, questi blocchi, che d'ora in poi chiameremo col loro nome, ossia SEGMENTI, nel modello base sono sedici, numerati da 0 a 15, alcuni di questi blocchi non sono disponibili ai programmi perché vengono monopolizzati da altre parti del computer o dal sistema operativo, per esempio il blocco 0 è usato dal BIOS e dal DOS per i loro affari, mentre i blocchi 10 e 11 sono di proprietà della scheda video che li usa per mostrare sullo schermo tutto quello che i programmi memorizzano in queste locazioni di memoria, inoltre il blocco 15 è di proprietà del BIOS e non potete neanche scriverci perché è un blocco di sola lettura. In pratica i blocchi disponibili ai programmi sono solo quelli che vanno dal n.1 al n. 9 e neanche completamente.Ok, detto questo vediamo come sono fatte queste celle di memoria, esse sono semplicemente delle piccole celle che contengono 8 elementi elettronici i quali possono trovarsi ognuno in due soli stati con tensione o senza tensione, ora se gli stati possibili fossero 10 potrei semplicemente assegnare ad ogni stato un numero da 0 a 9 e quindi ogni cella potrebbe contenere un numero compreso fra 0 e 99999999, ma ciò non è possibile e bisogna adoperare solo due numeri 0 e 1. Come si fa?Prima chiediamoci perché il sistema numerico conta fino a 10, fatto?, ok, il 10 è stato scelto non in base a considerazioni altamente scientifiche, ma semplicemente perché le nostre mani hanno 10 dita e prima si contava sulle mani. Tutto qui. Delusi? No.Ora abbiamo visto che il computer ha solo due dita. Vogliamo provare? Dunque contiamo: 0 e scriviamo 0, aggiungiamo 1 e viene 1, aggiungiamo ancora 1, che succede?, scriviamo zero con riporto di 1 quindi viene 10 che non è il nostro dieci, ma il due scritto sulle dita del computer, aggiungiamo ancora 1 e fanno 11 (3 in decimale), ancora uno e facciamo 100 (4 in decimale), se continuate ad contare in questo modo raggiungerete le otto cifre ossia 11111111 che corrispondono a 255 in decimale, ecco spiegato il perché di quello strano numero.Vi anticipo che viene usato anche un altro sistema numerico dai programmatori, che ovviamente non serve al processore, ma ai programmatori stessi per scrivere in modo più leggibile i loro programmi, ossia il sistema esadecimale, che si basa su una mano con sedici dita, perché sedici, perché 15 in binario si scrive 1111, ossia mezza cella di memoria utile per alcune funzioni.