Domanda

AX Supponiamo = FFFE e BX = 1234
ora se scriviamo cmp ax,bx
(BX sarà sottratto dal ascia e le flages viaapproprite sarà aggiornato) Ora la rappresentazione binaria dei numeri in ax e bx è dato da

    AX =    1111    1111    1111    1110
   BX=     0001    0010    0011    0100


Come BX sarà sottratto dal ascia quindi dobbiamo negate bx (come Risultato = ax + (- bx)) in modo che il BX negato (complemento di BX a 2) è data da.

BX=    1110    1101    1100    1100

Ora aggiungiamo sia ascia e bx (come la sottrazione è implementato con l'aggiunta di computer)

    AX=   1111    1111    1111    1110
   BX=   1110    1101    1100    1100
    ------------------------------------
      1  1110    1101    1100    1010 

Ora, come si può vedere il risultato è di 17 bit ora il bit 17 dovrebbe andare in carry Flage, ma quando ho controllato il carry flag è 0 che è CF = 0 perché?

È stato utile?

Soluzione

Trovato un link qui: http://oopweb.com/Assembly/Documents/ArtOfAssembly/ Volume / Chapter_6 / CH06-2.html

E 'come mi aspettavo. Il carry flag viene impostato solo se era necessario "prendere in prestito". Nel fare la sottrazione, si imposta il carry flag prima di fare il "sottrarre" e il nuovo flag di carry dice se si dovesse prendere in prestito. Il vostro esempio omessa l'aggiunta di 1 per la bandiera prefissato riporto nel bit 17 che causerà alcun riporto nel risultato.

Altri suggerimenti

Pensate al carry flag come un po 'prendere in prestito quando viene eseguita la sottrazione. Questo viene inizializzato a 1 in modo che il funzionamento è a−b−C, cioè a + not(b) + C anziché a + not(b) + 1 come avete descritto. In altre parole, il riporto è invertita per sottrarre in modo che possa essere usato per fare sottrarre precisione multipla.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top