当前位置: 代码迷 >> 汇编语言 >> 关于int 10h中断的困惑解决办法
  详细解决方案

关于int 10h中断的困惑解决办法

热度:9263   发布时间:2013-02-26 00:00:00.0
关于int 10h中断的困惑
请大家帮忙看下这两个程序
assume cs:code

code segment
w:
  mov ah,2 ;置光标
  mov bh,0
  mov dh,5
  mov dl,12
  int 10h
   
  mov ah,9 ;在光标位置显示要显示的字符
  mov al,'a'
  mov bl,11001010b ;颜色属性
  mov bh,0 ;第0页
  mov cx,3 ;字符重复的个数
  int 10h
   
  mov ax,4c00h
  int 21h
code ends
end w

这个程序在5行12列的地方,显示了三个a ,并且底色为红色,前景为绿色

但是我现在不想指定它在5行12列显示三个a,而是想直接在光标处显示三个a
所以我写了这个程序
assume cs:code

code segment
w:
  mov ah,2 ;置光标
  mov bh,0
  mov dh,5
  mov dl,12
  int 10h
   
  mov ah,9 ;在光标位置显示要显示的字符
  mov al,'a'
  mov bl,11001010b ;颜色属性
  mov bh,0 ;第0页
  mov cx,3 ;字符重复的个数
  int 10h
   
  mov ax,4c00h
  int 21h
code ends
end w

但在debug下调试之后,不但是三个a的颜色为绿色,底色为红色
窗口从三个a往下的部分全部变为绿字红底
我认为是只有 三个a 是绿字红底的

这是什么原因,高手帮忙解答一下

------解决方案--------------------------------------------------------
你再运行一次,看看是每次都一样。
int 10h在视频模式下,字符在内存中的下一个字节位置存放该字符的颜色属性,每个都一样。
你是否是后续字符没有再次设置过字符属性,默认读取前一次设置。
------解决方案--------------------------------------------------------
两个程序一样呀,如果是直接运行和debug不一样的话,可能跟int 10h无关。是在console下运行,还是dos操作系统?console下,可能与纯dos有点区别。是debug时有问题还是debug后,再直接运行,有问题?这两种情况在console下都遇到过。甚至直接运行没问题,再运行一遍就会有问题。debug时有问题的话,猜测有可能是debug时光标有移动的情况。
  相关解决方案