www.spartan.3000.it  ASSEMBLER HOME PAGE ASSEMBLER  www.spartan.da.ru 

 ASSEMBLER  Lezione 1 Lezione 2 Lezione 3 Lezione 4 Lezione 5 Lezione 7 Lezione 8  ASSEMBLER 

LEZIONE 6




  I numeri compresi tra 0 e 255 ( ossia la capacità di una cella di memoria) si chiamano BYTE.
I numeri compresi tra 0 e 65535 (ossia 16 bit) si chiamano WORD.

ADD XX,YY - aggiungi ad XX (che può essere un registro) il dato YY (che può essere un altro registro od un valore numerico).

ADC XX,YY - come per ADD, ma aggiunge 1 se il flag di carry è settato ad 1.

AND XX,YY - esegue il confronto bit per bit del primo numero col secondo sommandoli.

CALL (NEAR/FAR) XX - chiama un altro pezzo di programma che può trovarsi sullo stesso segmento (NEAR) oppure lontano (FAR), XX è l'indirizzo.

CLC - Clear carry flag, azzera il flag di carry

CLD - Azzera il flag di direzione.

CLI - Azzera il flag di interrupt, così la CPU non eseguirà gli interrupt (gli interrupt sono delle interruzioni che il sistema invia alla CPU).

CMC - complementa il flag di carry, ossia giralo a rovescio.

CMP XX,YY - confronta XX con YY. La CPU sottrae virtualmente YY da XX, la sottrazione viene solo simulata, ma vengono aggiornati i flag interessati.

CMPSB - è una variante di CMP, in pratica il confronto avviene tra la cella di memoria puntata da ES: (DI) e quella puntata da DS: (SI), dopo il confronto vengono incrementati di 1 sia DI che SI.

CMPSW - come per CMPSB, ma il confronto è su word.

DEC XX - DECrementa XX che può essere un registro o altro.

DIV CL - DIVidi AX per CL, risultato in AL resto in AH.

DIV CX - DIVidi DX:AX per CX risultato in AX resto in DX

INC XX - INCrementa XX

INT - richiama l'interrupt numero b

IRET - fine dell'interrupt

JA - salta all'indirizzo relativo YY, se il flag di carry è 0 ed il flag di zero è 0. Salto relativo significa che YY viene considerato positivo o negativo e sommato o sottratto all'indirizzo corrente. Il programma riprenderà da qui.

JB - (Jump Below) salta se carry=1, il risultato è minore

JBE - (Jump Below Equal) salta se carry=1 e zero=1

JC YY - (Jump Carry) salta se carry=1

JCXZ YY - (Jump CX Zero) salta se CX=0 (CX è il registro principe per contare all'indietro).

JE YY - (Jump Equal) salta se zero=1

JG YY - (Jump Greater) salta se il primo operando è più grande del secondo. Considera il segno flag S

JGE - (Jump Greater Equal) come sopra, anche uquale

Ovviamente esistono anche le condizioni opposte ossia, NZ (non zero), Less (minore), NE (not equal), ecc.

JMP SHORT - salta e basta di b bytes avanti o indietro (+-127)

JMP NEAR - salta e basta di w bytes (+-32737)

JMP FAR SS:AA - salta in un altro segmento (SS) indirizzo AA

LODSB - carica il byte puntato da DS:(SI) in AL, incrementa SI

LODSW - carica la word puntata da DS:(SI) in AX, incrementa SI

LOOP - decrementa CX, se non è zero salta di b bytes

LOOPE - decrementa CX, salta se cx è maggiore di 0 e flag di zero=1

LOOPNE - come sopra, ma solo se flag di zero=0 e CX è maggiore di 0 MOV XX,YY - copia il valore di XX in YY, alla fine sia XX che YY conterranno il valore di XX, che può essere un registro, una cella di memoria od un valore numerico

MUL b - moltiplica AX per b. Risultato in AX

POP XX - Immaginiamo di aver scritto un videogioco e di avere memorizzato in AX la posizione della nostra navetta spaziale, in CX il numero di vite che ancora abbiamo, in DX la navetta nemica, insomma abbiamo occupato tutti i registri. Ad un certo punto del programma abbiamo bisogno di scrivere sullo schermo che si sta avvicinando un grosso asteroide e ci serve, per farlo, il registro AX: se lo usiamo subito così, perderemo la posizione della nostra navetta e ci perderemo negli abissi siderali, dunque bisognerebbe appoggiarlo da qualche parte, usare AX e dopo recuperare il vecchio valore.



 
 




@2ooo-2oo1 SPARTAN