Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Dopo oltre 4 anni si rinnova la serie Sony Alpha 7 con la quinta generazione, che porta in dote veramente tante novità a partire dai 30fps e dal nuovo sensore partially stacked da 33Mpixel. L'abbiamo provata per un breve periodo, ecco come è andata dopo averla messa alle strette.
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme e Aston Martin Aramco F1 Team si sono (ri)unite dando alla vita un flagship con chip Snapdragon 8 Elite Gen 5 e design esclusivo ispirato alle monoposto di Formula 1. La Dream Edition introduce la nuova colorazione Lime Essence abbinata al tradizionale Aston Martin Racing Green, decorazioni intercambiabili personalizzate e una confezione a tema F1, intorno a uno smartphone dall'ottima dotazione tecnica con batteria da 7000mAh ricaricabile a 120W e isola fotografica intercambiabile
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
Abbiamo partecipato all'OVHcloud Summit 2025, conferenza annuale in cui l'azienda francese presenta le sue ultime novità. Abbiamo parlato di cloud pubblico e privato, d'intelligenza artificiale, di computer quantistici e di sovranità. Che forse, però, dovremmo chiamare solo "sicurezza"
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


Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
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...
Il camion elettrico Semi è davver...
Instagram limita gli hashtag a tre per p...
Le migliori offerte Amazon del momento: ...
RTI e Medusa denunciano Perplexity AI: p...
Avviatori, compressori e accessori auto:...
Samsung Galaxy S26: un leak anticipa le ...
Windows 11, KB5070311 sistema e rompe la...
DJI Mini 3 con controller DJI RC al prez...
Horses riceve il ban anche da Epic: rifi...
Motore elettrico a flusso assiale di Yas...
India, la retromarcia dopo le polemiche:...
La Germania accende il suo colosso eolic...
Mega Risparmi Amazon Haul: fino al 60% s...
Samsung ha dominato il mercato degli sma...
PlayStation 5 in sconto: prezzo abbassat...
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:51.


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