安装一个新的int9中断例程,功能:在DOS下,按下“A”键后,除非不再松开,如果松开,就显示满屏的“A”;其他的按键照常处理。
提示:按下一个键时产生的扫描码称为通码,松开一个键时产生的扫描码称为断码,断码 = 通码 + 80h

我把程序改了下,按c键,在屏幕上显示B字母,程序代码如下:

;程序功能:按A键,当松开的时候在屏幕的80*25的里面全部显示字母A,不松开则不作任何处理,其他的键照常处理。

assume cs:code
data segment
db dup() data ends code segment
start:
mov ax,
mov es,ax
mov di,200h
mov ds,ax
mov si,[*]
mov cx,
cld
rep movsb mov ax,offset int9
mov ds:[*],ax
mov ax,cs
mov ds:[*+],ax call breakPoint ;还原int9中断向量表
mov ax,
mov ds,ax
mov si,200h
mov di,*
mov cx,
cld
rep movsb mov ax,4c00h
int 21h ;实现int9中断例程
int9:
cli
push ax
mov ax,0b800h
push es
mov es,ax push bx
mov bx, push cx
mov cx, in al,60h
cmp al,2eh+80h
jne int9ret
mov ah,'B'
s0:
mov byte ptr es:[bx],ah
add bx,
loop s0 int9ret:
int 80h
pop cx
pop bx
pop es
pop ax
iret breakPoint:
push ax
pushf
pop ax
or ah, ;这里可以增加判断,例:当cx为100的时候再设置断点
push ax
popf
pop ax
ret code ends
end start

运行:我使用的是win7+masm6.15环境,通过编译、链接后,使用debug xxx.exe的形式运行,直接按g命令,则会执行到断点处call breakPoint,这时候你按c键盘,就可以在屏幕上显示B字母了。

最新文章

  1. Java集合类中的哈希总结
  2. 应用matplotlib绘制地图
  3. 实例讲解虚拟机3种网络模式(桥接、nat、Host-only)
  4. HDU5845 Best Division
  5. ABAP字符串按长度拆分
  6. 来自 Github 的图形化 Git 使用教程
  7. jquery取消事件冒泡和取消默认行为
  8. MDM 证书申请流程(vendor及customer)
  9. SQL Server 索引的图形界面操作 <第十二篇>
  10. 重写系统中的UINavigationController返回按钮的事件
  11. PostgreSQL数据的导出导入 save your data!
  12. spring管理事务需要注意的
  13. NDK 线程同步
  14. 在容器中利用Nginx-proxy实现多域名的自动反向代理、免费SSL证书
  15. Linq、Lambda表达式详细总结(转)
  16. js获取浏览器版本信息整理
  17. 关于SqlCommand对象的2个方法:ExecuteNonQuery 方法和ExecuteScalar方法
  18. centos-6.5安装部署LNMP环境
  19. Codeforces 1038 E - Maximum Matching
  20. day69

热门文章

  1. First non repeating word in a file? File size can be 100GB.
  2. [POI2006]SZK-Schools
  3. Linux软件包分类
  4. VLFeat图像库在VS2012下的配置
  5. linux基础part5
  6. 通过systemd配置Docker
  7. HTML 5 本地存储
  8. LRC歌词文件读取代码
  9. LeetCode:二叉树的前、中、后序遍历
  10. MD5加密“破解”在.NET平台实现最基本的理解