当前位置: 代码迷 >> 汇编语言 >> 用绿色展示Welcome to masm
  详细解决方案

用绿色展示Welcome to masm

热度:5856   发布时间:2013-02-26 00:00:00.0
用绿色显示Welcome to masm!
将指定的字符串显示在屏幕上,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

------解决方案--------------------------------------------------------
出去转一圈,想明白了,应该是我把  字符和字符属性对应的显存位置搞反了。
应该低地址存放字符,高地址存放属性。
但是显示字符位置问题还是没想明白
------解决方案--------------------------------------------------------
一会回家的时候试试