将指定的字符串显示在屏幕上,dh==行(0-24) dl==列 (0-79) cl == color
1.不知道哪里错了,显示乱码
2.而且,好像不是从1(行)3(列)开始显示,而是从0(行)2(列)开始显示,逻辑计算上有错误?
assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start: mov dh,1 ;行
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:
mov ax,0b800h ;显存段地址
mov es,ax
mov al,160 ;对应显存每行160个字节
mul dh
add dl,dl
mov dh,0
add ax,dx
mov bx,ax ;计算字符串对应的显存起始地址
mov al,cl ;用al暂存颜色参数
s:
mov cl,ds:[si] ;将ds:[si]指向的字符存入cl
mov ch,0
jcxz ok ;比较0之前的每个字符
mov es:[bx],al ;写入颜色参数
mov es:[bx+1],cl ;写入字符
inc si
inc bx
inc bx ;字符+1 显存+2
jmp short s
ok: ret
code ends
end start
------解决方案--------------------------------------------------------
出去转一圈,想明白了,应该是我把 字符和字符属性对应的显存位置搞反了。
应该低地址存放字符,高地址存放属性。
但是显示字符位置问题还是没想明白
------解决方案--------------------------------------------------------
一会回家的时候试试