Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Abbiamo guidato per diversi giorni la Alpine A290, la prima elettrica del nuovo corso della marca. Non è solo una Renault 5 sotto steroidi, ha una sua identità e vuole farsi guidare
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 19-10-2005, 20:00   #1
Lupino.86
Senior Member
 
L'Avatar di Lupino.86
 
Iscritto dal: May 2002
Messaggi: 2370
[Assembler] Convertitore Binario-Decimale

Save a tutti,
potete aiutarmi a scrivere un convertitore Binario-Decimale usando il linguaggio Assembler?
Conosco il linguaggio, ma mi pare che sia una bella gatta da pelare.....voi che dite?



Vi ringrazio anticipatamente,
Lupino.86
Lupino.86 è offline   Rispondi citando il messaggio o parte di esso
Old 19-10-2005, 20:06   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Cioè prendi un input binario da tastiera (solo 0 e 1 da tastiera) ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 19-10-2005, 20:17   #3
Lupino.86
Senior Member
 
L'Avatar di Lupino.86
 
Iscritto dal: May 2002
Messaggi: 2370
Quote:
Originariamente inviato da cionci
Cioè prendi un input binario da tastiera (solo 0 e 1 da tastiera) ?
No..... devo acquisire da tastiera un numero decimale, convertirlo in binario.

Successivamente devo anche scrivere un programma per moltiplicare due numeri decimali utilizzando però i numeri binari:
1) acquisisto il moltiplicando decimale
2) acquisisto il moltiplicatore decimale
3) converto moltiplicando e moltiplicatore in binario
4) eseguo la moltiplicazione utlizzando le cifre binarie e non decimali
5) il risultato binario lo converto in decimale


Per ora mi basta sapere la sola conversione
Lupino.86 è offline   Rispondi citando il messaggio o parte di esso
Old 19-10-2005, 21:39   #4
Goldrake_xyz
Senior Member
 
Iscritto dal: Apr 2004
Messaggi: 984
beh, acquisire da tastiera con l'assembler mi sembra un proggetto
piuttosto impegnativo, a meno che non hai delle routine già pronte.
se riesci a salvare la cifra decimale in memoria in BCD ad esempio,
poi è facile da convertire in binario puro.
la conversione devi farla in binario complemento 2 ?
una volta convertiti usa la famosa istruzione IMUL xyz
se invece sono numeri reali, con la virgola, la questione si complica
xchè c'è bisogno di convertirli in esponente e mantissa normalizzati
e poi darli in pasto al coprocessore numerico ...

ciao

P.S. x la conversione di numeri interi da dec. a binario usando l'asm
è abbastanza semplice. come anche il vice-versa
Goldrake_xyz è offline   Rispondi citando il messaggio o parte di esso
Old 19-10-2005, 21:43   #5
Goldrake_xyz
Senior Member
 
Iscritto dal: Apr 2004
Messaggi: 984
Acc dovrei averlo scritto un programmino del genere, (tanti anni fà )
se lo ritrovo, lo allego
Goldrake_xyz è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2005, 00:19   #6
Lupino.86
Senior Member
 
L'Avatar di Lupino.86
 
Iscritto dal: May 2002
Messaggi: 2370
Quote:
Originariamente inviato da Goldrake_xyz
beh, acquisire da tastiera con l'assembler mi sembra un proggetto
piuttosto impegnativo, a meno che non hai delle routine già pronte.
Cosa intendi per routine???


Quote:
se riesci a salvare la cifra decimale in memoria in BCD ad esempio,
poi è facile da convertire in binario puro.
So salvare in memoria la cifra decimale tramite la divisione per 10..... ma nn so convertire da decimale a binario!

Quote:
la conversione devi farla in binario complemento 2 ?
prchè esiste qualche altra conversione binaria?


