;show_str
assume cs:code
data segment
db 'welcome to masm !',0
data ends
code segment
start:
mov dh,1
mov dl,2
mov cl,7
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 dx
push si
push di
;计算显示位置,最终ax存放最终显示位置
mov ax,0
sub dh,1
mov al,dh
mov ah,160
mul ah
mov dh,0
mov bx,ax
sub dl,1
mov al,dl
mov ah,2
mul ah
add ax,bx
;准备显示字符串
mov bx,0b800h
mov es,bx
mov di,ax
xor bx,bx
mov bl,cl
;设置字符以及字符属性
s0:
mov ch,ds:[si];ch存放字符
mov es:[di],ch
mov es:[di+1],bl;bl存放字符数形
mov cl,0
jcxz quit
inc si
add di,2
jmp short s0
;现场恢复
quit:
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
code ends
end start |