Assemblaggio - Introduzione

Cos'è il linguaggio Assembly?

Ogni personal computer dispone di un microprocessore che gestisce le attività aritmetiche, logiche e di controllo del computer.

Ogni famiglia di processori ha il proprio set di istruzioni per gestire varie operazioni come ricevere input dalla tastiera, visualizzare informazioni sullo schermo ed eseguire vari altri lavori. Questi set di istruzioni sono chiamati "istruzioni in linguaggio macchina".

Un processore comprende solo le istruzioni in linguaggio macchina, che sono stringhe di 1 e 0. Tuttavia, il linguaggio macchina è troppo oscuro e complesso per essere utilizzato nello sviluppo del software. Quindi, il linguaggio assembly di basso livello è progettato per una specifica famiglia di processori che rappresenta varie istruzioni in codice simbolico e in una forma più comprensibile.

Vantaggi del linguaggio assembly

Avere una comprensione del linguaggio assembly rende consapevoli di:

  • In che modo i programmi si interfacciano con OS, processore e BIOS;
  • Come vengono rappresentati i dati nella memoria e in altri dispositivi esterni;
  • Come il processore accede ed esegue le istruzioni;
  • Modalità di accesso e trattamento dei dati da parte delle istruzioni;
  • Come un programma accede ai dispositivi esterni.

Altri vantaggi dell'utilizzo del linguaggio assembly sono:

  • Richiede meno memoria e tempo di esecuzione;

  • Consente lavori complessi specifici dell'hardware in un modo più semplice;

  • È adatto per lavori con tempi critici;

  • È particolarmente adatto per scrivere routine di servizio di interrupt e altri programmi residenti in memoria.

Caratteristiche di base dell'hardware del PC

L'hardware interno principale di un PC è costituito da processore, memoria e registri. I registri sono componenti del processore che contengono dati e indirizzo. Per eseguire un programma, il sistema lo copia dal dispositivo esterno alla memoria interna. Il processore esegue le istruzioni del programma.

L'unità fondamentale di archiviazione del computer è un po '; potrebbe essere ON (1) o OFF (0) e un gruppo di 8 bit correlati crea un byte sulla maggior parte dei computer moderni.

Quindi, il bit di parità viene utilizzato per rendere dispari il numero di bit in un byte. Se la parità è pari, il sistema presume che si sia verificato un errore di parità (sebbene raro), che potrebbe essere stato causato da un guasto hardware o da un disturbo elettrico.

Il processore supporta le seguenti dimensioni di dati:

  • Word: un elemento di dati a 2 byte
  • Doubleword: un elemento di dati a 4 byte (32 bit)
  • Quadword: un elemento di dati a 8 byte (64 bit)
  • Paragrafo: un'area di 16 byte (128 bit)
  • Kilobyte: 1024 byte
  • Megabyte: 1.048.576 byte

Sistema di numeri binari

Ogni sistema numerico utilizza la notazione posizionale, ovvero ogni posizione in cui è scritta una cifra ha un valore posizionale diverso. Ogni posizione è la potenza della base, che è 2 per il sistema di numeri binari, e queste potenze iniziano da 0 e aumentano di 1.

La tabella seguente mostra i valori posizionali per un numero binario a 8 bit, dove tutti i bit sono impostati su ON.

Valore in bit 1 1 1 1 1 1 1 1
Valore di posizione come potenza di base 2 128 64 32 16 8 4 2 1
Numero di bit 7 6 5 4 3 2 1 0

Il valore di un numero binario si basa sulla presenza di 1 bit e sul loro valore di posizione. Quindi, il valore di un dato numero binario è -

1 + 2 + 4 + 8 +16 + 32 + 64 + 128 = 255

che è uguale a 2 8-1 .

Sistema numerico esadecimale

Il sistema numerico esadecimale utilizza la base 16. Le cifre in questo sistema vanno da 0 a 15. Per convenzione, le lettere dalla A alla F vengono utilizzate per rappresentare le cifre esadecimali corrispondenti ai valori decimali da 10 a 15.

I numeri esadecimali nell'informatica vengono utilizzati per abbreviare lunghe rappresentazioni binarie. Fondamentalmente, il sistema numerico esadecimale rappresenta un dato binario dividendo ogni byte a metà ed esprimendo il valore di ogni mezzo byte. La tabella seguente fornisce gli equivalenti decimali, binari ed esadecimali:

Numero decimale Rappresentazione binaria Rappresentazione esadecimale
0 0 0
1 1 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
8 1000 8
9 1001 9
10 1010 UN
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F

Per convertire un numero binario nel suo equivalente esadecimale, suddividilo in gruppi di 4 gruppi consecutivi ciascuno, a partire da destra, e scrivi quei gruppi sulle cifre corrispondenti del numero esadecimale.

Example - Il numero binario 1000 1100 1101 0001 è equivalente a esadecimale - 8CD1

Per convertire un numero esadecimale in binario, scrivi semplicemente ogni cifra esadecimale nel suo equivalente binario a 4 cifre.

Example - Il numero esadecimale FAD8 è equivalente a binario - 1111 1010 1101 1000

Aritmetica binaria

La tabella seguente illustra quattro semplici regole per l'addizione binaria:

(io) (ii) (iii) (iv)
1
0 1 1 1
+0 +0 +1 +1
= 0 = 1 = 10 = 11

Le regole (iii) e (iv) mostrano un riporto di 1 bit nella posizione successiva a sinistra.

Example

Decimale Binario
60 00111100
+42 00101010
102 01100110

Un valore binario negativo è espresso in two's complement notation. Secondo questa regola, convertire un numero binario nel suo valore negativo significa invertire i suoi valori di bit e aggiungere 1 .

Example

Numero 53 00110101
Invertire i bit 11001010
Aggiungi 1 0000000 1
Numero -53 11001011

Per sottrarre un valore da un altro, converti il ​​numero da sottrarre nel formato del complemento a due e aggiungi i numeri .

Example

Sottrai 42 da 53

Numero 53 00110101
Numero 42 00101010
Invertire i bit di 42 11010101
Aggiungi 1 0000000 1
Numero -42 11010110
53-42 = 11 00001011

L'overflow dell'ultimo bit viene perso.

Indirizzamento dei dati in memoria

Il processo attraverso il quale il processore controlla l'esecuzione delle istruzioni è denominato fetch-decode-execute cycle o il execution cycle. Consiste di tre passaggi continui:

  • Recupero dell'istruzione dalla memoria
  • Decodificare o identificare l'istruzione
  • Esecuzione dell'istruzione

Il processore può accedere a uno o più byte di memoria alla volta. Consideriamo un numero esadecimale 0725H. Questo numero richiederà due byte di memoria. Il byte di ordine superiore o il byte più significativo è 07 e il byte di ordine inferiore è 25.

Il processore memorizza i dati in una sequenza di byte inversa, ovvero un byte di ordine inferiore viene memorizzato in un indirizzo di memoria bassa e un byte di ordine superiore nell'indirizzo di memoria alta. Quindi, se il processore porta il valore 0725H dal registro alla memoria, trasferirà prima 25 all'indirizzo di memoria inferiore e 07 al successivo indirizzo di memoria.

x: indirizzo di memoria

Quando il processore ottiene i dati numerici dalla memoria per registrarli, inverte nuovamente i byte. Esistono due tipi di indirizzi di memoria:

  • Indirizzo assoluto: un riferimento diretto a una posizione specifica.

  • Indirizzo segmento (o offset) - indirizzo iniziale di un segmento di memoria con il valore di offset.