Quote:
una volta convertiti usa la famosa istruzione IMUL xyz
se invece sono numeri reali, con la virgola, la questione si complica
xchè c'è bisogno di convertirli in esponente e mantissa normalizzati
e poi darli in pasto al coprocessore numerico ...
Nonononono, sono numeri senza virgola.
L'istruzione IMUL mi da sempre errore.... cosa sbaglio?
per esempio: IMUL bl,bx ; moltiplico il registro Bl con il registro BX, il risultavo va a finire in BL.... tutto OK?



Quote:
P.S. x la conversione di numeri interi da dec. a binario usando l'asm
è abbastanza semplice. come anche il vice-versa
Se è semplice MI PUOI DIRE COME SI Fà ???
Lupino.86 è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2005, 00:22   #7
Lupino.86
Senior Member
 
L'Avatar di Lupino.86
 
Iscritto dal: May 2002
Messaggi: 2370
Quote:
Originariamente inviato da Goldrake_xyz
Acc dovrei averlo scritto un programmino del genere, (tanti anni fà )
se lo ritrovo, lo allego
Spero con ansia che hai tuttora quel programmino
Lupino.86 è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2005, 00:32   #8
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Lupino.86
Cosa intendi per routine???
funzioni, procedure, sottoprogrammi, sub; al limite vanno bene anche le macro
cmq acquisire da tastiera diventa semplicissimo se il file che devi generare è un binario puro (estensione .com): in tal caso basta usare il bios emulato da Windows.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2005, 01:09   #9
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Lupino.86
per esempio: IMUL bl,bx ; moltiplico il registro Bl con il registro BX, il risultavo va a finire in BL.... tutto OK?
Non puoi usare bh e bx come operatori... bl fa parte di bx...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2005, 06:31   #10
cj++
Member
 
L'Avatar di cj++
 
Iscritto dal: Sep 2005
Città: Barcelona
Messaggi: 200
scrivilo in C poi usa il codice ottimizzato generato dal compilatore
__________________
Code without tests is broken by design.
cj++ è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2005, 11:51   #11
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947
Non hai specificato il sistema operativo, ne la modalita' del processore; ho scelto io DOS/WIN_VM modalita' reale:

Codice:
	ENTER_KEY1		EQU	1C0Dh
	ENTER_KEY2		EQU	0E00Dh
	BACKSPACE_KEY		EQU	0E08h

	data	segment byte 'DATA'

dos_message_1:
	DB	'Moltiplicazioni in ASM',0Dh,0Ah,'$'
dos_message_2:
	DB	0Dh,0Ah,'Inserire 1° operando: $'
dos_message_3:
	DB	0Dh,0Ah,'Inserire 2° operando: $'
dos_message_4:
	DB	0Dh,0Ah,0Dh,0Ah,'Risultato: $'

_1st_val_str:
	DB	0Ah DUP (?)
_2nd_val_str:
	DB	0Ah DUP (?)
_1st_val_bin:
	DD	?
_2nd_val_bin:
	DD	?

	data	ends

	.386P
	.ALPHA

	code	segment para use16 'CODE'
	assume	cs:code

	Init	proc	near

	push	DATA
	pop	ds
	mov	dx,OFFSET dos_message_1
	call	Write_Message
	mov	dx,OFFSET dos_message_2
	call	Write_Message
	mov	si,OFFSET _1st_val_str
	call	Get_Input
	mov	di,OFFSET _1st_val_bin
	call	Str_Dec_To_Bin
	mov	dx,OFFSET dos_message_3
	call	Write_Message
	mov	si,OFFSET _2nd_val_str
	call	Get_Input
	mov	di,OFFSET _2nd_val_bin
	call	Str_Dec_To_Bin
	mov	dx,OFFSET dos_message_4
	call	Write_Message
	mov	eax,ds: dword ptr [_2nd_val_bin]
	mul	ds: dword ptr [_1st_val_bin]
	call	Write_Dec_Num64
	mov	ax,4C00h
	int	21h

	init	endp

;#############################################################################

	Get_Input	proc	near

	pusha
	xor	bx,bx
