操作显存时有时候显示不了的原因

比如酱紫:

[plain]  view plain  copy
 print ?
  1. assume cs:code  
  2.   
  3. data segment  
  4.     db 'Welcome to masm!',0  
  5. data ends  
  6.   
  7. code segment  
  8.   
  9. start:  mov dh,8                ;行号  
  10.         mov dl,3                ;列号  
  11.         mov cl,2                ;颜色  
  12.         mov ax,data  
  13.         mov ds,ax  
  14.         mov si,0                ;ds:si指向字符串的首地址  
  15.           
  16.         call show_str  
  17.   
  18.         mov ax,4c00h  
  19.         int 21h  
  20.           
  21.     show_str:  
  22.                 push cx  
  23.                 push si  
  24.                   
  25.                 mov al,0A0h  
  26.                 dec dh          ;行号从0开始  
  27.                   
  28.                                 ;显示在 M行 N列的字符为 B800:[160*M + 2*N]   
  29.                 mul dh          ;8位乘法,结果存在ax中,定位行  
  30.                 mov bx,ax  
  31.                 mov al,2  
  32.                 mul dl          ;定位列  
  33.                 sub ax,2        ;列号从0开始,偶字节存放字符  
  34.                   
  35.                 add bx,ax  
  36.                   
  37.                 mov ax,0b800h   ;显存段地址  
  38.                 mov es,ax  
  39.                   
  40.                 mov di,0        ;显存偏移地址  
  41.                 mov al,cl       ;cl中存放颜色参数  
  42.                   
  43.                 mov ch,0  
  44.                   
  45.             s:  mov cl,ds:[si]  ;'Welcome to masm!',0  
  46.                   
  47.                 jcxz ok         ;cx为0时,跳转,结束  
  48.                   
  49.                 mov es:[bx+di],cl       ;偶字节存放字符  
  50.                 mov es:[bx+di+1],al     ;奇字节存放颜色参数  
  51.                   
  52.                 inc si  
  53.                 add di,2  
  54.                   
  55.                 jmp short s             ;jcxz执行时候才结束  
  56.                   
  57.             ok: pop si  
  58.                 pop cx  
  59.                   
  60.                 ret  
  61.           
  62. code ends  
  63. end start  

编译无问题。。。运行也行。。。。但就是一点反应都木有。。。


各种百度google,最后发现是因为cmd.exe的原因


大部分人都是在cmd 中运行程序.一般来说没什么.但是在操作显存的时候十之八九不太会如意(显示不出)
错就错在进入了cmd.exe运行的这个程序, 正确的应该是从开始-运行-Command.com进入Command.com运行, 则不会有问题。 
command.com是ms-dos的应用程序,(严格地说,是内部命令处理程序)是所有内部命令的集合,调入内存后可以接受键入的内部命令,并按照dos的规定的功能执行命令,cmd.exe是基于windows系统运行的程序,只是为习惯dos操作提供的一个命令提示符窗口。 
另外:cmd下会恢复一些用户已经更改的中断向量。Command.com下不恢复



PS:cmd.exe下有时候操作显存没反应的时候,debug一下,-g也可以显示咯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值