|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 453
|
programmazione assembly Istruzione ADC
Salve a tutti,
Volevo capire bene come funziona l'istruzione ADC in assembly... Qualcuno puo' farmi un esempio numerico? Grazie. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
|
Quote:
ADC operando1, operando 2 destinazione=destinazione+sorgente+valore del flag di carry purtroppo esempi non ce ne sono.. |
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
DEST <— DEST + SRC + CF In genere una ADC è molto utile per fare somme a "precisione multipla". Esempio: Codice:
VAL1 DD 12345678h
VAL2 DD 0000ABCDh
RES DD ?
....
MOV AX,[WORD PTR VAL1]
MOV DX,[WORD PTR VAL1+2]
ADD AX,[WORD PTR VAL2]
ADC DX,[WORD PTR VAL2+2]
MOV [WORD PTR RES],AX
MOV [WORD PTR RES+2],DX
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 453
|
Ciao,
nn sono molto esperto di assembly come avrete capito... Volevo capire meglio il funzionamento di questa istruzione... Ad esempio se ho tre variabili: var1= 10100000 var2= 01011001 var3= 11100001 facendo : add var1,var2 mov ax,var1 adc ax,var3 Quale sara' il risultato?? In pratica che faccio quando ce adc...addiziono i due termini e se ce riporto aggiungo uno??? Grazie. |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Come ho già detto nel post precedente, uno degli utilizzi più tipici della ADC è nelle somme a "precisione multipla".
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 453
|
Quindi allora....(scusami ma nn sono molto ferrato)
Ti spiego ho un compito e tra i possibili spezzoni di codice ci sarà anche il calcolo di un valore finale che passa per un adc. Ho due valori a 16 bit... Io faccio la somma tra questi valori e se ce un carry sommo uno al risultato?? Non so potresti farmi un esempio proprio numerico semplice semplice giusto per vedere l'operazione da fare?? Ti faccio un esempio per farti capire meglio... Codice:
W11 dw 0123h W12 dw 1102h W21 dw 0012h W31 dw ? W32 dw ? mov ah,bch mov a1,10h add a1,02h sub ax,W12 add ax,W22 mov W32,ax mov ax,W11 ADC AX,W21 MOV W31,AX Quindi arrivato a ADC che faccio matematicamente?Li sommo e... Ti Ringrazio nuovamente.
Ultima modifica di pmhwp : 16-04-2007 alle 21:39. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Ma ti è chiaro il concetto del "carry", cioè del riporto??
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 453
|
Credo di si...
dovrebbe essere quando ad esempio abbiamo 10000000+ 10000000= ------------ e quindi si ha il carry no??
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Anche situazioni del tipo: Codice:
11
01000000
11000000
---------
100000000
|
carry
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 453
|
Si ma il problema è questo...ho un esame e tra i vari esercizi ce ne sarà uno simile a quello che ti ho fatto vedere...
Come devo comportarmi quando arrivo a ADC??? Sommo semplicemente i due valori e vado avanti aggiungendo il carry se ce?? Vorrei solo una spiegazione di come svolgerlo su carta...giusto per risolvere questo esercizio... Scusami per la mia poca pratica Ancora Grazie. |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Per esempio se date 4 variabili volessi sommarle tutte insieme e poi "accumulare" i carry su un'altra variabile, potrei fare così: Codice:
VAL_A DW 6234h VAL_B DW 9657h VAL_C DW 8234h VAL_D DW 9893h RES DW ? CARRY DW ? MOV CX,0 MOV AX,VAL_A ADD AX,VAL_B ADC CX,0 ADD AX,VAL_C ADC CX,0 ADD AX,VAL_D ADC CX,0 MOV RES,AX MOV CARRY,CX
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 453
|
aaaah ma allora nn ce niente di complicato....basta scrivere il risultato no?
Quindi se ce questo carry io lo scrivo normalmente e vado avanti... Giusto?? Mentre il solo add se incontra questo carry da errore??? Ci sto arrivando sembra...ehehe |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Ma no. Sia ADD che ADC generano un carry, la differenza è che ADC "riceve" un carry che aggiunge nella somma.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 453
|
Quote:
|
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Infatti non tiene in considerazione il flag di carry prima della somma.
Per farti capire meglio le somme a precisione multipla: tu hai 2 numeri a 32 bit che sono 12648932h e 42737793h. La loro somma è 54D800C5h. Volendo fare la somma solo con operandi a 16 bit, si deve fare: Codice:
_
/ \
1 |
1264 | 8932 +
4273 | 7793 =
------ | -------
54D8 | 100C5
\_/
Chiaro adesso?
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 453
|
Si! ci sono!
Quindi per la parte alta e la parte bassa io divido in due il numero e li identifico pero' con quale registri (per esempio ax con ah e al giusto?) Sei un mago sto capendo...
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Non credo di riuscire a spiegare l'uso della ADC meglio di quanto ho fatto con il "disegnino" della somma che ho riportato sopra.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 453
|
Si si dai comunque ora ho capito...
e poi con quel disegno sei stato proprio un fenomeno! Ti Ringrazio davvero. Ciaoooo |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:36.




















