汇编:键盘中断(int 9)
键盘中断, 一般按下键盘上的某个按钮就会触发键盘中断.
assume cs:code, ds:data, ss:stackdata segmentdb 128 dup(0)
data endsstack segment stackdb 128 dup(0)
stack endscode segmentstart: mov ax, stackmov ss, axmov sp, 128call cpy_new_int9call set_old_int9 call set_new_int9testA: mov ax, 1000Hjmp testAcall set_init_int9mov ax, 4C00Hint 21H;=======================================
set_init_int9:mov bx, 0mov es, bxclipush es:[200H]pop es:[9*4]push es:[202H]pop es:[9*4+2]stiret
;=======================================
set_new_int9: push bxpush esmov bx, 0mov es, bxclimov word ptr es:[9*4], 7E00Hmov word ptr es:[9*4+2], 0stipop espop bxret
;========================================
set_old_int9:push bxpush esmov bx, 0mov es, bxclipush es:[9*4]pop es:[200H] ; int9 ippush es:[9*4+2]pop es:[202H] ; int9 csstipop espop bxret
;=========================================
new_int9:push axin al, 60Hpushfcall dword ptr cs:[200H]cmp al, 48H ; 方向键-- 上 扫描码je isUpcmp al, 50H ; 方向键-- 下 扫描码je isDowncmp al, 3BH ; F1 扫描码jne int9Retcall change_screen_colorint9Ret: pop axiret ;============================================================
isUp:mov di, 160*10+40*2mov bx, 0B800Hmov es, bxmov byte ptr es:[di], 'U'jmp int9Ret;============================================================
isDown:mov di, 160*10+40*2mov bx, 0B800Hmov es, bxmov byte ptr es:[di], 'D'jmp int9Ret
;============================================================
change_screen_color:push bxpush cxpush esmov bx, 0B800Hmov es, bxmov bx, 1mov cx, 2000 ; 整个屏幕是 25行 80列, 1列是2个字节, 所以一行一共160个字节changeColor: inc byte ptr es:[bx];mov byte ptr es:[bx], 01000001Badd bx, 2loop changeColorpop espop cxpop bxret
new_int9_end: nop;========================================
cpy_new_int9:mov bx, csmov ds, bxmov si, OFFSET new_int9mov bx, 0mov es, bxmov di, 7E00Hmov cx, OFFSET new_int9_end - OFFSET new_int9cldrep movsbretcode endsend start
当按下"F1"键,会改变屏幕颜色, 当按 "上方向键",会在屏幕上打印"U", 按“下方向键”,会在屏幕上打印"D"
汇编:键盘中断(int 9)相关推荐
- c语言 汇编中断程序,ARM7 C语言嵌入汇编开关中断
__inline void IRQEnable(void) { int tmp; __asm { MRS tmp,CPSR ///读取CPSR的值 BIC tmp,tmp,#0x80 // ...
- GNU ARM汇编--(五)中断汇编之嵌套中断处理
在上篇<GNU ARM汇编--(四)中断汇编之非嵌套中断处理>中分析了最简单的中断处理的写法,再看TQ2440启动代码中的中断向量表的写法就一目了然了.今天抽时间对嵌套中断处理的学习做下整 ...
- 51单片机开发 矩阵键盘中断实验与简易计算器及proteus仿真
51单片机开发 矩阵键盘中断实验与简易计算器及proteus仿真 文章目录 51单片机开发 矩阵键盘中断实验与简易计算器及proteus仿真 实验内容 一.实验一 矩阵键盘中断实验 数码管显示 1.仿 ...
- arm汇编 调用linux中断,GNU ARM汇编(四)中断汇编之非嵌套中断处理
原标题:GNU ARM汇编(四)中断汇编之非嵌套中断处理 在写这篇blog之前,不得不感慨一句:纸上得来终觉浅,绝知此事要躬行.作为EE出身的,虽然好久好久没用汇编写 的中断了,但自我感觉对中断的理解 ...
- NASM汇编语言与计算机系统11-9号与0X16号中断显示键盘输入(int)
本文的示例将显示从键盘上输入一个按键,屏幕上显示该按键的内容 0x09号中断:当从键盘上敲一个按键,会将按键的内容放到0x60端口,然后执行9号中断例程,由于9号中断例程已经被bios写好了,所以会直 ...
- c语言里10h代表什么,汇编中的10H中断int 10h详细说明
汇编中的10H中断是由BIOS对显示器和屏幕所提供的服务程序.使用int 10h服务程序时,必须先指定ah寄存器为以下显示服务编号之一,以指定需要调用的功用. 显示服务 (Video Service: ...
- 8086汇编(10、int9键盘中断)
今天我们来实现个功能按F1 不断改变屏幕颜色 概念: 按键盘会产生扫描码 通码 按住不放 断码 弹起,通码+80H int9中断对应的端口为60H,也就是我们按下键盘,就可以从60H中读取到扫描码 扫 ...
- c语言键盘中断扫描码,用51单片机中断编写的4x4键盘程序
应用查询扫描编写键盘程序,由于要给按键去抖动,程序变得比较复杂和冗长(详见2013年9月29日博文<MSP430和AT89C51单片机4x4键盘C程序>),如果用中断编写,设置中断响应在下 ...
- 利用BIOS 中断INT 0x10显示字符和字符串
注:以下程序系原创,使用AT&T格式汇编来调用BIOS 0x10中断,如有错误,欢迎指正.表达能力较差,写的不好,但若能帮助一二访客,幸甚. 使用BIOS 显示服务(Video Service ...
最新文章
- asp.net断点续传技术
- tensorflow学习(7. GAN实现MNIST分类)
- Delphi中拖动无边框窗口的5种方法
- 继承的CSS类在Chrome开发者工具里的显示
- Maven 使用bat批量清除本地仓库的lastUpdated文件
- 11g oracle xe启动_详解Oracle等待事件的分类、发现及优化
- 前端学习(757):预解析
- 201312-1 出现次数最多的数
- SeismicUnix:wtlib.c[小波变换库]
- python 分数等级转换_一文读懂,新高考“3+1+2”模式中等级赋分如何换算?
- paip.提升用户体验---c++ ide 自动化注释插件的开发...
- 昆仑通泰触摸屏与PLC通讯故障处理
- 王超(清华大学博士)Linux期末考核
- WiFi无线网络的几种认证与加密方式
- 基于ThingsBoard二次开发的物联网平台ThingsKit-Link白皮书
- 游戏编辑器制作(9)
- 进制之间的相互转换(超详细)
- 全力冲unreal了
- c#如何实现叫号操作_基于.NET的排队语音叫号系统设计与实现
- 2022区块链应用全景及未来展望
热门文章
- 数据库复习总结(12)数据检索
- 最小树形图(朱刘算法)
- 总结开发Silverlight项目准则(转)
- (转)一个带自定义分页,排序功能的DATAGRID控件(公开源码)
- 程序员的魔法——用Masking GAN让100,000人都露出灿烂笑容
- Spring Boot教程(三十四)整合elk(1)
- w,vmstat,top,sar
- 虚幻填坑004:减少starter content占用空间,只保留使用的assets
- BackTrack5 (BT5)无线password破解教程之WPA/WPA2-PSK型无线password破解
- U盘启动盘制作方法 2种绝招轻松搞定