Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-06-2007, 23:19   #1
Dr.Speed
Senior Member
 
L'Avatar di Dr.Speed
 
Iscritto dal: Jun 2004
Città: Monselice (PD)
Messaggi: 4641
[assembly]contare gli 0 in un numero binario

devo fare un esercizio in assembly, solo che non ho la piu pallida idea di come, il testo dice: " data una word contare il numero di bit a "0""

credo si usi lo shift per spostare il binario, ma non saprei come
__________________
2500KCorsair H70Asrock EXTREME4 GEN38GB Corsair DDR3 1600MHz CL8Gainward GTX570 GLHSSD Samsung 830 64GBCorsair CX600Centaurion2G500206BW
\_\_\_\_\_DrSpeed_/_/_/_/_/
Dr.Speed è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2007, 00:53   #2
Furla
Senior Member
 
Iscritto dal: Feb 2004
Messaggi: 1454
devi usare una maschera e giocare con lo shift. scegli tu se shiftare la maschera o la word data.
Furla è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2007, 00:55   #3
Dr.Speed
Senior Member
 
L'Avatar di Dr.Speed
 
Iscritto dal: Jun 2004
Città: Monselice (PD)
Messaggi: 4641
scusa l'ignoranza, ma cos'è una maschera?
__________________
2500KCorsair H70Asrock EXTREME4 GEN38GB Corsair DDR3 1600MHz CL8Gainward GTX570 GLHSSD Samsung 830 64GBCorsair CX600Centaurion2G500206BW
\_\_\_\_\_DrSpeed_/_/_/_/_/
Dr.Speed è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2007, 10:15   #4
wisher
Senior Member
 
L'Avatar di wisher
 
Iscritto dal: Aug 2005
Messaggi: 2755
Una maschera è ad esempio un numero binario in cui hai un uno e il resto zero.

Puoi contare gli zeri facendo una and bit a bit con il tuo dato, di volta in volta spostando l'uno nella maschera. Se l'and ti restituisce 0 hai uno zero nella posizione indicata dalla maschera

Un esempio:
numero
10100

Maschera (Al primo passaggio)
100

101 and 100=100->al primo posto non c'è uno zero

Shift sulla maschera 010
101 and 010=000->al secondo posto c'è uno zero, incremento il contatore

Shift sulla maschera 001
101 and 001=001->al terzo posto non c'è uno zero
__________________
wisher è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2007, 13:59   #5
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Dr.Speed Guarda i messaggi
devo fare un esercizio in assembly, solo che non ho la piu pallida idea di come, il testo dice: " data una word contare il numero di bit a "0""
Ci sono diverse strade per fare questo:

Soluzione A:
Utilizzi una "maschera", cioè un valore in cui c'è sempre solo un bit a '1' che sposti verso una direzione che scegli tu. Fai quindi una AND tra questa maschera e il tuo valore di input. Il risultato sarà un valore di 0 o diverso da 0. Quindi ti basta contare quante volte ottieni un valore di 0.
Naturalmente si può anche fare lo shift sul tuo valore di input e tenere ferma la maschera.

Soluzione B:
A dire il vero una maschera non servirebbe nemmeno se si lavora in assembly. Già ... perché basta tenere presente che quando si fa uno shift, il bit che "esce" va a finire nel flag di "carry". Pertanto ti basta fare un ciclo, shiftare il tuo valore di input e controllare il flag di carry.

Soluzione C:
Ci sarebbe un'altra soluzione che sfrutta un trucchetto forse non molto noto. È possibile eliminare il primo bit '1' più a destra (in qualunque posizione sia) facendo X AND (X-1). Questo permetterebbe di contare i bit a '1' (ovviamente facendo un ciclo). Se a te serve contare i bit a '0' farai N-c dove N è il numero totale dei bit e c il conto dei bit a '1'.
Tra l'altro questa è la soluzione più veloce se ci sono pochi bit a '1' nel valore.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2007, 17:29   #6
Dr.Speed
Senior Member
 
L'Avatar di Dr.Speed
 
Iscritto dal: Jun 2004
Città: Monselice (PD)
Messaggi: 4641
Quote:
Originariamente inviato da andbin Guarda i messaggi
Ci sono diverse strade per fare questo:

