Académique Documents
Professionnel Documents
Culture Documents
REGISTRI: I processori x86 hanno 8 registri general purpose a 32-bit (noi ci limitiamo a quelli da 16
per semplicità).
Possono essere utilizzati sezionati per averne un maggior numero (nonostante occupino lo stesso
spazio fisico) nel caso in cui non si necessiti di numeri a 32 bit.
MEMORIA E INDIRIZZAMENTO
DICHIARARE STATIC DATA REGIONS
È possibile dichiarare static data regions (analoghe alle variabili globali del C++) in x86 usando
l’apposita direttiva .DATA, seguita dalle singole dichiarazioni.
Esempi:
.DATA
var DB 64 ; Declare a byte, referred to as location var, containing the value 64.
var2 DB ? ; Declare an uninitialized byte, referred to as location var2.
; Declare a byte with no label, containing the value 10. Its location is
DB 10
var2 + 1.
X DW ? ; Declare a 2-byte uninitialized value, referred to as location X.
Y DD 30000 ; Declare a 4-byte value, referred to as location Y, initialized to 30000.
IMPO: Al contrario dei linguaggi ad alto livello, in x86 gli array sono semplicemente un numero di
celle allocate contiguamente in memoria.
Esempi:
INDIRIZZAMENTO MEMORIA
Indirizzi dei moderni processor x86 sono a 32-bit -> posso indirizzare 2^32 diversi indirizzi di
memoria. X86 permette di:
- Far riferimento a regioni di memoria utilizzando delle etichette (costanti)
- Mette a disposizione uno schema flessibile per calcolare e far riferimento agli indirizzi di
memoria
ISTRUZIONI
DATA MOVEMENT
- mov: copia il dato riferito al secondo operando nella locazione riferita al primo operando
mov <reg>,<reg>
mov <reg>,<mem>
mov <mem>,<reg>
mov <reg>,<const>
mov <mem>,<const>
ARITHMENTIC
- add
- sub
- inc, dec
- imul
- idiv
- and, or, xor
- shl, shr (shift)
CONTROL FLOW
- jmp <label>
- jcondition <label> (je, jne, jz, jg, jge, jl, jle)
- cmp: compara I valori di due operandi settando il codice di condizione adeguato nella word
stato della macchina
cmp <reg>,<reg>
cmp <reg>,<mem>
cmp <mem>,<reg>
cmp <reg>,<con>