;::::::::::::::::::::::::::::::::::::::::::::::::::::
::                  Logo:  Edizioni ByteMan        ::
::               Collana:  Particelle Didattiche   ::
::             Argomento:  Assembly 8086           ::
::      Titolo originale:  XSPASTR.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 * ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::        XSPASTR.ASM  -  Revisione 24-9-1991, a cura di Salvo Rosta.       ::
::                                                                          ::
:: Function  XSpaceStr(String)        ;Spazia Stringa se Length(Str) <= 128 ::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
*
CODE      SEGMENT BYTE PUBLIC
          ASSUME  CS:CODE
          PUBLIC  XSpaceStr

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

ProcUno   PROC    FAR

XSpaceStr:
          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
          CMP     CL,128              
          JBE     Work
          REPZ    MOVSB               ;  Ricopia se lunghezza > 128
          JMP     StopXS              ;  Smetti
Work:     DEC     CL
          ADD     AL,CL               ;Nuova Lunghezza = 2 * LunghezzaPrec - 1
          DEC     DI
          STOSB                       ;RiModifica Lunghezza Stringa Funzione
          MOV     AH,' '              ;Carattere da inserire in AH
XSpaR:    LODSB                       ;Carica in AL il Puntato da SI (INC SI)
          STOSW                       ;Ricopia AX in DI (DI=DI+2)
          LOOP    XSpaR
          MOVSB                       ;Ricopia ultimo carattere

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

CODE      ENDS
          END


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