loop_get_key:
	call	Get_Key
	cmp	bx,9h
	je	test_alt_key
	cmp	ah,2h
	jb	test_num_alt
	cmp	ah,0Bh
	ja	test_num_alt
test_num_low:
	cmp	al,'0'
	jb	test_num_alt
	cmp	al,'9'
	ja	test_num_alt
	call	Write_Char
	mov	ds: byte ptr [bx+si],al
	inc	bx
	jmp	loop_get_key
test_num_alt:
	cmp	ah,47h
	jb	test_alt_key
	cmp	ah,52h
	jbe	test_num_low
test_alt_key:
	cmp	ax,BACKSPACE_KEY
	jne	test_exit
	or	bx,bx
	je	loop_get_key
	call	Get_Cursor_Position
	dec	dl
	call	Set_Cursor_Position
	dec	bx	
	mov	al,' '
	call	Write_Char
	call	Set_Cursor_Position
	jmp	loop_get_key
test_exit:
	cmp	ax,ENTER_KEY1
	je	exit_get_input
	cmp	ax,ENTER_KEY2
	jne	loop_get_key
exit_get_input:
	mov	ds: byte ptr [bx+si],0h
	popa
	ret

	Get_Input	endp

;#############################################################################

	Get_Key	proc	near

	pusha
	mov	ah,10h
	int	16h
	mov	bp,sp
	mov	ss: word ptr [bp+0Eh],ax
	popa
	ret

	Get_Key	endp

;#############################################################################

	Str_Dec_To_Bin	proc	near

	pushad
	mov	ds: dword ptr [di],0h
	call	Str_Len
	or	ax,ax
	je	exit_str_dec_to_bin
	dec	ax
	xchg	ax,bx
	xor	eax,eax
	mov	edx,1h
loop_char_str:
	movzx	ecx,ds: byte ptr [bx+si]
	sub	cl,'0'
	imul	ecx,edx
	add	eax,ecx	
	imul	edx,10d
	sub	bx,1h
	jnc	loop_char_str
	mov	ds: dword ptr [di],eax
exit_str_dec_to_bin:
	popad
	ret

	Str_Dec_To_Bin	endp

;#############################################################################

	Write_Dec_Num64	proc	near

	pushad
	push	eax
	push	edx
	mov	edi,0Ah
	xor	bh,bh
next_dec_long_left:
	push	eax
	mov	eax,edx
	xor	edx,edx
	div	edi
	mov	ebp,eax
	pop	eax
	div	edi
	mov	edx,ebp
	inc	bh
	or	edx,edx
	jne	next_dec_long_left
	or	eax,eax
	jne	next_dec_long_left
	call	Get_Cursor_Position
	add	dl,bh
	dec	dl
	call	Set_Cursor_Position
	pop	edx
	pop	eax
	mov	ebx,0Ah
next_dec_long:
	push	eax
	mov	eax,edx
	xor	edx,edx
	div	ebx
	mov	ebp,eax
	pop	eax
	div	ebx
	add	dl,'0'
	xchg	ax,dx
	call	Write_Char
	xchg	ax,dx
	call	Get_Cursor_Position
	sub	dl,2h
	call	Set_Cursor_Position
	mov	edx,ebp
	or	edx,edx
	jne	next_dec_long
	or	eax,eax
	jne	next_dec_long
	popad
	ret

	Write_Dec_Num64	endp

;#############################################################################

	Write_Message	proc	near

	pusha
	mov	ah,9h
	int	21h
	popa
	ret

	Write_Message	endp

;#############################################################################

	Write_Char	proc	near

	pusha
	mov	ah,0Eh
	int	10h
	popa
	ret

	Write_Char	endp

;#############################################################################

	Set_Cursor_Position	proc	near

	pusha
	mov	ah,2h
	xor	bh,bh
	int	10h
	popa
	ret

	Set_Cursor_Position	endp

