Comparazione tra una numero e un elemento di una stringa

di il
4 risposte

Comparazione tra una numero e un elemento di una stringa

DATA SEGMENT
;in questa sezione definiremo i dati utilizzati nel programma
MSG1 DB 'Inserisci il testo',32,':','$'
MSG2 DB 'Stringa trasformata:','$'
CR DB 10,13,'$' ;carriage return (ritorno a capo)
LUN DB ? ;conterra' il numero effettivo di caratteri acquisiti da tastiera (senza invio)
BUF DB 51,?,51 DUP(' ') ;buffer che conterra' la stringa acquisita in input (50 CARATTERI + INVIO)
STR DB 51 DUP(' ') ;stringa che conterra' il testo in maiuscolo
DATA ENDS

STACK SEGMENT
;questo segmento viene utilizzato per creare in memoria una struttura dati
;gestita con politica L.I.F.O. (Last In First Out)
STACK ENDS

CODE SEGMENT
start:
;imposto il registro DS con l'indirizzo del segmento dati
MOV AX, DATA
MOV DS, AX
MOV ES, AX
;#######################################################

;invito l'utente ad inserire una stringa di caratteri
MOV DX, OFFSET MSG1 ;ritorno a capo
MOV AH, 9H
INT 21H ;INT 21h / AH=9 scrive sul monitor la stringa a partire dalla locazione DS:DX e terminata da $

;acquisisco la stringa da tastiera e la memorizzo nel buffer BUF
MOV DX,OFFSET BUF
MOV AH, 0AH
INT 21H ;INT 21h / AH=0AH acquisisce una stringa e la posizione a partire dalla locazione in DS:DX

MOV CL,BUF[1] ;metto in CL il numero di caratteri acquisiti da tastiera
MOV LUN,CL ;metto nella variabile LUN il numero effettivo di caratteri acquisiti da tastiera
MOV BX,0

CICLO:
;CMP BUF[BX+2],97
MOV AL,BUF[BX+2]
CMP AL,97
JB SALTA_TRASFORMAZIONE ;salta se il codice del carattere in AL e' minore di 97 (carattere 'a')
CMP AL,122
JA SALTA_TRASFORMAZIONE ;salta se il codice del carattere in AL e' maggiore di 122 (carattere 'z')
SUB AL,32D ;istruzione saltata se la lettera e' gia' maiuscola altrimenti viene convertita e inserita nella stringa

SALTA_TRASFORMAZIONE:

MOV STR[BX],AL ;metto il carattere contenuto in AL nell'array STR
INC BX
CMP BL,LUN
JB CICLO

FINE:
;mi sposto alla riga successiva
MOV DX, OFFSET CR ;ritorno a capo
MOV AH, 9H
INT 21H ;INT 21h / AH=9 scrive sul monitor la stringa a partire dalla locazione DS:DX e terminata da $

;scrivo il messaggio contenuto in MSG2
MOV DX, OFFSET MSG2 ;ritorno a capo
MOV AH, 9H
INT 21H ;INT 21h / AH=9 scrive sul monitor la stringa a partire dalla locazione DS:DX e terminata da $

;scrivo sul monitor il testo trasformato in maiuscolo
MOV STR[BX],'$' ;inserisco il carattere $ per indicare la fine della stringa
MOV DX, OFFSET STR
MOV AH, 9H
INT 21H ;INT 21h / AH=9 scrive sul monitor la stringa a partire dalla locazione DS:DX e terminata da $

;#######################################################
MOV AL, 0
MOV AX, 4CH
INT 21H

CODE ENDS

END start

4 Risposte

Devi accedere o registrarti per scrivere nel forum
4 risposte