Quando uso ADC
per exmaple:ADC in ASM 8086
AL = 01 and BL = 02, and CF = 1
quando faccio questo:
ADC AL,BL
Sarà AL
essere 3
o 4
? (Con l'aggiunta CF
o senza?)
Quando uso ADC
per exmaple:ADC in ASM 8086
AL = 01 and BL = 02, and CF = 1
quando faccio questo:
ADC AL,BL
Sarà AL
essere 3
o 4
? (Con l'aggiunta CF
o senza?)
AL
saranno 4. ADC
mezzi add with carry
, così naturalmente il riporto è riassunta in. CF
viene impostata a 0, poiché non v'è alcuna effettuare dell'addizione in domanda.
e se faccio questo: AX = FF, BX = FF, CF = 1 e ADC AX, BX Cosa succederà? Voglio dire, dove sarà il computer a memorizzare il byte in più? Grazie!! – Tal
@Tal, AX e BX sono in grado di memorizzare più di un byte (dal momento che non si utilizzano registri a byte singolo come AL e BL qui!) Quindi il risultato sarà '1FF' in AX e, di nuovo, CF in 0. –
Sarà 4. ADC (aggiungi con carry) aggiunge 1 in più se il flag di trasporto (CF) è 1. Vedere la descrizione completa dell'opcode here.
alcune cose circa l'istruzione 8086
ADC
:
Syntax: adc dest, src
dest: memory or register
src: memory, register, or immediate
Action: dest = dest + src + CF
chiaramente l'azione, dice il flag di riporto (CF
) sarà incluso nel l'aggiunta in modo che il risultato sarà non 4
3
.
e cosa succede se faccio questo: AX = FF, BX = FF, CF = 1 e ADC AX, BX Cosa succederà? Voglio dire, dove sarà il computer a memorizzare il byte in più? Grazie !! – Tal
@Tal: Se lo fai, AX sarà 0x01FF e CF sarà 0. Non ci sono byte extra. –
non è diverso che aggiungere nella base di 10.
99 +11 9+1 is zero carry the 1 9+1+carry is 1 carry the 1
Il risultato di quanto sopra matematica decimale è 10 con un riporto di 1, o 110 se si vuole pensare in questo modo.
Ad inizio binario con un un bit sommatore, ecco una tabella di verità:
000 0 0 001 0 1 010 0 1 011 1 0 100 0 1 101 1 0 110 1 0 111 1 1
colonna di sinistra di tre bit sono le combinazioni di ingresso, due operandi e portare in, seconda colonna è svolgere e la terza colonna è il risultato
così 1 + 1 con alcun riporto è di 110 nella colonna di sinistra e il risultato è 0 portano il 1.
Nonaffatto differente che la matematica decimale sopra solo molto più semplice, quando aggiungi una colonna in decimale, operando a, operando b, porto. Il risultato è la risposta modulo 10 e il carry è il risultato/10. copia il carry nella parte superiore della colonna successiva e ripeti per sempre. come dimostrato con 99 + 11 o 999 + 111, ecc.
Per semplificare l'aggiunta di due bit senza trasferimento, il risultato è l'xor degli ingressi e l'esecuzione è il e dei due ingressi. È possibile implementare add con carry utilizzando due add senza portatori concatenati o eseguirli direttamente. Il risultato è impostato quando c'è un numero dispari di onces o parità dispari, che è due xors r = a xor b xor carry in. Il carry out con cui sto lottando al momento forse qualcuno può aiutare.
così un 0xFF + 0xFF 8 bit con riporto set darà
1 11111111 +11111111
Questo dimostra 0xff + 0xff con un "portare quella" in arrivo prima di iniziare.
sguardo esso una colonna alla volta da destra, proprio come la matematica decimale
1+1+1 = 1 carry the 1 next column 1+1+1 = 1 carry the 1 ...
questo continua e si finisce con 0xFF con il bit di riporto fissato
Quindi, se si aveva solo un 8 bit aggiungi con carry potresti sommare due numeri larghi quanto hai memoria.
consente di guardare un 16 bit aggiuntivo:
0x1234 +0xABCD
Si può solo fare la matematica con un 16 bit aggiungere, 0xBE01.
o con una vipera a 8 bit:
clear the carry bit add with carry 0x34+0xCD result 0x01 carry set add with carry 0x12+0xAB result 0xBE carry clear
Quindi la risposta è 0xBE01
o utilizzando un 4 bit vipera se tutto quello che hai è un 4 bit alu
clear the carry bit add with carry 0x4+0xD = 0x1 carry bit set add with carry 0x3+0xC = 0x0 carry bit set add with carry 0x2+0xB = 0xE carry bit clear add with carry 0x1+0xA = 0xB carry bit clear
di nuovo il risultato 0xBE01 porta bit clear
potremmo farlo anche con bit singoli o con un sommatore a 3 bit, così lungo poiché è binario, è banale.
Tutti i processori utili devono avere un modo per aggiungere il bit di trasporto in modo da poter allargare l'alu. A volte ci sono add-on e add separati, alcuni l'adc è un passo in più o il più doloroso sarebbe un add senza carry e usa un ramo se è chiaro con un add immediato sotto.
Questo è anche il motivo per cui gli spostamenti o le rotazioni ruotano attraverso il bit di trasporto, in modo da poter eseguire uno spostamento di spostamento più ampio della larghezza di un registro/posizione di memoria.
La moltiplicazione binaria è dolorosamente semplice rispetto al decimale, ma ti risparmierò quella e ti farò pensare.
Sì, si potrebbe avere e dovrebbe aver scritto un programma per provare questo. E ancora posso, potrei intenzionalmente guidarti lungo un percorso di disinformazione.
Prova e prendi l'abitudine di provare queste cose per te stesso: è un ottimo modo per imparare. –
+1 Paul R. Tal, imparerai molto più velocemente e otterrai risultati molto più accurati se testerai queste cose da solo. Nel momento in cui ti è stato chiesto di inserire questa domanda e di chiarire le cose nelle varie risposte seguenti, avresti potuto testare ogni singolo scenario e avere una risposta definitiva, imparando tutte le cose fondamentali su CPU, registri e flag. –