Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super
Arrivato sul mercato italiano a fine marzo, la serie Boox Go 10.3 (Gen II) offre Android 15, penna da 4096 livelli e retroilluminazione opzionale (nel modello da noi provato, Lumi, presente). La serie si compone di due tablet ePaper che fanno da e-reader, blocco note digitale e persino browser, tutto a un prezzo che fa dimenticare i prodotti di brand più blasonati
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Pannello QD-OLED da 32 pollici con risoluzione 4K, frequenza di aggiornamento a 240Hz e tempi di risposta rapidissimi: il Gigabyte MO32U24 evolve il progetto del suo predecessore MO32U e alza ulteriormente l'asticella delle prestazioni. È ancora una volta un monitor indirizzato ai giocatori più esigenti
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
realme 16 5G è un nuovo smartphone con sensore Sony IMX 852 da 50MP sul retro e uno specchio selfie fisico integrato nella camera bar, una prima nel segmento di mercato. Batteria da 6550mAh in un corpo da 8,1mm e 183g, certificazione IP69K e ricarica da 45W completano un pacchetto aggressivo per la fascia media, per uno dei prodotti più interessanti del produttore sul piano commerciale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-07-2006, 10:53   #1
kerikay
Junior Member
 
Iscritto dal: Jul 2006
Messaggi: 12
Assembler: stringhe

Ciao a tutti!
Volevo chiedere se c'è qualcuno che può darmi una mano con Assembler....
Devo fare un programma che riceva in input una stringa (caratteri alfanumerici) e li controlli uno per uno (controllare se sono caratteri alfanumerici, se le lettere sono in maiuscolo,che il totale sia 16,....) mi potetre dare qualche indicazione?
kerikay è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2006, 11:23   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da kerikay
Ciao a tutti!
Volevo chiedere se c'è qualcuno che può darmi una mano con Assembler....
Devo fare un programma che riceva in input una stringa (caratteri alfanumerici) e li controlli uno per uno (controllare se sono caratteri alfanumerici, se le lettere sono in maiuscolo,che il totale sia 16,....) mi potetre dare qualche indicazione?
Intanto, giusto per sapere:
- Assembly 80x86?
- In DOS o Windows?
- Con un assembler tipo MASM/NASM, ecc... o assembly "in-line" in "C"?
- Per "riceva in input" vuoi dire da tastiera?
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2006, 17:10   #3
kerikay
Junior Member
 
Iscritto dal: Jul 2006
Messaggi: 12
si scusami....avrei dovuto già specificare....

Assembly 80x86
in DOS
Assembler tipo TASM
si l'input deve essere da tastiera....
kerikay è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2006, 17:29   #4
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2790
Cos'è che non ti è chiaro?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2006, 17:58   #5
kerikay
Junior Member
 
Iscritto dal: Jul 2006
Messaggi: 12
non mi è chiaro come gestire le stringhe e fare operazioni con esse
cioè io devo prendere da input di tastiera una serie di lettere e numeri
e controllare se il numero totale dei caratteri è 16
verificare che le lettere siano tutte maiuscole
o tutte consonanti
operazioni di questo genere
kerikay è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2006, 21:03   #6
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947
Per iniziare la routine che interpreta la pressione di un tasto da tastiera ritornando "scan code" e "carattere":

Codice:
;	Assemby x86/16
;
;	Input
;		None
;	Output
;		AH = Scancode
;		AL = Carattere

	Get_Key	proc	near

	pusha
	mov	ah,10h
	int	16h
	push	bp
	mov	bp,sp
	mov	word ptr [bp+10h],ax
	pop	bp
	popa
	ret

	Get_Key	endp
Devi quindi controllare che il carattere letto in AL sia maiuscolo ossia compreso tra 65 e 90, se inoltre vuoi controllare che sia un numero il valore letto in AL deve essere compreso tra 48 e 57. Riassumendo se vuoi verificare che il carattere letto da tastiera sia alfabetico e maiuscolo o numerico avrai un codice di questo genere:

Codice:
	cmp	al,48d
	jb	carattere_non_valido
	cmp	al,57d
	jb	carattere_numerico
	cmp	al,65d
	jb	carattere_non_valido
	cmp	al,90b
	jb	carattere_alfabetico_maiuscolo
Tutto a meno di errori grossolani.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2006, 09:13   #7
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2790
Quote:
Originariamente inviato da repne scasb
Codice:
;	Assemby x86/16
;
;	Input
;		None
;	Output
;		AH = Scancode
;		AL = Carattere

	Get_Key	proc	near

	pusha
	mov	ah,10h
	int	16h
	push	bp
	mov	bp,sp
	mov	word ptr [bp+10h],ax
	pop	bp
	popa
	ret

	Get_Key	endp
