Linguaggio assembly IA-32
Indirizzamento
- Prima si indica lo sorgente poi la destinazione.
- I nomi dei registri sono preceduti da %.
- Le costanti sono precedute da $.
- Le costanti non precedute da % o $, sono indirizzi di memoria.
- La dimensione degli operandi viene indicata con i suffissi b (8bit), w (16bit), l (32bit).
- Ogni statement (riga di codice) è formata da 4 campi:
- Label: Identifica univocamente un indirizzo di memoria → la label è una stringa seguita da “:”, e la stringa può contenere lettere, cifre e alcuni caratteri speciali (tipo “_”).
- Opcode: Stringa corrispondente al codice operativo.
- Operandi: Operandi dell'istruzione → di vario tipo: costanti (operandi immediati), registri, indirizzi di memoria. Se sono presenti due operandi, il primo è detto sorgente il secondo destinazione.
- Commento → inizia con # e si può usare in tutti gli statement.
- Il codice assembly è diviso in sezioni: Dati e Testo.
- Il punto di ingresso è l'etichetta globale “_main”.
.global _main .equ FINE_STRINGA 0 .data v_byte: .byte 0xFF v_word: .word 0xFFFF v_int: .int 0xFFFFFFFF vettore: .space 100 stringa: .asciz “123\n” .text _main: ... ret # fine procedura _main
Modelli di memoria IA-32
- Segmented: memoria divisa in 16k segmenti di 4 Gbyte l'uno.
- Flat: memoria è un unico segmento di 4 Gbyte → Un registro può essere memorizzato completamente in un registro → Noi usiamo questo modello.
Tipi di dato di riferimento
- Byte: 8 bit che iniziano a qualsiasi indirizzo, (da 0 a 7) il meno significativo è lo 0.
- Word: 2 byte che iniziano a qualsiasi indirizzo, (da 0 a 15) il meno significativo è lo 0.
- Double Word: 4 byte che iniziano a qualsiasi indirizzo, (da 0 a 31) il meno significativo è lo 0.
- IA-32 è Little Endian: i byte meno significativi sono ad un indirizzo inferiore di quelli più significativi.
Registri
- eAx, eBx, eCx, eDx: uso generale.
- eBp, eSp: usati spesso per passare e ricevere dati.
- eFLAGS: contiene i bit di stato.
Bit di stato
- CF (bit 0): 1 quando il risultato ha determinato riporto (carry).
- PF (bit 2): 1 quando il risultato ha un numero pari di 1.
- AF (bit 4): 1 quando il risultato ha determinato riporto intermedio sul bit 3.
- ZF (bit 6): 1 quando il risultato è zero.
- SF (bit 7): bit segno, 1 quando il risultato è negativo.
- OF (bit 11): 1 quando il risultato ha causato overflow con operazioni in aritmetica intera con segno (complemento a 2).
Modalità di indirizzamento
movl $0x
-
Architettura Elaboratori - Eckert
-
Architettura Elaboratori - Linguaggio macchina 6502
-
Architettura degli elaboratori
-
Appunti Architettura degli elaboratori