格式天下 发表于 2012-2-29 21:41:21

关于屏幕显示的问题


assume cs:code,ds:data
data segment
    db "welcome to masm!"
data ends
code segment
start:mov ax,data
      mov ds,ax
      mov bx,0
   
   mov ax,0b872h
   mov es,ax
   mov si,0ah
   
   mov cx,16
s:   mov al,ds:
   mov es:,al
   mov al,00000010b
   mov es:,al
   inc si
   inc bx
   loop s
   
   mov ax,4c00h
   int 21h
code ends
end start   
=====================================
上面的代码执行后结果为什么不是绿底的“welcome to masm!"呢?
最上面是我执行后的现象,多多指教,谢了


莫名其妙 发表于 2012-2-29 21:41:22

本帖最后由 莫名其妙 于 2012-2-29 22:25 编辑

s:   mov al,ds:
   mov es:,al
   mov al,00000010b; 这里你可以用16进制数表示 干嘛用2进制呢.. 绿色直接 mov al,2不过用2进制确实 方便对照颜色改!~
   mov es:,al
   inc si
inc bx
   loop s
低8位存放数据高八位存放颜色    ds 段每次增加1   es段每次 要加2也就是 si+2 才能到下一个数据存放的位置
比如
XXXX:0000   01   02    03    04   05    06    07    08 .....................
                数据颜色数据颜色数据 颜色.................

夏洛 发表于 2012-2-29 23:01:04

有两处错误导致结果错误
整个程序的结构是没有错的,错在细节
1.颜色背景在前,前景在后,所以应该是 00100000b (绿底 = 绿背景)
2.si作为显示器内存循环的变量,应该每次循环都加2,所以是 add si,2

风剑河 发表于 2012-2-29 23:41:40

错误原因前面两位兄台已经解释了,我就不说了。但想向你请教一下怎么贴图的??我弄好久都不会贴

格式天下 发表于 2012-3-1 09:11:56

风剑河 发表于 2012-2-29 23:41 static/image/common/back.gif
错误原因前面两位兄台已经解释了,我就不说了。但想向你请教一下怎么贴图的??我弄好久都不会贴

————-你在回贴时点击右上的高级模式,而后有个“图片“选项,点击以后就可以上传图片了,上传后点击图片本身,这样就贴上去了

格式天下 发表于 2012-3-1 09:14:22

莫名其妙 发表于 2012-2-29 22:22 static/image/common/back.gif
s:   mov al,ds:
   mov es:,al
   mov al,00000010b; 这里你可以用16进制数表示 干嘛用2进制呢.....

明白了,非常感谢!!

格式天下 发表于 2012-3-1 09:15:04

夏洛 发表于 2012-2-29 23:01 static/image/common/back.gif
有两处错误导致结果错误
整个程序的结构是没有错的,错在细节
1.颜色背景在前,前景在后,所以应该是 001 ...

太感谢了:handshake
页: [1]
查看完整版本: 关于屏幕显示的问题