21,500
社区成员
发帖
与我相关
我的任务
分享
assume cs:code,ds:data
data segment
db 'welcome to masm!, Please any key to end!',0
data ends
code segment
start:
mov ax,data ;将字符串所在的段送入ds
mov ds,ax
mov cl,2 ;设置字符属性
mov si,0 ;字符串指针,初始化为0,指向第一个字符
call show_str ;调用显示字符串子函数
mov ah,1 ;等待键入一个字符,以结束程序
int 21h
mov ax,4c00h ;结束程序
int 21h
show_str:
mov ax,0b800h ;将视频缓区的段址送入ES
mov es,ax
mov bx,10*160+25*2 ;行号*160+列号*2 = 在视频缓区中的偏移量
;在此处,我选择在第10行,第5列开始显示
mov al,cl ;将属性保存到AL
mov cl,0 ;CL未用到,但需要置0
s:
mov ch,ds:[si] ;将字符存放到CH
jcxz ok ;如果字符值cx = 0,说明字符串结束
mov es:[bx],ch ;将字符存放到屏幕缓冲区
mov es:[bx+1],al ;将属性传到屏幕缓冲区
add bx,2 ;移到下一个显示单元
inc si ;字符指针si+1
jmp short s ;继续显示下一个字符
ok:
ret
code ends
end start