assume cs:code,ds:data,ss:stack
data segment
db 'Welcome to masm!',0
data ends
stack segment
dw 16 dup (0)
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,32
mov dh,8
mov dl,8
mov cl,2
mov si,0
call show_str
mov ax,4c00h
int21h
show_str:
push cx
push dx
push ds
push si
push ax
push es
push bp
push di
mov ax,0b800h
mov es,ax
mov al,160
mul dh
mov bp,ax
mov al,2
mul dl
mov di,ax
s: push cx
mov ch,0
mov cl,ds:[si]
jcxz ok
pop cx
mov al,ds:[si]
mov es:[bp+di],al
mov es:[bp+di+1],cl
add di,2
inc si
inc cx
loop s
ok: pop cx
pop di
pop bp
pop es
pop ax
pop si
pop ds
pop dx
pop cx
ret
code ends
end start