;#############################################################################

	Get_Cursor_Position	proc	near

	pusha
	mov	ah,3h
	xor	bh,bh
	int	10h
	mov	bp,sp
	mov	ss: word ptr [bp+0Ah],dx
	popa
	ret

	Get_Cursor_Position	endp

	Str_Len	proc	near

	push	es
	push	ds
	pop	es
	push	cx
	push	di
	mov	di,si
	mov	cx,0FFFFh
	xor	al,al
	repne	scasb
	not	cx
	dec	cx
	xchg	ax,cx
	pop	di
	pop	cx
	pop	es
	ret

	Str_Len	endp

	code	ends
	end	init
In allegato troverai l'eseguibile. A meno di bug "sembra funzionare" (ho avuto a disposizione poco tempo), non ci sono commente in quanto il sorgente e' autoespicativo, spero ti sia utile a scopo didattico.
Allegati
File Type: zip MUL.ZIP (1.8 KB, 6 visite)
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2005, 16:07   #12
Goldrake_xyz
Senior Member
 
Iscritto dal: Apr 2004
Messaggi: 984
I numeri binari possono anche essere in complemento 2,
questa rappresentazione è usata per i numeri interi positivi e negativi.
Ad esempio in binario normale si ha con 8 bit
Min = 00000000 = 0 ; MAX = 11111111 = 255
mentre in complemento 2 si hanno i valori (sempre x 8 bit)
Min = 10000000 = -128 ; MAX = 011111111 = 127

E questo si riflette anche nel linguaggio C, gli unsigned char è un byte
che può essere convertito in un intero da 0 a 255, mentre
i signed char possono essere convertiti in un numero da -128 a 127

IMUL è un' istruzione per la moltiplicazione di interi con segno,
cioè di numeri binari complemento2,

MUL è un' istruzione pre la moltiplicazione di interi senza segno,
cioè di numeri binari positivi

Esempio : voglio moltiplicare n1 x n2 (ovviamente n1 e n2 sono cifre)

MOV AX, n1 ; carico il registro AX
MOV BX, n2 ; carico il registro BX

IMUL BX ; esegue la moltiplicazione

IL risultato viene messo nei registri DX,AX

Ultima modifica di Goldrake_xyz : 21-10-2005 alle 17:05.
Goldrake_xyz è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2005, 16:11   #13
Goldrake_xyz
Senior Member
 
Iscritto dal: Apr 2004
Messaggi: 984
Sto cercando di trovare il programma che mi hai chiesto,
frà le migliaia di file dei miei programmi ...

Ah eccone uno (in allegato)
Scritto mooolto tempo fà x MS-DOS e compilato con il TURBO ASSEMBLER 2.0,
a quel tempo non esistevano i caratteri proporzionali, e quindi
il programma può risultare disallineato ...

Ciao
Allegati
File Type: txt BIN.TXT (6.2 KB, 7 visite)

Ultima modifica di Goldrake_xyz : 20-10-2005 alle 16:25.
Goldrake_xyz è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2005, 16:38   #14
Goldrake_xyz
Senior Member
 
Iscritto dal: Apr 2004
Messaggi: 984
Ooops, nel programma allegato si può anche vedere l'uso delle istruzioni
MUL e DIV con registri a 32 Bit (del 386 : EAX, EBX, ecc. ecc.)
Cmq. per fare la conversione si possono usare anche altri metodi,
che sono forse anche migliori ...
Su google si trova tutto !

Ciao
Goldrake_xyz è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2005, 23:36   #15
Lupino.86
Senior Member
 
L'Avatar di Lupino.86
 
Iscritto dal: May 2002
Messaggi: 2370
Quote:
Originariamente inviato da cionci
Non puoi usare bh e bx come operatori... bl fa parte di bx...
Era un esempio stupido....... più scemo che stupido
Lupino.86 è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2005, 23:38   #16
Lupino.86
Senior Member
 
L'Avatar di Lupino.86
 
