Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
HUAWEI WiFi Mesh X3 Pro Suite è probabilmente il router mesh più fotogenico che si possa acquistare oggi in Italia, ma dietro il guscio in acrilico trasparente e le luci LED dinamiche c'è una macchina tecnica costruita attorno allo standard Wi-Fi 7, con velocità teoriche Dual-Band fino a 3,6 Gbps e una copertura fino a 120 m² una volta abbinato il router principale all'extender incluso nel kit
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Abbiamo provato le nuove CPU Intel Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: più core e ottimizzazioni al funzionamento interno migliorano le prestazioni, anche in virtù di prezzi annunciati interessanti. A questo si aggiungono nuove ottimizzazioni software. Purtroppo, a fronte di prestazioni di calcolo elevate, il quadro rimane incerto nel gaming, dove l'andamento rimane altalenante. Infine, rimane il problema della piattaforma a fine vita.
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
Il modello "build to order" di PCSpecialist permette di selezionare una struttura base per un sistema, personalizzandolo in base alle specifiche esigenze con una notevole flessibilità di scelta tra i componenti. Il modello Lafité 14 AI AMD è un classico notebook clamshell compatto e potente, capace di assicurare una elevata autonomia di funzionamento anche lontano dalla presa di corrente
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-07-2006, 11: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, 12:23   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2006, 18: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, 18:29   #4
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2788
Cos'è che non ti è chiaro?
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 04-07-2006, 18: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, 22: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, 10:13   #7
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2788
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, 11:09   #8
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2006, 11:27   #9
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2788
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, 11: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, 11: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 12:10.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2006, 12: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, 12:45   #13
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2006, 12: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, 18: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 19:11.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2006, 19: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 19:13.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 05-07-2006, 21: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, 22: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, 23: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, 15: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


Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
Implementazione NVMe nativa disattivata ...
Polestar 2 e 3: le batterie integrano or...
Crisi delle memorie: ecco le soluzioni p...
Il satellite ESA Proba-3 è tornat...
'Chiudete (quasi) tutto', il risultato d...
Tesla, maggiore autonomia grazie a una r...
Nasce TrendAI, la divisione di Trend Mic...
Recensione Motorola Signature: il primo ...
TeraFab, Elon Musk parte all'assalto di ...
L'ambiziosa base lunare permanente sulla...
Litografia BEUV (Beyond-EUV): la startup...
SAP e l'IA agentica: dall'hype alla matu...
'Abbiamo raggiunto l'AGI': Jensen Huang ...
Claude ora usa il mouse e la tastiera al...
Analisi Opensignal 2026: TIM si prende l...
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: 19:45.


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