|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
assume cs:code,ds:data
data segment
db 'welcome to masm!',0
data ends
code segment
start: mov dh,8 ;dx=0800
mov dl,3 ;dx=0803
mov cl,2 ;cx=0002
mov ax,data ;data=0caf ax=data
mov ds,ax ;ds=0caf
mov si,0 ;si=0000
call show_str ;call 0016 ip=0016 sp=fffe
mov ax,4c00h
int 21h
;名称:show_str
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
;参数:(dh)=行号(取值范围0~24);
; (dl)=列号(取值范围0~79);
; (cl)=颜色;
; ds:si指向字符串的首地址。
;返回:无。
show_str:
push ax ;0017 sp=fffc
push bx ;0018 sp=fffa
push es ;0019 sp=fff8
push si ;001a sp=fff6
;----------------------------------------------------------
;mov bx,(160*dh+dl*2)设置es:bx指向显存首地址
mov ax,0b800h ;ax=b800
mov es,ax ;es=b800
mov ax,160 ;ax=00a0
mul dh ;ax=0500
mov bx,ax ;bx=160*dh
mov ax,2
mul dl ;ax=dl*2
add bx,ax ;mov bx,(160*dh+dl*2)设置es:bx指向显存首地址
;
;------------------------------------------------------------
mov al,cl ;把颜色cl赋值al
mov cl,0
show0:
mov ch,[si] ;cx=0000 变为cx=7700
jcxz show1 ;(ds:si)=0时,转到show1执行,等于0会是什么情况?
mov es:[bx],ch
mov es:[bx].1,al
inc si ;ds:si指向下一个字符地址
add bx,2 ;es:bx指向下一个显存地址
jmp show0
show1:
pop si
pop es
pop bx
pop ax
ret
code ends
end start
|
|