lab10
10.1
assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start:
call init_reg ;初始化寄存器
call get_place ;获得目标位置
call show_string ;显示字符串
mov ax,4c00h
int 21h
;====================================================
init_reg:
mov bx,0b800h
mov es,bx ;es指向显存段
mov bx,data
mov ds,bx ;ds指向数据段
mov dh,8
mov dl,3
mov cl,2 ;设置位置和颜色
mov di,0 ;di寄存器确定显示位置, 通过es:[di]的方式表示显示的位置
mov si,0 ;si寄存器确定每个字的位置,通过ds:[si]的表示字符串的每个字
mov bh,cl
ret
;====================================================
get_place:
mov al,160
mul dh ;8位乘法的规则
mov di,ax
mov al,2
mul dl
add di,ax
ret
;====================================================
show_string:
mov cx,0
mov cl,ds:[si]
jcxz showStringRet ;时刻关心每个数据的大小,从而确定合理的寄存器
mov bl,ds:[si] ;bl是偶数位,存字符
mov es:[di],bx
add di,2 ;di指向下一个显存
inc si ;si指向下一个字符
jmp show_string
showStringRet:
ret
code ends
end start