汇编题目:按A键,当松开的时显示字母A

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

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

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

assume cs:code
data segment
db 100 dup(0)

data ends

code segment
start:
    mov ax,0
    mov es,ax
    mov di,200h
    mov ds,ax
    mov si,[9*4]
    mov cx,4
    cld
    rep movsb

    mov ax,offset int9
    mov ds:[9*4],ax
    mov ax,cs
    mov ds:[9*4+2],ax

    call breakPoint

    ;还原int9中断向量表
    mov ax,0
    mov ds,ax
    mov si,200h
    mov di,9*4
    mov cx,4
    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,0

    push cx
    mov cx,2000

    in al,60h
    cmp al,2eh+80h
    jne int9ret
    mov ah,‘B‘
    s0:
    mov byte ptr es:[bx],ah
    add bx,2
    loop s0

    int9ret:
    int 80h
    pop cx
    pop bx
    pop es
    pop ax
    iret

breakPoint:
    push ax
    pushf
    pop ax
    or ah,3        ;这里可以增加判断,例:当cx为100的时候再设置断点
    push ax
    popf
    pop ax
    ret

code ends
end start

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

时间: 2024-08-26 15:50:10

汇编题目:按A键,当松开的时显示字母A的相关文章

mysql主键设置成auto_increment时,进行并发性能测试出现主键重复Duplicate entry 'xxx' for key 'PRIMARY'

mysql主键设置成auto_increment时,进行并发性能测试出现主键重复Duplicate entry 'xxx' for key 'PRIMARY' 解决方法: 在my.cnf的[mysqld]片段中添加设置innodb_autoinc_lock_mode=0 同时注意调大jdbc的活跃链接数,如设置 jdbc.maxActive=300,因为设置innodb_autoinc_lock_mode=0可能导致链接过多. 注意,这种方式只需要在并发性能测试时设置,因为这种方式在插入记录时需

键值是数字时的处理方式

同事碰到接口返回为数值的键值,想处理成自己想要的键值的对象,于是写了个方法来处理类似的数据 '{"1":"凭订单详情页的入园凭证(入园辅助码或二维码)入园","2":"凭下单时预留的身份证入园","3":""}'  处理成自己想要的键值的对象 const content = '{"1":"凭订单详情页的入园凭证(入园辅助码或二维码)入园",&quo

汇编题目:在DOS下,按F1键后改变当前屏幕的显示颜色

我们都知道int9中断是键盘的按键中断程序,按下键盘触发int9中断,不懂int9中断的请自己去百度查查说明和用法 利用中断任务安装一个新的int 9中断例程,功能:在DOS下,按F1键后改变当前屏幕的显示颜色,其他的键照常处理. ;任务:安装一个新的int 9中断例程, ;功能:在DOS下,按F1键后改变当前屏幕的显示颜色,其他的键照常处理. assume cs:code stack segment db 30h dup(0) stack ends data segment db 20h du

iOS 键盘处理(改变键盘为完成键),UITextField键盘显示隐藏,弹出,回弹

很多时候用到UITextField时,处理键盘是一个很棘手的问题. 问题一:如何隐藏键盘? 方案1.改变键盘右下角的换行(enter)键为完成键,后实现代理方法键盘自动回弹 keyBoardControll.gif UITextField *textField = [[UITextField alloc]initWithFrame:CGRectMake(100, 300, 200, 40)]; [self.view addSubview:textField]; textField.delegat

ubuntu 新建用户后 不能使用TAB键、上下键,命令行不显示当前路径的解决

因默认ubuntu创建的普通帐号,默认shell为/bin/sh,而这不支持tab等键的,所以将「指定用户」帐号的shell改为/bin/bash就可以了. 1.查看当前的shell:# echo $SHELL/bin/sh2.修改shell为/bin/bash:# usermod -s /bin/bash 用户名

[转载]C#中使用ADO.NET连接SQL Server数据库,自动增长字段用作主键,处理事务时的基本方法

问题描述: 假设在数据库中存在以下两张数据表: User表,存放用户的基本信息,基本结构如下所示:   类型 说明 ID_User int 自动增长字段,用作该表的主键 UserName varchar   UserDepart表,存放用户所拥有的部门(我们假设一个用户拥有多个部门,虽然听起来有点别扭,此处仅作示例,可以理解为一个用户拥有多个职位等等),该表的基本结构如下所示:   类型 说明 ID_UserDepart int 自动增长字段,用作该表的主键 ID_User int 用户编号 I

Mysql 截断表时由于外键约束无法完成时的处理方法

而在MySQL?5.5中,存在外键约束的InnoDB表,在任何情况下都不允许进行Truncate操作,并报错(Error 1701),如果朋友你实在是有点强迫症,那么可以用下面的方式拐着弯解决: 导出数据库数据位.sql文件. 随便用个文本编辑器打开文件. 手动编辑一下.sql文件,怎样编辑相信你看了下面这个图就知道了 4.再将编辑好的.sql文件重新导入就OK了.

sqlSever 存储过程 中 创建 事务(增删改操作),唯一的主键自动生成 (格式:自定义字母+时间+五位数字,例如:S2014103010001)

描叙: 1.使用带事务的sql 存储过程. 2.添加数据时,自动创建唯一的主键 格式 [一个字母]+[时间格式]+[一个五位数] 3.使用游标,通过另一个表的多条数据,来对当前表数据的添加,并自动生产 唯一主键 格式如上. 4.使用场景:增加主键唯一的主表数据的同时,从另一个表读取多条数据然后添加到子表中,并且生产的主键唯一. 5.使用环境: sqlserver. USE [MicroMall]GO/****** Object: StoredProcedure [dbo].[SaleOrderI

mysql执行带外键的sql文件时出现mysql ERROR 1215 (HY000): Cannot add foreign key constraint的解决

ERROR 1215 (HY000): Cannot add foreign key constraint 最近在建表时遇到了这个错误,然后找了下找到了解决办法,记录下: 本来是要建两张表: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 create table department( id int, name varchar(20) ); create table employee( id int primary key auto_increment, name varch