Parabéns, cara! \o/
.MODEL SMALL
ORG 100h
.DATA
lpcstrMsg DB 46h, 45h, 4Ch, 49h, 5Ah, 20h, 4Eh, 41h, 54h, 41h, 4Ch, 21h, 20h, 03h, 00h
.CODE
LEA DX, lpcstrMsg
PUSH DX
PUSH 1110_1100b
CALL PRINT
RET 00h
; Acessa um regiao de dados da memoria
MACRO CHGDS POS
PUSH AX
MOV AX, POS
MOV DS, AX
POP AX
ENDM CHGDS
; Escreve um texto na tela
PRINT PROC
POP BP
POP AX
POP DX
PUSH BX
PUSH CX
; Prepara as posicoes de leitura e escrita
MOV SI, DX
MOV DI, 00h
@PRINT_WRITE:
CHGDS 0700h ; Acessa a memoria de dados
MOV DL, [SI] ; Recebe o caractere
MOV DH, AL ; Define a cor do caractere
TEST DL, DL
JE @PRINT_END ; Encerra leitura quando chegar ao final do texto
CHGDS 0B800h ; Acessa a memoria do video
MOV [DI], DX ; Escreve o caractere no video
INC SI ; Proximo caractere
ADD DI, 2 ; Proxima posicao do video
JMP @PRINT_WRITE
@PRINT_END:
POP CX
POP BX
PUSH BP
RET 00h
ENDP PRINT