Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Polestar 3 Performance, test drive: comodità e potenza possono convivere
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Abbiamo passato diversi giorni alla guida di Polestar 3, usata in tutti i contesti. Come auto di tutti i giorni è comodissima, ma se si libera tutta la potenza è stupefacente
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 15-04-2007, 10:26   #1
pmhwp
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.
pmhwp è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2007, 10:39   #2
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Quote:
Originariamente inviato da pmhwp Guarda i messaggi
Salve a tutti,
Volevo capire bene come funziona l'istruzione ADC in assembly...
Qualcuno puo' farmi un esempio numerico?

Grazie.
il mio libro di sistemi dice: l'istruzione ADC esegue l'addizione tenendo conto anche del riporto nell'istruzione precedente.

ADC operando1, operando 2

destinazione=destinazione+sorgente+valore del flag di carry

purtroppo esempi non ce ne sono..
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2007, 12:05   #3
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da pmhwp Guarda i messaggi
Salve a tutti,
Volevo capire bene come funziona l'istruzione ADC in assembly...
ADC – Add with Carry
DEST <— DEST + SRC + CF

Quote:
Originariamente inviato da pmhwp Guarda i messaggi
Qualcuno puo' farmi un esempio numerico?
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
In RES si ottiene il valore 12350245h. La somma dei 16 bit bassi ha prodotto un carry che è stato aggiunto con la ADC nella somma dei 16 bit alti.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 18:21   #4
pmhwp
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.
pmhwp è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 20:56   #5
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da pmhwp Guarda i messaggi
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??
Innanzitutto due cose: le istruzioni x86 con 2 operandi non possono avere entrambi gli operandi in memoria, quindi una add var1,var2 non esiste e non è fattibile. Seconda cosa, i valori binari di esempio che hai indicato sono su 8 bit e usando i registri a 16 bit non ottieni alcun carry.

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%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 21:34   #6
pmhwp
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
E chiede i valori finali di W31 e W32...
Quindi arrivato a ADC che faccio matematicamente?Li sommo e...

Ti Ringrazio nuovamente.

Ultima modifica di pmhwp : 16-04-2007 alle 21:39.
pmhwp è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 21:39   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da pmhwp Guarda i messaggi
Ho due valori a 16 bit...
Io faccio la somma tra questi valori e se ce un carry sommo uno al risultato??
Ma ti è chiaro il concetto del "carry", cioè del riporto??
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 21:45   #8
pmhwp
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??

pmhwp è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 21:57   #9
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da pmhwp Guarda i messaggi
Credo di si...
dovrebbe essere quando ad esempio abbiamo
10000000+
10000000=
------------
e quindi si ha il carry no??
Esatto, in generale la somma dei due bit più significativi con in più il carry dal bit precedente genera un nuovo carry, che è quello che poi viene memorizzato nel flag CF.

Anche situazioni del tipo:
Codice:
   11
    01000000
    11000000
   ---------
   100000000
   |
 carry
Capisci quindi che non ha molto senso sommare 2 valori qualunque e poi fare una ADC tra due altri valori che non hanno alcuna relazione particolare con i primi due.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 22:00   #10
pmhwp
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.
pmhwp è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 22:15   #11
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da pmhwp Guarda i messaggi
Come devo comportarmi quando arrivo a ADC???
Sommo semplicemente i due valori e vado avanti aggiungendo il carry se ce??
In che senso??? ADC già di per sé aggiunge il carry se c'è.

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
Alla fine in RES ho 1352h e in CARRY ho 0002h. Vuol dire che la somma dei 4 valori ha dato un valore complessivo di 21352h.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 22:22   #12
pmhwp
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
pmhwp è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 22:29   #13
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da pmhwp Guarda i messaggi
Mentre il solo add se incontra questo carry da errore???
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%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 22:35   #14
pmhwp
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 453
Quote:
la differenza è che ADC "riceve" un carry che aggiunge nella somma.
mentre add nn se ne fa di niente??
pmhwp è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 22:40   #15
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da pmhwp Guarda i messaggi
mentre add nn se ne fa di niente??
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
          \_/
Per fare la somma di 8932h + 7793h usi una ADD (che ci frega del carry??) mentre per fare la somma di 1264h + 4273h usi una ADC, perché così il riporto si "propaga" nella parte alta.
Chiaro adesso?
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 22:47   #16
pmhwp
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...

pmhwp è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 22:50   #17
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da pmhwp Guarda i messaggi
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?)
Che registri usare, dipende da dove sono i valori (se in memoria o in altri registri), questo lo devi vedere tu.
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%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 16-04-2007, 22:53   #18
pmhwp
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
pmhwp è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Dell e HP rimuovono la codifica e transc...
Prezzo eccezionale per Samsung Galaxy S2...
Black Friday esplosivo: arrivano extra s...
Google apre la strada al file sharing tr...
Black Friday Monitor 2025: OLED, QD-OLED...
Arrivano le nuove specifiche Matter 1.5:...
Microsoft rende open source la trilogia ...
DAZN continua la lotta contro la pirater...
Generativa o predittiva? Il futuro dell’...
BYD va all-in con la Atto 2: batteria pi...
Google modifica la richiesta di consenso...
Black Friday TV: OLED, QLED e Mini-LED a...
007 First Light torna a mostrarsi all'ev...
MOVA Z60 Ultra Roller Complete: il Black...
Clair Obscur: Expedition 33 trionfa ai G...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:36.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v