;a1.asm      16/08/01            Celio G.
;        inverte "in locum" um vetor de caracteres (nao vazio)
;        usando apenas registradores como vari veis tempor rias

ORG 0100h		;Set code start address to 0100h

mov dx, msg             ; end do vetor passado em dx
mov ah, 9               ; para a funcao 9 do int 21h do DOS,
int 21h                 ; exibe o vetor original no vˇdeo (vetor deve terminar com '$'

mov bx, endmsg-4        ; bx aponta para o ultimo caracter de msg (antes de 0d)
mov si, msg             ; si aponta para o 1o caracter de msg
myloop:
 mov al,byte [bx]       ; byte a direita em al
 xchg al, byte [si]     ; troca al com byte a esquerda
 mov [bx], al           ; move al para byte a direita
 dec bx                 ; ajusta apontadores: bx, o da "direita", recua,
 inc si                 ; o da "esquerda" avan‡a
 cmp si,bx
 jb myloop              ; continua enquanto si < bx (comparacao sem sinal!)

mov dx,msg              ; end do vetor passado …
mov ah, 9               ; funcao do DOS para exibir no video um vetor ascii
int 21h                 ; mostra o vetor invertido
ret
mov ah, 4ch             ; funcao p/ retornar ao prompt
int 21h                 ; do DOS

;msg db 'abcdefghijklmnopqrstuvwxyz0123456789',0dh,0ah,'$'
msg db 'socorram me subi no onibus em marrocos',0dh,0ah, '$'
endmsg:
