Istruzione "XLAT" [RISOLTO]

di il
22 risposte

22 Risposte - Pagina 2

  • Re: Istruzione "XLAT" [RISOLTO]

    Ho optato per la seconda opzione cioè quella di lasciare uno spazio nella tabella, in quanto mi sembrava la cosa più semplice.

    Ecco qui il codice:
    
    DATA SEGMENT PUBLIC
    	DESCR DB "Digita un numero e ti compare la relativa lettera dell'alfabeto!",10,13,'$'
    	DOM1 DB "Digita un numero [1 a 26]: ",'$'
    	SOLUZIONE DB "Lettera trovata: ",'$'
    	ACAPO DB 10,13,'$'
    	TAB DB ' ABCDEFGHIJKLMNOPQRSTUVWXYZ';tabella con le lettere dell'alfabeto
    	NUM DB ?
    	DIECI DB 10 
    	CONTA DB 0 
    	LETTERA DB ?
    DATA ENDS ;fine del segmento dei dati
    
    CODE SEGMENT
    
    	ASSUME CS:CODE,DS:DATA
    	
    INIZIO:
    
    	MOV AX,DATA
    	MOV DS,AX
    	
    	STAMPA MACRO FRASE
    		MOV AH,09H
    		LEA DX,FRASE
    		INT 21H	
    	ENDM ;fine della macro
    	
    STAMPA DESCR ;richiamo la macro per la stampa della frase
    STAMPA ACAPO ;richiamo la macro per la stampa della frase
    STAMPA DOM1 ;richiamo la macro per la stampa della frase
    
    CALL INPUT
    
    STAMPA ACAPO ;richiamo la macro per la stampa della frase
    
    LEA BX,TAB ;copio l'offset di TAB in BX 
    MOV AL,NUM 
    
    XLAT  ;eseguo l'istruzione XLAT basandosi sui valori contenuti in BX e AL
    
    MOV LETTERA,AL ;salvo il contenuto di AL in "LETTERA"
    
    STAMPA SOLUZIONE ;richiamo la macro per la stampa della frase
    MOV AH,02H ;richiesta stampa di un carattere
    MOV DL,LETTERA ;metto il carattere in DL
    ;ADD DL,30H ;conversione
    INT 21H  ;interrupt per la stampa del carattere
    
    ;restituisco il controllo al DOS 
    MOV AH,4CH 
    INT 21H 
    
    INPUT PROC NEAR ;PROCEDURA PER L'INPUT DI UN NUMERO A 1 O PIù CIFRE 
    
    	MOV BX,0  
    
    CICLO: 
    		MOV AH,01H ;richiesta input di un carattere
    		INT 21H ;interrupt che permette di ricevere in input un numero
    		CMP AL,13 ;compare fra il contenuto di AL e 13(TASTO INVIO)
    		JE FINECICLO ;se il valore premuto è INVIO allora esco dal ciclo
    		MOV AH,00H ;azzero la parte alta di Ax
    		PUSH AX ;metto AX nello stack
    		MOV AX,BX ;copio BX in AX (nel primo caso BX è uguale a zero quindi il risulato sarà zero)
    		MUL DIECI ;moltiplico per 10 il registro AX 
    		MOV BX,AX ;copio in BX il valore di AX 
    		POP AX ;riprendo l'ultimo numero messo nello stack e lo metto in AX 
    		SUB AL,30H ;conversione
    		ADD BX,AX ;sommo il contenuto di BX con AX  
    		JMP CICLO ;salto incondizionato e torno all'inizio del ciclo
    		
    FINECICLO: 
    	MOV NUM,BL ;metto in "NUM" il valore di BX
    	RET ;return 
    ENDP ;fine della procedura 	
    
    CODE ENDS ;fine del segmento del codice
    END INIZIO ;chiudo l'etichetta che indica l'inizio del programma
    
    Ho però un dubbio che non ho capito:
    Se ci sono più elementi non devo definire il numero di elementi presenti nella tabella come nel caso della dichiarazione di un vettore?
  • Re: Istruzione "XLAT" [RISOLTO]

    Devi solo fare attenzione e controllare il valore di AL usata prima della XLAT
  • Re: Istruzione "XLAT" [RISOLTO]

    Non ho capito cosa vuoi dire...
  • Re: Istruzione "XLAT" [RISOLTO]

    Forse non è chiara questa tua domanda

    Se ci sono più elementi non devo definire il numero di elementi presenti nella tabella come nel caso della dichiarazione di un vettore?
  • Re: Istruzione "XLAT" [RISOLTO]

    La mia domanda era quella sono io che non ho capito cosa volessi dire..
    Il problema sono io
  • Re: Istruzione "XLAT" [RISOLTO]

    Mi spieghi meglio la domanda dato che non l'ho capita?
  • Re: Istruzione "XLAT" [RISOLTO]

    Se ho capito la domanda, vuoi sapere come definire i confini dell'array.
    Se è così, devi farlo "a posteriori" controllando che il valore di al sia accettabile, come ha detto oregon.
    La cosa più sensata è avere due costanti tipo LOWER_BOUNDARY e UPPER_BOUNDARY che definiscono rispettivamente il minimo e il massimo valore accettabili in AL prima della XLAT. In questo modo il codice è più versatile.
  • Re: Istruzione "XLAT" [RISOLTO]

    Grazie a entrambi, ho capito adesso


    ciaooo
Devi accedere o registrarti per scrivere nel forum
22 risposte