2010-05-05 17 views
6

Sto studiando ASM 8086 teoricamente al liceo. (Ciò significa che Studio ASM 8086 su un notebook e non riesco mai a eseguirlo su un computer).
Domanda su ADD su ASM 8086

E non capisco - che cosa accadrà se faccio questo:

MOV AL, F2h 
ADD AL, 20h 

Quale sarà il computer fare? (Quello che sarà il valore di AL, AX, CF, ZF?)

e che cosa accadrà se faccio questo:

MOV AH,F2h 
ADD AH,20h 

Grazie !!

risposta

5
MOV AL, F2h 

Posizionare il valore 0xF2 in AL (accumulatore) registrati.

ADD AL, 20h 

Aggiunge il valore 0x20 al valore contenuto nel registro AL.

AL sarà 0xF2 + 0x20. Ma AL è un registro a 8 bit, quindi il valore sarà 0x12 e non 0x112.

Stessa cosa per AH, in quanto è anche un registro a 8 bit.
Per ottenere il valore completo, è necessario utilizzare il registro AX, che è 16 bit.
AX è composto da AH (alto) e AL (basso), quindi è possibile accedere alle parti alta e bassa singolarmente.

----------------EAX ---------------- 
       ------- AX -------- 
|----------------|--------|--------| 
|    | AH | AL | 
|----------------|--------|--------| 
    16 bits  8 bits 8 bits 
+0

Poiché è un registro a 8 bit, verrà impostato il flag di trasporto? – xtofl

+1

Sì, verrà impostato in caso di overflow del registro AL. – Macmade

+0

Grazie mille Macmade, ora capisco le basi dell'ASM molto meglio. :-) – Tal

0

Quando stavo studiando ASM a scuola ho usato this program. Mi ha aiutato molto a eseguire il debug di semplici programmi asm. Hai appena inserito il tuo codice sorgente nell'editor, fai il debug e guarda cosa è successo con i registri step-by-step

+0

WOW! Stavo cercando qualcosa del genere per mesi! Grazie mille !!! – Tal

0

Il mio asm è un po 'arrugginito .. ma penso che nel tuo primo istante, AL terrebbe 12h e il carry sarebbe aumentare AH di uno.

Scarica l'emulatore this, ti consente di osservare l'esecuzione del codice passo-passo, ispezionare i valori dei registri, ecc. Molto più divertente di carta e penna.

1

Vorrei inoltre consiglia di utilizzare D86 (which comes with A86) in quanto consente di digitare le istruzioni in modo interattivo 8086 in modo da poter vedere cosa succede a tutti i registri e le bandiere dopo ogni istruzione.

Questo codice (come altri hanno fatto notare):

MOV AL, F2h 
ADD AL, 20h 

interesseranno solo le bandiere e il registro AL. Nessun altro registro a otto bit sarà interessato (anche AH). AX cambierà anche in quanto è costituito da AH e AL, quindi se AH era 42h:

Code   AL AH  AX 
MOV AL,F2h F2 42 42f2 
ADD AL,20h 12 42 4212 

Il risultato di tale particolare operazione imposterà il flag di carry e la bandiera parità e cancellare il troppopieno, zero, segno e ausiliario portano bandiere.

Si potrebbe pensare che il flag di overflow debba essere impostato, ma il flag di overflow considera i valori come valori firmati (in questo caso -14 e 32) e l'aggiunta non supera il valore massimo firmato (127).Il flag carry considera i valori come valori non firmati (242 e 32) e l'aggiunta supera il valore massimo senza segno: 242 + 32 = 274 che è maggiore di 255, quindi il carry è impostato.