编程语言:8086汇编中int 16h接收alt+方向键
今天一个网友在一个汇编群里问了一个问题,内容差不多就是,如何在8086汇编中用int 16h号中断接收alt+方向键(用这个组 合键移动光标)。
然后我试了一下,发现,int 16h对这个组合键没反应。
然后我没找到原因,不过找了个替补方法,就是用一直循环用int al,60h读取当前按下的键,判断是不是我需要的键。
下面方向键都为扫描码:
alt键的通码是38h,断码是b8h。左方向键是4bh,右方向键是4dh,上方向键是48h,下方向键是50h。
代码:
assume cs:code,ds:data,ss:stackstack segmentdb 256 dup (0)
stack endsdata segmentvar_x db 0var_y db 0db 256 dup (0)
data endscode segment
start:mov ax,stackmov ss,axmov sp,256mov ax,datamov ds,ax;置光标mov ah,2mov bh,0mov dh,var_ymov dl,var_xint 10hloopstart1:in al,60hcmp al,38hje loopstart2cmp al,01hje finishloopstart1jmp loopstart1endloopstart2:in al,60hcmp al,0b8hje finishloopstart2cmp al,50hje downcmp al,48hje upcmp al,4bhje leftcmp al,4dhje rightjmp loopstart2endleft:dec var_xmov ah,2mov bh,0mov dh,var_ymov dl,var_xint 10hjmp loopstart2endright:inc var_xmov ah,2mov bh,0mov dh,var_ymov dl,var_xint 10hjmp loopstart2endup:dec var_ymov ah,2mov bh,0mov dh,var_ymov dl,var_xint 10hjmp loopstart2enddown:inc var_ymov ah,2mov bh,0mov dh,var_ymov dl,var_xint 10hjmp loopstart2endloopstart2end:call far ptr fun_delayjmp loopstart2finishloopstart2:loopstart1end:jmp loopstart1finishloopstart1:mov ax,4c00hint 21h;延迟功能,自己设置dx和ax的值改变时间
fun_delay:push axpush dxmov dx,0hmov ax,0ffffhfun_delay_b:add ax,0je fun_delay_adec axjmp fun_delay_bfun_delay_a:add dx,0je fun_delay_cdec dxmov ax,0ddddhjmp fun_delay_bfun_delay_c:pop dxpop axretfcode ends
end start
功能:
你按alt+方向键可以往各个方向移动光标(没有检测超界),按esc可退出程序。
自然语言描述如下:
循环1开始读60h端口中的数据如果60h端口中的数据等于38h,就开始执行循环2,否则就跳到循环1开始循环2开始读60h端口中的数据如果60h端口中的数据等于b8h,就说明已经松开alt键,这时跳到循环1开始如果60h端口中的数据等于4bh,就将光标向左移动如果60h端口中的数据等于4dh,就将光标向右移动如果60h端口中的数据等于48h,就将光标向上移动如果60h端口中的数据等于50h,就将光标向下移动跳到循环2开始
跳到循环1开始
差不多就这个样子吧。
大家如果发现为啥int 16h不能接收alt+方向键的原因,可以与我分享下,我在这就谢谢各位了。
编程语言:8086汇编中int 16h接收alt+方向键相关推荐
- 8086汇编中mov,add,sub语法
8086汇编中mov,add,sub语法 mov,add,sub三个都是两个操作数 几个必要的元素 1.数据 2.寄存器(指定一般寄存器) 3.段寄存器 4.内存单元 mov指令 mov 寄存器,数据 ...
- 复习8086汇编中的 CLI STI CLD STD指令
CLI 全称 Clear Interupt STI 全称 Set Interupt CLD 全称 Clear Director STD 全称 Set Director CLI和STI是用来屏蔽中断和恢 ...
- 8086汇编与c++编译器就内存方面的感想
8086汇编中可以手动分配栈内存,没有堆内存的概念,而c++编译器中栈是系统分配的,堆是手动分配的.
- 汇编中寄存器加[]的意思
一般说来,加方括号 [ ] 表示一种间接的取操作数方式,有点类似于C语言中的指针概念. 第一条指令 ADD AL ,[SI] 中,[SI] 表示寄存器间接寻址. 也就是说,与AL中内容相加的加数,不是 ...
- 图解在8086模拟器中运行汇编helloworld程序
汇编helloworld代码: org 100h; set video mode mov ax, 3 ; text mode 80x25, 16 colors, 8 pages (ah=0, al=3 ...
- c语言里10h代表什么,汇编中的10H中断int 10h详细说明
汇编中的10H中断是由BIOS对显示器和屏幕所提供的服务程序.使用int 10h服务程序时,必须先指定ah寄存器为以下显示服务编号之一,以指定需要调用的功用. 显示服务 (Video Service: ...
- 【8086汇编基础】05--常用函数库文件--emu8086.inc
8086汇编语言初学者教程(第5部分) 常用函数库 - emu8086.inc 通过引用一些常用函数,可以使你编程更加方便.在你的程序中使用其他文件中的函数的方法是INCLUDE后面接上你要引用的文件 ...
- linux8086汇编环境配置,LINUX下面进行8086汇编
LINUX下面进行8086汇编 我想问的是:LINUX下面使用什么编辑器来编辑汇编源代码?VIM? 编辑完毕之后使用什么来编译和链接? 链接完毕后如何运行? 这里举个例子 比如LINUX下面怎么写C程 ...
- c++ 模板类实现堆栈实验报告_编译原理——小型类C编译器的设计和实现(生成8086汇编代码)之1:问题定义以及总体功能...
前面花了两篇文章来介绍词法分析和语法分析,接下来才是比较有意思的部分--一个小型类C编译器的设计和实现(其实是编译原理的课程设计啦!~)我用的是python2.7.13+PyQt来做的...事实上,正 ...
- 8086 汇编指令手册查询(转)
8086 汇编指令手册查询,编语言是一种面向机器的语言.它能够利用计算机所在硬件性并能直接控制硬件,在微型计算机系统的开发应用和过程控制和特别受到重视. 一.数据传输指令 -------------- ...
最新文章
- 提高工作效率的 7 个 Vim 使用技巧!
- Python 自动化 - 浏览器chrome打开F12开发者工具自动Paused in debugger调试导致无法查看网站资源问题原因及解决方法,javascript反调试问题处理实例演示
- The LMAX disruptor Architecture--转载
- Jimu : .Net Core 分布式微服务框架介绍
- C语言 · 龟兔赛跑预测
- 手机使用三年后不卡顿的有哪些牌子?
- C++基础——C++风格的类型转换(static_cast、const_cast、dynamic_cast、reinterpret_cast)
- 用集合return多个值_Laravel + Nestedset 扩展:嵌套集合模型实现无限级分类
- 使用mysql 函数 IFNULL 解决某些字段为null
- 下一个韦神?广西桂林14岁初中生保送清华丘班,明年本硕博连读!
- 关于中文字体的设置说明(font:12px/1.5 tahoma,arial,\5b8b\4f53)
- Facebook账号注册步骤
- 海外有哪些免费的0元虚拟主机(免费空间或者免费虚拟主机)
- PCL中点云特征描述与提取精通级实例解析
- 有关html的英文参考文献,出版英文科技专著:纠结的参考文献
- Java中Set接口
- 字典树原理详解及其Python实现
- oracle hint 强制索引
- Java基础 DAY04
- GXOI/GZOI2019 逼死强迫症 题解
热门文章
- 多智能体一致性(Consensus)中的矩阵理论(Matrix Theory)
- 十三、Linux驱动之触摸屏驱动
- Windows注册表内容详解
- 马哥linux2018目录,2018-01-02 马哥Linux学习笔记—Linux系统基础使用入门
- 为什么你玩lol遇到的队友都是坑(适用于所有moba游戏)
- 小程序游戏年龄计算机,2018年小程序游戏排行榜,这十款游戏你玩过几个?
- 太极软件qn的代码_多版本QQ内置qn、qx模块
- mysql数据库重新命名
- 【常用配置】——WPS文字常用快捷键大全【史上最全面】转
- iTextSharp 显示中文字体