Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DIM EQU 6
- .MODEL SMALL
- .STACK
- .DATA
- VETT DB "ABACO3TE2ETE1RCOLAIO1BBUONO2ILE"
- MAX DB 0
- PAROLAMAX DB 20 DUP(?) ; Sovradimensionato.
- .CODE
- .STARTUP
- CALL PAROLE
- ; Stampa
- LEA DX, PAROLAMAX
- MOV AH, 09H
- INT 21H
- .EXIT
- PROC PAROLE
- MOV SI, 0 ; Indice di scorrimento del vettore
- MOV CX, 0 ; CH = Dimensione della parola più lunga
- MOV DX, 0 ; DL = Lettere da considerare nel primo blocco
- MOV AL, DIM-1 ; AL = Contatore parole da analizzare
- ; La prima parola la tratto a parte
- PRIMA: MOV AH, VETT[SI]
- CMP AH, "9"
- JBE FINITA
- MOV PAROLAMAX[SI], AH
- INC CH
- INC SI
- JMP PRIMA
- ; Quando trovo il primo numero lo memorizzo (sarà il numero di lettere da prendere
- ; e concatenare con quelle del blocco successivo) e metto un fine stringa
- FINITA: SUB AH, "0"
- MOV DL, AH
- MOV PAROLAMAX[SI], "$"
- INC SI ; Partenza della successiva
- MOV BX, SI ; Arrivo della successiva (arrivo = partenza)
- ; Le successive le tratto a parte (primo pezzo uguale a sopra)
- SUCCESSIVA: MOV AH, VETT[BX]
- CMP AH, "9"
- JBE FINEBLOCCO
- INC BX ; Passa alla successiva lettera del blocco
- INC CL ; Conta una lettera in più
- JMP SUCCESSIVA
- FINEBLOCCO: ADD CL, DL ; CL = caratteri contati nel nuovo blocco, DL = caratteri del primo blocco
- CMP CL, CH ; La nuova parola è più lunga?
- JBE CORTA
- MOV DI, DX ; Sì, è più lunga, devo partire a modificare dopo DL posizioni
- SPOSTA: MOV AH, VETT[SI]
- MOV PAROLAMAX[DI], AH ; Modifico la parola più lunga in memoria
- INC DI
- INC SI
- CMP SI, BX ; Partenza = arrivo?
- JNE SPOSTA
- MOV PAROLAMAX[DI], "$" ; Termino col fine stringa
- MOV AH, VETT[SI] ; Ripristino il contatore caratteri per il primo blocco
- XCHG CL, CH ; Aggiorno la lunghezza della parola più lunga
- CORTA: MOV SI, BX ; No, non è più lunga
- INC SI ; Nuovo indice di partenza
- MOV BX, SI ; ... e arrivo
- MOV DL, AH ; Salvo il nuovo numero di caratteri da considerare nel primo blocco
- SUB DL, "0" ; Correzione ASCII
- MOV CL, 0 ; Azzero il contatore per i caratteri del nuovo blocco
- DEC AL ; Passo al successivo blocco
- CMP AL, 0 ; Ho finito i blocchi?
- JNE SUCCESSIVA
- MOV MAX, CH ; Ritorna il massimo
- RET
- ENDP PAROLE
- END
Advertisement
Add Comment
Please, Sign In to add comment