Soluzione A:
Utilizzi una "maschera", cioè un valore in cui c'è sempre solo un bit a '1' che sposti verso una direzione che scegli tu. Fai quindi una AND tra questa maschera e il tuo valore di input. Il risultato sarà un valore di 0 o diverso da 0. Quindi ti basta contare quante volte ottieni un valore di 0.
Naturalmente si può anche fare lo shift sul tuo valore di input e tenere ferma la maschera.

Soluzione B:
A dire il vero una maschera non servirebbe nemmeno se si lavora in assembly. Già ... perché basta tenere presente che quando si fa uno shift, il bit che "esce" va a finire nel flag di "carry". Pertanto ti basta fare un ciclo, shiftare il tuo valore di input e controllare il flag di carry.

Soluzione C:
Ci sarebbe un'altra soluzione che sfrutta un trucchetto forse non molto noto. È possibile eliminare il primo bit '1' più a destra (in qualunque posizione sia) facendo X AND (X-1). Questo permetterebbe di contare i bit a '1' (ovviamente facendo un ciclo). Se a te serve contare i bit a '0' farai N-c dove N è il numero totale dei bit e c il conto dei bit a '1'.
Tra l'altro questa è la soluzione più veloce se ci sono pochi bit a '1' nel valore.
la soluzione B mi sembra la piu facile, pero come posso controllare il CF? comparandolo mi esce un errore, c'e un istruzione apposita?




grazie ad entrambi per le spiegazioni molto dettagliate
__________________
2500KCorsair H70Asrock EXTREME4 GEN38GB Corsair DDR3 1600MHz CL8Gainward GTX570 GLHSSD Samsung 830 64GBCorsair CX600Centaurion2G500206BW
\_\_\_\_\_DrSpeed_/_/_/_/_/
Dr.Speed è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2007, 17:39   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da Dr.Speed Guarda i messaggi
la soluzione B mi sembra la piu facile, pero come posso controllare il CF? comparandolo mi esce un errore, c'e un istruzione apposita?
Innanzitutto, visto che non l'hai specificato fin dall'inizio, di quali processori stiamo parlando?? x86?

Nell'assembly x86 c'è il salto condizionato JC, basato appunto sul carry. A partire dai 386 (ormai superati da un pezzo ) puoi usare SETC r/m8, in base al carry assegna 1 oppure 0 al registro o locazione specificata. Ti può servire appunto come valore da aggiungere al tuo conteggio ... e nota, evita un salto condizionato.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2007, 17:43   #8
Dr.Speed
Senior Member
 
L'Avatar di Dr.Speed
 
Iscritto dal: Jun 2004
Città: Monselice (PD)
Messaggi: 4641
si, scusami stiamo parlando di x86
__________________
2500KCorsair H70Asrock EXTREME4 GEN38GB Corsair DDR3 1600MHz CL8Gainward GTX570 GLHSSD Samsung 830 64GBCorsair CX600Centaurion2G500206BW
\_\_\_\_\_DrSpeed_/_/_/_/_/
Dr.Speed è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2007, 20:35   #9
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947
Codice:
	mov	ax,[value]
	mov	cx,10h
	xor	dx,dx
loop_zbit:
	shr	ax,1h
	cmc
	adc	dl,dh
	loop	loop_zbit
repne scasb è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
“Solutions Beyond Displays”: la strategi...
La società europea The Exploratio...
Dalle auto ai robot umanoidi: Faraday Fu...
Vodafone annuncia la dismissione di un s...
Stiga lancia i nuovi robot tagliaerba co...
Bullismo e cyberbullismo, Keenetic lanci...
Con AI Skills Checker Bitdefender mette ...
E-bike giapponese con 1.000 km di autono...
Un eVTOL con cui basta saper andare in b...
Dal mercato cinese al mondo: HONOR firma...
Sovranità digitale: l'UE sperimen...
Accesso alla memoria su Windows 11 solo ...
iPhone 18 Pro Max con batteria da oltre ...
Windows 11, cali di prestazioni sulle GP...
Un altro iPhone economico è in arrivo a ...
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: 18:10.


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