Ciao, a cosa servono le cose che ho evidenziato in neretto? Il pusha e popa le immagino ma vorrei essere sicuro..
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2006, 10:09   #8
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da wingman87
Ciao, a cosa servono le cose che ho evidenziato in neretto? Il pusha e popa le immagino ma vorrei essere sicuro..
NEAR e FAR si usano con le direttive PROC, EXTRN e LABEL. NEAR significa che l'oggetto è nello stesso segmento del programma principale, FAR indica che l'oggetto è in un altro segmento. Spero di averlo spiegato giusto ... non mi ricordo perfettamente.

PUSHA / POPA servono per fare il push / pop sullo stack di tutti i registri "general purpose", cioè AX, CX, DX, BX, SP (originale), BP, SI e DI (nell'ordine indicato).
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2006, 10:27   #9
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2790
Quote:
Originariamente inviato da andbin
PUSHA / POPA servono per fare il push / pop sullo stack di tutti i registri "general purpose", cioè AX, CX, DX, BX, SP (originale), BP, SI e DI (nell'ordine indicato).
Che figo! Xk il nostro prof non ce l'ha spiegato? E' comodissimo! Grazie!
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2006, 10:34   #10
kerikay
Junior Member
 
Iscritto dal: Jul 2006
Messaggi: 12
grazie delle risposte mi sono molto utili!!!

Ma come faccio a contare i tasti premuti e verificare che siano 16?
kerikay è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2006, 10:50   #11
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947
Quote:
Originariamente inviato da kerikay
grazie delle risposte mi sono molto utili!!!

Ma come faccio a contare i tasti premuti e verificare che siano 16?
Legge 16 caratteri dalla tastiera, controlla che siano numerici o alfabetici e maiuscoli e li pone in un buffer.

Codice:
	MAX_KEY_LEN	EQU	16d

	data	segment byte 'DATA'

key_buffer:
	DB	MAX_KEY_LEN DUP (?)

	data	ends

	.286
	.ALPHA

	code	segment para use16 'CODE'
	assume	cs:code

	Init	proc	near

	cld
	push	data
	pop	ds
	push	ds
	pop	es
	mov	di,OFFSET key_buffer
loop_get_key:
	call	Get_Key
	cmp	al,48d
	jb	no_valid_char
	cmp	al,57d
	jbe	valid_input_char
	cmp	al,65d
	jb	no_valid_char
	cmp	al,90d
	jbe	valid_input_char
	jmp	no_valid_char
valid_input_char:
	stosb	
no_valid_char:
	cmp	di,OFFSET key_buffer+MAX_KEY_LEN
	jne	loop_get_key
	int	20h

	Init	endp

	Get_Key	proc	near

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

	Get_Key	endp

	code	ends
	end	init

Ultima modifica di repne scasb : 05-07-2006 alle 11:10.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2006, 11:03   #12
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947
Quote:
Originariamente inviato da andbin
PUSHA / POPA servono per fare il push / pop sullo stack di tutti i registri "general purpose", cioè AX, CX, DX, BX, SP (originale), BP, SI e DI (nell'ordine indicato).
L'ordine e' il seguente: DI, SI, BP, SP, BX, DX, CX, AX dalla cima alla coda.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2006, 11:45   #13
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da repne scasb
L'ordine e' il seguente: DI, SI, BP, SP, BX, DX, CX, AX dalla cima alla coda.
La sequenza che ho indicato io è quella di push ... per il pop è ovviamente al contrario.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2006, 11:49   #14
kerikay
Junior Member
 
Iscritto dal: Jul 2006
Messaggi: 12
però il mio problema è un altro....nel mio codice ho preso da input di tastiera un numero qualsiasi di caratteri....e la lunghezza l'ho salvata in un buffer....
ma io il controllo di questa lunghezza devo farla dopo l'input e stampare a video un messaggio sulla correttezza o meno dell'input....
il mio problema è cm leggere questo buffer.....
mi dispiace di non essere stata chiara....

il mio codice è questo:


Quote:
DOS EQU 21h
R_KEY_CHR EQU 01h

INVIO EQU 13

CODICE_TASTO DB ?
SEQUENZA DB ?
DIMENSIONE DW ?


LETTURA PROC NEAR
MOV BX,0
CICLO: CALL LETTURA_DATI
CMP AL,INVIO
JZ FINELETTURA
MOV [SEQUENZA+BX],AL
INC BX
JNZ CICLO
FINELETTURA: MOV DIMENSIONE,BX
RET
LETTURA ENDP



LETTURA_DATI PROC NEAR
MOV AH,R_KEY_CHR
INT DOS
MOV [CODICE_TASTO],AL
RET
LETTURA_DATI ENDP
kerikay è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2006, 17:49   #15
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947
Quote:
Originariamente inviato da andbin
La sequenza che ho indicato io è quella di push ... per il pop è ovviamente al contrario.
Ok. Basta intendersi. In sostanza se lo stack vale 0FFFEh, dopo un pusha avremo:

0FFEEh = DI
0FFF0h = SI
0FFF2h = BP
0FFF4h = SP
0FFF6h = BX
0FFF8h = DX
0FFFAh = CX
0FFFCh = AX

Ultima modifica di repne scasb : 05-07-2006 alle 18:11.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2006, 18:04   #16
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947
Quote:
Originariamente inviato da kerikay
però il mio problema è un altro....[CUT]
Vari errori:

1) Nella routine "LETTURA_DATI" non ti curi di salvaguardare il registro BX utilizzato nel loop "CICLO", la chiamata all'INT 21h puo' sovrascrivere il registro BX.

2) L'istruzione "MOV [SEQUENZA+BX],AL" genera una sovrascrittura di dati, in quanto per "SEQUENZA" viene allocato un unico byte, mentre nella successiva istruzioni incrementi BX.

3) BX viene contemplato per 65535 caratteri con possibilita' di sovrascrivere involontariamente varie aree ("JNZ CICLO") come DTA, stack, data segment...

