;::::::::::::::::::::::::::::::::::::::::::::::::::::
::                  Logo:  Edizioni ByteMan        ::
::               Collana:  Particelle Didattiche   ::
::             Argomento:  Assembly 8086           ::
::      Titolo originale:  XCENTSTR.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 * ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::        XCENTSTR.ASM -  Revisione 24-9-1991, a cura di Salvo Rosta.       ::
::                                                                          ::
:: Function  XCenterStr(String,Field) ;Centra Stringa in campo Field        ::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
*
CODE      SEGMENT BYTE PUBLIC
          ASSUME  CS:CODE
          PUBLIC  XCenterStr

Function  EQU     DWORD PTR [BP+12]
String    EQU     DWORD PTR [BP+8]
Field     EQU     BYTE  PTR [BP+6]

ProcUno   PROC    FAR

XCenterStr:
          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                       ;Modifica Lunghezza Stringa Funzione
          XOR     CX,CX               ;Azzera Contatore
          MOV     CL,AL               ;CL Lunghezza Stringa
          JCXZ    StopXS              ;Smetti se lunghezza=0
          MOV     BL,Field
          CMP     CL,BL
          JB      Work1
          JMP     Copy                ;  Ricopia se Lunghezza >= Field
Work1:    XOR     AH,AH
          XOR     BH,BH
          SUB     BL,CL               ;Calcolo Spazi aggiuntivi (F-L)/2
          SHR     BL,1
          ADD     AX,BX
          CMP     AH,0
          JE      Work
          JMP     Copy                ;  Ricopia se Lunghezza Complessiva > 255

Work:     DEC     DI
          STOSB                       ; Nuova Lunghezza Stringa
          PUSH    CX
          SUB     AX,CX               ; Spazi Aggiuntivi
          MOV     CX,AX
          MOV     AL,' '
          REPZ    STOSB               ;
          POP     CX
Copy:     REPZ    MOVSB               ;

StopXS:   POP     DS                  ;Ripristino Registri
          POP     BP
          RET     6
ProcUno   ENDP

CODE      ENDS
          END


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