|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2000
Città: UK
Messaggi: 7458
|
Matematica binaria: aiuto
Mi serve un aiutino con dei conti in binario... Ora spiego quello che devo fare.
Io devo utilizzare una tastiera con un microcontrollore, e devo fargli prendere dentro un numero di quattro cifre. Il primo numero le unità, il secondo le decine, il terzo le centinaia e il quarto per le migliaia. Quindi l'operazione che dovrò fare in binario all'interno del controllore sarà: n1 + n2*10 + n3*100 + n4*1000 Ora, le istruzioni che è possibile fare su numeri binari in assembler non sono tante, ovvero shift a destra, shift a sinistra, etc, e questo significa moltiplicazione o divisione per due. Come posso tradurre questa operazione in semplici operatori binari?! Sinceramente non ne ho proprio idea...
__________________
"Questo forum non è un fottuto cellulare quindi scrivi in italiano, grazie." (by Hire) ![]() Le mie foto su Panoramio - Google Earth |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Se il microcontrollore non ha istruzioni di moltiplicazione, c'è poco da fare - devi fare una routine che effettua la moltiplicazione, usando quello che hai a disposizione, come si faceva col buon vecchio C64.
Potresti anche inventarti qualcosa di particolare; ad esempio: n*1000 = n*1024 - n*24 = n*1024-(n*16+n*8) ps se vuoi sposto nella sez. programmazione, forse lì ti possono consigliare meglio
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jun 2001
Messaggi: 1299
|
Re: Matematica binaria: aiuto
Quote:
Prendi il numero a 4 cifre, e continualo a dividere per 2 Prendi il resto di ogni divisione, e moltiplicalo per il divisore (2) : scarta il risultato della divisione, e tieni il resto moltiplicato per il divisore. Tale operazione, si chiama modulo. Se prenderai i risultati del modulo 2 invertiti, avrai ottenuto il numero binario Es : 35 modulo 2 = 17,5, ergo 17, resto 0,5 *2(divisore) =1 17/2 = 8,5 ergo 8 e resto 0,5 * 2(divisore) = 1 8/2 = 4 resto 0 4/2 = 2 resto 0 2/2 = 1 resto 0 1/2 = 0 resto 1 *2 (divisore) = 1 Se prendi i resti al contrario , verra' 100011 che e 35 in binario.
__________________
![]() Referenti in Compravendite Ognuno sceglie le cause per cui combattere in base alla propria statura. |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Oct 2000
Città: UK
Messaggi: 7458
|
Quote:
Per il 100 si può fare n*128 - n*28 = n*128 - (n*16 + n*8 + n*4), e per il 10 ho n*16 - (n*4 + n*2). Bello bello, può essere una soluzione... Non so, io non lo sposterei nella sezione programmazione perchè non mi rispondono mai di là ![]() ![]()
__________________
"Questo forum non è un fottuto cellulare quindi scrivi in italiano, grazie." (by Hire) ![]() Le mie foto su Panoramio - Google Earth |
|
![]() |
![]() |
![]() |
#5 | |||
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Quote:
Quote:
![]()
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|||
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Oct 2000
Città: UK
Messaggi: 7458
|
Re: Matematica binaria: aiuto
Quote:
![]() Non devo tradurre un numero decimale in binario, devo studiare un modo per introdurre un numero compreso tra 0 e 9999 in un PIC che lavora solo in binario inserendo una cifra alla volta ![]() L'idea che mi ha dato ilsensine è ottima, devo solo vedere come implementarla. Anche perchè poi ho un piccolo problemino: 9999 richiede 14bit, il pic che uso è a 8bit... quindi, visto che questo numero serve in un contatore, dovrò spezzarlo a metà e fargli fare due cicli (ad esempio, 8 bit al massimo mi danno 255, quindi per avere, che ne so, 1020, dovrò fare 255*4, e così via). Vabbè, ma qui andiamo veramente nella programmazione, a me serviva proprio solamente il principio matematico...
__________________
"Questo forum non è un fottuto cellulare quindi scrivi in italiano, grazie." (by Hire) ![]() Le mie foto su Panoramio - Google Earth |
|
![]() |
![]() |
![]() |
#7 | ||
Senior Member
Iscritto dal: Oct 2000
Città: UK
Messaggi: 7458
|
Quote:
![]() Quote:
![]() Adesso vado a scrivere "sono ben accette anche risposte parziali..." ![]()
__________________
"Questo forum non è un fottuto cellulare quindi scrivi in italiano, grazie." (by Hire) ![]() Le mie foto su Panoramio - Google Earth |
||
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Jun 2001
Messaggi: 1299
|
Re: Matematica binaria: aiuto
Quote:
Capit : dovresti moltiplicare la cifra digitata (ma verra' memorizzata in un registro? se e' un microprocessore a 8 bit, dovresti poter appaiare 2 registri (es : B,H) avendo 16 bit : eventualmente utilizza il carry di un registro per inizializzare il primo bit nel secondo) shiftandola a sinistra Es : prima cifra = 2 (indicatore migliaia) ergo 2*1000 = 2*1024 - 2*16 - 2*8 seconda cifra = 3 ergo 3*100 = 3*64+ 3*32 + 3*4 terza cifra = 7 ergo 7*10 = 7*8 + 7*2 quarta cifra = 5 ergo 5*1 = 5 Come gia suggerito da Sensine
__________________
![]() Referenti in Compravendite Ognuno sceglie le cause per cui combattere in base alla propria statura. |
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Se si deve rispondere a una sola domanda in tanti thread, si perde poco tempo, ma tante volte Il risultato è lo stesso, ma chi ti risponde non si accorgerà mai di averti dedicato ugualmente tanto tempo ![]() Cmq sposto di là
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: Oct 2000
Città: UK
Messaggi: 7458
|
Re: Matematica binaria: aiuto
Quote:
![]() Il problema dei registri è proprio ciò a cui mi riferivo (tanto adesso siamo in programmazione ![]() ![]() Tra l'altro non ho ben capito come funzioni il discorso delle variabili nei PIC, non le ho mai usate, non so come vadano dichiarate... credo che si debbano indirizzare all'inizio del programma, ma non sono sicuro. Boh, poi guardo! ![]()
__________________
"Questo forum non è un fottuto cellulare quindi scrivi in italiano, grazie." (by Hire) ![]() Le mie foto su Panoramio - Google Earth |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Jun 2001
Messaggi: 1299
|
Re: Matematica binaria: aiuto
Quote:
Non so che tipo di microprocessore stai utilizzando, ma da che mi ricordo di programmazione Z80, era possibile effettuare un move (BE, CF), eseguendo shift a 16 bit. Controlla bene il datasheet : in ogni caso, essendo un numero su 4 cifre, il contatore sara' a 16 bit : o piu grande.
__________________
![]() Referenti in Compravendite Ognuno sceglie le cause per cui combattere in base alla propria statura. |
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Oct 2000
Città: UK
Messaggi: 7458
|
Re: Matematica binaria: aiuto
Quote:
__________________
"Questo forum non è un fottuto cellulare quindi scrivi in italiano, grazie." (by Hire) ![]() Le mie foto su Panoramio - Google Earth |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:09.