4) Se si inseriscono 65.536 caratteri il valore della variabile "DIMENSIONE" assumenra' il valore 0 (zero).

5) La varibile "CODICE_TASTO" e' sovrabbondante (non necessaria).

Ultima modifica di repne scasb : 05-07-2006 alle 18:13.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2006, 20:49   #17
kerikay
Junior Member
 
Iscritto dal: Jul 2006
Messaggi: 12
quindi dovrei...
1. salvare BX (come?)
2. mettere una dimensione max per sequenza in modo da non cadere in overflow
3.cancello codice tasto

e per quanto riguarda il contare i 16 caratteri?
kerikay è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2006, 21:41   #18
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947
Quote:
Originariamente inviato da kerikay
quindi dovrei...
1. salvare BX (come?)
2. mettere una dimensione max per sequenza in modo da non cadere in overflow
3.cancello codice tasto

e per quanto riguarda il contare i 16 caratteri?
Nel "tuo" modo di scrivere in assembly:

Codice:
DOS EQU 21h 
R_KEY_CHR EQU 01h 

INVIO EQU 13 

;CODICE_TASTO DB ? 			; Non serve
SEQUENZA DB 16d DUP (?)			; Allocazione di 16 bytes
DIMENSIONE DW ? 


LETTURA PROC NEAR 
MOV BX,0 
CICLO: CALL LETTURA_DATI 
CMP AL,INVIO 
JZ FINELETTURA 

					; Qui va il codice per
					; testare numeri e maiuscole

MOV [SEQUENZA+BX],AL 
INC BX 
CMP BX,16d				; Controlla che la stringa
JB CICLO				; non sia maggiore di 16 byte
FINELETTURA: MOV DIMENSIONE,BX 
RET 
LETTURA ENDP 



LETTURA_DATI PROC NEAR 
PUSH BX					; Salva BX
MOV AH,R_KEY_CHR 
INT DOS 
;MOV [CODICE_TASTO],AL 			; Non serve
POP BX					; Ripristina BX
RET 
LETTURA_DATI ENDP
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2006, 22:00   #19
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
repne ma dove hai studiato?

~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 19-07-2006, 14:04   #20
kerikay
Junior Member
 
Iscritto dal: Jul 2006
Messaggi: 12
razie mlle repne scasb...
una domanda:

la variabile sequenza che ho creato si può considerare un vettore e vi si può accedere ai suoi elementi quando + mi è comodo?

grazie
kerikay è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con Android 15 e penna, dal prezzo super Boox Go 10.3 (Gen II) Lumi: il tablet e-ink con ...
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming Gigabyte MO32U24 OLED: il 4K a 240Hz su un panne...
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh Recensione realme 16 5G: lo smartphone con Selfi...
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni Come rispettare tutte le nuove regole per i mono...
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta DLSS 4.5: con Dynamic Frame Generation e MFG 6X ...
Salesforce compra Fin per 3,6 miliardi d...
Tenstorrent potrebbe finire nelle mani d...
Beatbot porta la manutenzione smart in p...
Microsoft potrebbe introdurre pagamenti ...
LiteLLM, tre falle critiche: la catena d...
Servizi cloud su iOS, l'Antitrust italia...
Arch Linux: oltre 1.900 pacchetti AUR in...
Le frodi finanziarie valgono quanto il P...
Electronic Arts presenta EA Advertising ...
Addio silicio? Imec, ASML e TSMC mostran...
iPhone Ultra: rimandato e costosissimo? ...
Huawei punta sul segmento dei computer: ...
ChatGPT non si ferma mai: superato il mi...
OPPO Find X10 Pro promette bene: tante n...
La RAM dei server costa troppo? AMD ha 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: 10:05.


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