Iscritto dal: May 2002
Messaggi: 2370
Quote:
Originariamente inviato da cj++
scrivilo in C poi usa il codice ottimizzato generato dal compilatore
Come come come?
Lupino.86 è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2005, 23:50   #17
Lupino.86
Senior Member
 
L'Avatar di Lupino.86
 
Iscritto dal: May 2002
Messaggi: 2370
Quote:
Originariamente inviato da repne scasb
Non hai specificato il sistema operativo, ne la modalita' del processore; ho scelto io DOS/WIN_VM modalita' reale:


In allegato troverai l'eseguibile. A meno di bug "sembra funzionare" (ho avuto a disposizione poco tempo), non ci sono commente in quanto il sorgente e' autoespicativo, spero ti sia utile a scopo didattico.
Inanzitutto ti ringrazio per il codice sorgente e l'eseguibile.

Scusa la totale ignoranza in materia, ma credo di nn sbagliare se ti dico che lavoriamo con DOS (al massimo scriviamo con il NotePad e salviamo in .ASM) e usiamo la programmazione Intel 80x86


Cmq ti giuro che nn ho MAi visto certe istruzioni....... potreti spiegarmele oppure devo trovarmi una guida?
Questo programma converte solo da decimale a binario oppure fa anche la moltiplicazione binaria e stampa il risultato convertito in decimale?
Lupino.86 è offline   Rispondi citando il messaggio o parte di esso
Old 21-10-2005, 00:02   #18
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Lupino.86
fa anche la moltiplicazione binaria
Rifletti su quanto hai detto...non esiste una moltiplicazione binaria, intera o esadeciamale... Una moltiplicazione è una moltiplicazione e basta... La base in cui esprimi operatori e risultato non contano...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 21-10-2005, 00:13   #19
Lupino.86
Senior Member
 
L'Avatar di Lupino.86
 
Iscritto dal: May 2002
Messaggi: 2370
Quote:
Originariamente inviato da Goldrake_xyz
IMUL è un' istruzione per la moltiplicazione di interi con segno,
cioè di numeri binari complemento2,

MUL è un' istruzione pre la moltiplicazione di interi senza segno,
cioè di numeri binari positivi

io devo usare l'istruzione MUL perchè nn mi importa del segno..... però moltiplicare i numeri negativi sarebbe una finezza da pochi!


Posso dire che nn ho capito bene come si comporta la funzione MUL?
Lupino.86 è offline   Rispondi citando il messaggio o parte di esso
Old 21-10-2005, 00:21   #20
Lupino.86
Senior Member
 
L'Avatar di Lupino.86
 
Iscritto dal: May 2002
Messaggi: 2370
Quote:
Originariamente inviato da cionci
Rifletti su quanto hai detto...non esiste una moltiplicazione binaria, intera o esadeciamale... Una moltiplicazione è una moltiplicazione e basta... La base in cui esprimi operatori e risultato non contano...
Sono d'accordo..... nn mi sono spiegato bene: la moltiplicazione deve essere eseguita a livello binario cioè con numeri binari

00000101 = 5
00000010 = 2
00000110= ----> stampo 10

cioè il programma deve convertire in binario, moltiplicare con i numeri binari e stampare a video il numero decimale
Lupino.86 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
AOC propone un QD-OLED al prezzo di un I...
AGCOM segnalerà la AI Mode di Goo...
L'Estonia porta ChatGPT in classe: firma...
2 nm giapponesi contro TSMC: il piano di...
Questa scopa elettrica Tineco iFLOOR 5 è...
FRITZ!Box 6825 4G sbarca in Italia a 129...
Red Hat presenta Digital Sovereignty Rea...
AMD Zen 6 'Olympic Ridge': sette configu...
Amazon batte Walmart dopo 30 anni: il so...
Digos nel mirino dell'intelligence cines...
Sony non vuole aumentare il prezzo della...
Energia geotermica: la (costosa) rispost...
MG ha già venduto 1 milione di au...
"Something Big Is Happening" —...
Renault chiude il 2025 con una perdita r...
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: 20:56.


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