;::::::::::::::::::::::::::::::::::::::::::::::::::::
::                  Logo:  Edizioni ByteMan        ::
::               Collana:  Particelle Didattiche   ::
::             Argomento:  Assembly 8086           ::
::      Titolo originale:  XUPLOCAS.ASM            ::
:: Autore e Proprietario:  Salvatore ROSTA         ::
::      Ultima revisione:  07-04-1994              ::
::         Sito Internet:  w3.quipo.it/byteman     ::
::                e-mail:  byteman@quipo.it        ::
::                                                 ::
::     Tutti i diritti riservati (c)1993..2000     ::
;::::::::::::::::::::::::::::::::::::::::::::::::::::

COMMENT * ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::        XUPLOCAS.ASM -  Revisione 19-agosto-1991, a cura di Salvo Rosta.  ::
::                                                                          ::
:: Function  XUpLoCase(String)          ;Converte String in Maiuscole       ::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
*
CODE      SEGMENT BYTE PUBLIC
          ASSUME  CS:CODE
          PUBLIC  XUpLoCase

Function  EQU     DWORD PTR [BP+10]
String    EQU     DWORD PTR [BP+6]

XUpLoCase PROC    FAR
          PUSH    BP
          MOV     BP,SP
          PUSH    DS

          LDS     SI,String           ;Lettura Puntatore Stringa DS:SI
          LES     DI,Function         ;Lettura Puntatore Funzione Stringa ES:DI
          CLD                         ;Direzione di scansione normale
          LODSB                       ;Lettura in AL Lunghezza Stringa
          STOSB
          XOR     CX,CX               ;Azzera Contatore
          MOV     CL,AL               ;CL Lunghezza Stringa
          JCXZ    StopXS              ;Smetti se lunghezza=0

ReadCh:   LODSB                       ;Carica in AL il puntato da SI (INC SI)
          CMP     AL,'A'              ;Confronto con 'A'
          JB      WriteCh             ;Ricopia se inferiore.
          CMP     AL,'Z'              ;Confronta con 'Z'
          JA      XUpLo1              ;Verifica Minuscole se superiore.
          ADD     AL,32               ;Converti in Minuscolo
          JMP     WriteCh             ;Ricopia
XUpLo1:   CMP     AL,'a'              ;Confronto con 'a'
          JB      WriteCh             ;Ricopia se inferiore
          CMP     AL,'z'              ;Confronta con 'z'
          JA      WriteCh             ;Ricopia se superiore
          SUB     AL,32               ;Converti in Maiuscolo
WriteCh:  STOSB                       ;Ricopia AL al puntato da DI (INC DI)
          LOOP    ReadCh              ;Ricicla

StopXS:   POP     DS                  ;Ripristino Registri
          POP     BP
          RET     4
XUpLoCase ENDP

CODE      ENDS
          END


;::::::::::::::::  FINE FILE  :::::::::::::::::::