Torna indietro   Hardware Upgrade Forum > Software > Programmazione

L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
La parola d'ordine al Nextcloud Summit 2026, che si è tenuto a Monaco, è stata "sovranità". Non come è spesso usato questo termine in politica ma, al contrario, come capacità positiva di decidere il proprio destino tecnologico, con modalità collaborative e aperte. L'Europa dice già molto nel mondo open source, che viene visto come mezzo per ottenere la tanto agognata autonomia digitale
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete implementa due bracci estensibili, per spazzola e moccio, che si spingono ben oltre quanto visto sino ad oggi permettendo una pulizia di casa ancor più capillare e precisa
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
La tecnologia SQD-Mini LED di TCL arriva sul taglio da 65 pollici con la serie C8L: 2040 zone, pannello WHVA 2.0 e un picco che alle rilevazioni delle sonde tocca i 4400 nit nel profilo Filmmaker e un HDR quasi perfetto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-06-2007, 22: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 08-06-2007, 23: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 08-06-2007, 23: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, 09: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, 12:59   #5
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
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, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2007, 16: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, 16:39   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
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, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 09-06-2007, 16: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, 19: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


L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine NL-LC1 è il primo dissipatore a liquido A...
Assassin's Creed Black Flag Resynced pot...
Gli USA dicono no a Polestar, sì a Volvo...
Steam Machine dovrebbe costare 700 dolla...
Microsoft 365, l'Antitrust apre un'istru...
400 editori contro OpenAI e Microsoft: s...
Notion interrompe il suo client email ba...
Italia e Tunisia realizzano il primo col...
Ecco perché tutti parlano di questi robo...
IBM: il quantum computing entra nell’ind...
Xcode 26.6 aggiunge Google Gemini: ora i...
Bungie e Sony licenziano metà stu...
La copia fisica di Marvel's Wolverine co...
Il terremoto in Venezuela e i 30 secondi...
Addio ansia da pacco: Google Wallet moni...
L'umanesimo di Ford: rafforzato il ruolo...
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: 12:59.


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