Vous êtes sur la page 1sur 3

ASSEMBLY x86 ESSENTIAL

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.

 Update AX con un numero a due byte comporta la modifica di AH e AL, OCIO


 Nome dei registri non case-sensitive

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:

; Declare three 4-byte values, initialized to 1, 2, and 3. The value


Z DD 1, 2, 3
of location Z + 8 will be 3.
bytes DB 10 DUP(?) ; Declare 10 uninitialized bytes starting at location bytes.
; Declare 100 4-byte words starting at location arr, all initialized to
arr DD 100 DUP(0)
0
; Declare 6 bytes starting at the address str, initialized to the ASCII
str DB 'hello',0
character values for hello and the null (0) byte.

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

FORMATO ISTRUZIONI E DIRETTIVE

- Operandi (MOV op1, op2)


- Commenti

DIRETTIVE PER LA DEFINIZIONE DEI DATI


- Nome: del dato
- Tipo: lunghezza del dato:
o DB riserva 1 o + byte
o DW riserva 1 o + word (2byte)
o DD riserva 1 o + doubleword (4byte)
ByteVar DB 0 ;1 byte inizializzato a 0
ByteArray DB 1,2,3,4 ;array di 4 byte
String DB ‘8’,’0’,’8’,’6’ ;array di 4 caratteri
String DB ‘8086’ ;equivalente al precedente

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>

- push: piacca il suo operando il cimo allo stack


- pop: rimuove i il dato di 4 byte in cima allo stack indicato dall’operando
- lea: load effective address: piazza l’indirizzo specificato dal suo secondo operando nel
registro indicato dal secondo operando
lea eax, [var] — the value in var is placed in EAX.

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>

Vous aimerez peut-être aussi