assume cs:code
data segment
db 'welcome to masm!',0
data ends
code segment
start:
mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str:
push ax
push bx
push cx
push si
push es ;保护现场
mov ax,0b800h ;mov al,0ah
mov es,ax ;定位显存 ;mul dh
mov al,0a0h ;add ax,0b800h
mul dh ;mov es,ax
mov bx,ax ;设置行号 ;mov al,2h
mov al,2h ;mul dl
mul dl ;设置列号 ;mov bx,ax
add bx,ax ;设置显示位置基址 ;减少一行指令,节省3字节空间,重定位显示位置需要重新修改段寄存器
mov al,cl ;设置字体属性
show:
mov cl,[si]
mov ch,0h
jcxz ok ;判定字符串结尾
mov es:[bx][si],cl
inc si ;显示字符
mov es:[bx][si],al
inc bx ;设置字体属性
jmp show
ok:
pop es
pop si
pop cx
pop bx
pop ax ;恢复现场
ret ;返回
code ends
end start |