马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 如果。。。 于 2012-8-20 12:03 编辑
那个问题简要的来说就是这样的:对于一个已经编译好的程序来说,程序的功能主要是往屏幕上输出一段字符或别的什么东西。可是,直接在cmd中运行,你会看到窗口一闪而过,在黑黑的cmd窗口上什么也没留下。只能通过Debug的-g命令直接跳到程序的结尾才能看到要显示的字符出现在屏幕上,很不方便,也麻烦! 对于这个问题我也是很是头疼,也发帖问了,很感谢 lukelqz网友的热心和耐心的解答。虽然问题没有解决,但还是很感谢你!后来我也不打算弄了,就那样将就着用吧。可在昨晚看书的时候,看到了 13.6节:BIOS中断例程应用。按照书上讲的也动手操作了一下,就是调用BIOS提供的10号中断例程的第9号子程序,功能是在光标位置显示字符。 无意间直接在cmd中运行了我编译好的程序,然后竟然在cmd中直接输出了结果,我很是惊讶和兴奋。 然后经过我一会的摸索和调试,终于发现了,只要在程序调用中断例程前先调用BIOS的10号中断例程,就可以直接在cmd中运行和显示结果了。当然,为了方便,我直接将10号中断例程直接在程序开头处就调用了。 说了这么多,大家可能听的云里雾里的,下面我们用一个实例来说明一下吧。 比如下面这个程序,功能是往屏幕中间输出80个“!”。 源码如下: - assume cs:code code segment start:
- mov ax,0b800h ;显存的段地址
- mov es,ax
- mov di,160*12 ;屏幕的第12行
-
- s: mov cx,80 ;循环80次s: mov byte ptr es:[di],'!'
- mov byte ptr es:[di+1],2 ;颜色属性为绿色
- add di,2
- loop s
-
- mov ax,4c00h
- int 21h
-
- code ends
- end start
复制代码编译完成后,保存为1.exe。我们直接在cmd中运行下看看效果,效果图如下:
结果发现屏幕上啥也没有,还是黑黑一遍,当然,这里也不是绝对的,有的人的电脑就是可以输出80个绿色的感叹号的,像我们甲鱼老师的就可以,我也不知道为什么他的行,我却不行,呵呵,相信也有大部分人的情况和我一样吧,啥都没看到。不过没关系,我现在已经找到解决的方法了,听我慢慢道来吧。 然后,我们将源码改成如下,就是在程序的开始处加上两句, mov ah,9 int 10h 可能有的人还不知道这两句是干嘛的,不过不要紧,你学到后面就知道了。修改后的源码如下
为了更易区分,我以图片的形式给出了。 好了,修改后我们在编译一下,然后直接在cmd中运行1.exe试试。看: 呵呵,和我们预期的一样,在屏幕中间输出了80个绿色的感叹号。直接在cmd中运行的哦! 好了,这下这个令人蛋疼的问题终于解决了,虽然我也给不出一个令人满意的科学的解释。但知道只要在程序开头出加上 mov ah,9 int 10h 就可以了。别问为什么,我也不知道。好了,以后不能正常显示的用户记得在程序前加上这么两句哦!感谢你看到了这里,说了这么多废话,呵呵,谢谢。
|