vuoi
o PayPal
tutte le volte che vuoi
Istruzioni Assembly
MOV DST, SRC Copia SRC in DST Non posso copiare direttamente da memoria a memoria
PUSH SRC Inserisce SRC in cima allo stack Decrementa ESP (Stack Pointer) di tanti byte quanti ne contiene SRC
POP DST Preleva un valore dalla cima dello stack di grandezza dipendente da DST Incrementa ESP
Per tornare alle condizioni originari prima delle PUSH/POP eseguite occorre reimpostare ESP al valore di partenza (manualemente con una MOV)
XCHG DST, DS2 Scambia il contenuto di DS1 e quello di DS2
LEA DST, SRC Carica in DST l'indirizo di memoria di SRC Sfruttato anche per eseguire operazioni aritmetiche più o meno complesse. Ad esempio: LEA EAX, [EBX*2+10] equivalente a EAX := EBX*2+10
CMOVcc DST, SRC Copia il valore SRC in DST solo se la condizione cc risulta verificata
Tutte le operazioni devono essere eseguite tra registri e vari/registri con la stessa dimensione
ADD DST, SRC
Somma SRC a DST salvando su DST
SUB DST, SRC
Sottrae SRC a DST e salva su DST
MUL SRC
Moltiplicazione senza segno
- SRC 8 bit AX = AL × SRC (8 bit)
- SRC 16 bit DX:AX = AX × SRC (16 bit)
- SRC 32 bit EDX:EAX = EAX × SRC (32 bit)
Non posso moltiplicare direttamente per una costante, devo obbligatoriamente copiarla su un registro
IMUL SRC
Moltiplicazione con segno
- IMUL SRC
- IMUL DST, SRC
- IMUL DST, SRC1, SRC2
1) Uguale a MUL per la distribuzione dei registri 2) SRC può anche essere un valore immediato 3) SRC2 è per forza un valore immediato C'è elevata probabilità di overflow. Controllare il flag OF (se è uguale a 1 c'è stato overflow).
DIV SRC
Divisione senza segno
SRC rappresenta il divisore (deve essere ≠ da zero)
- SRC 8 bit AX ÷ SRC divide AX per SRC Il risultato è in AL, il resto in AH
- SRC 16 bit DX:AX ÷ SRC DX AX
- SRC 32 bit EDX:EAX ÷ tBX EDX EAX
LOOP Addr
Istruzione ottimizzata e compatta per l'esecuzione di cicli, la variabile contatore è obbligatoriamente ECX.
Addr è per forza un indirizzo relativo a 8 bit.
- ECX viene decrementato automaticamente di 1
- ECX viene controllato automaticamente
- Se il valore di ECX è diverso da 0 salta ad Addr.
- Siamo costretti a contare all'indietro.
LOOPcc Addr
Funziona come il LOOP ma ha una seconda condizione oltre fino allo decremento di cc.
Esce dal ciclo se ECX = 0 o se cc è falsa.
Occorre fare attenzione ad entrare in LOOP/LOOPcc con ECX=0. Per fare ciò posso usare l'istruzione JECXZ che controlla se ECX è uguale a zero e, in caso, salta ad Addr.
CALL Addr
Esegue un sottoprogramma a partire da Addr.
Prima di eseguire il salto ad Addr CALL memorizza il valore di EIP (l’istruzione successiva del main) nello stack (PUSH EIP).
RET
Istruzione di ritorno al programma chiamante.
Non è necessario specificare l’indirizzo di ritorno (per questo è possibile utilizzare lo stesso sottoprogramma diverse volte o per operazioni differenti in diverse istruzioni).
Tramite una POP EIP sulla stack il controllo torna all’istruzione chiamante.