Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Abbiamo potuto mettere le mani in anteprima sul nuovo monitor MSI dedicato ai giocatori: un mostro che adotta un pannello QD-OLED da 26,5 pollici con risoluzione 2560 x 1440 pixel, frequenza di aggiornamento fino a 500 Hz e tempo di risposta di 0,03 ms GtG
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI aggiorna la sua linea di droni ultraleggeri con Neo 2, un quadricottero da 160 grammi che mantiene la compattezza del predecessore ma introduce una stabilizzazione meccanica a due assi, sensori omnidirezionali e un sistema LiDAR
L'IA "seria" di Appian è diversa: inserita nei processi e rispetta dati e persone
L'IA "seria" di Appian è diversa: inserita nei processi e rispetta dati e persone
Ad Appian Europe 2025, l'azienda parla molto della sua visione di cos'è e come dovrebbe essere usata l'intelligenza artificiale: è uno strumento che va sempre adoperato dalle persone, che devono rimanere responsabili dei processi all'interno dell'azienda. Non è un giocattolo con cui sperimentare, ma un aiuto per superare le sfide di business più importanti
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


Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro DJI Neo 2 in prova: il drone da 160 grammi guada...
L'IA "seria" di Appian è diversa: inserita nei processi e rispetta dati e persone L'IA "seria" di Appian è divers...
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...
Samsung riduce il consumo energetico del...
Monopattini e bici elettriche in sharing...
Questo portatile ASUS Vivobook con Core ...
Bufera su Twitch: la funzione delle 1.00...
Samsung Galaxy Tri-Fold: nuovo leak sugg...
Black Friday Amazon: le nuove Bose Quiet...
Sony lancia LYTIA 901, il nuovo sensore ...
DeepSeek presenta un'IA matematica capac...
Chi scrive davvero sul web? Gli articoli...
Assassin's Creed Shadows: come gira su N...
Una singola GPU capace di erogare 5000 W...
SEGA ha svelato la data d'uscita di Foot...
EcoFlow: tre prodotti per l'accumulo di ...
Black Friday Amazon: Samsung Galaxy Watc...
Google introduce delle limitazioni all'u...
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: 13:49.


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