当前位置:鱼C工作室 >汇编语言 > 查看文章

外中断02 – 零基础入门学习汇编语言70

第十五章:外中断02

 

让编程改变世界

Change the world by program


 

小甲鱼和大家谈谈心

 

一个帖子引发小甲鱼的反省!

猫姐曾经说过,步子别迈太大,容易扯着蛋!

结果还真蛋疼了……

 

因此,小甲鱼要学会淡定面对,不能忘记当初的宗旨!做视频也好、做网站也好,对得住大家才对得住自己的良心!

最后:希望大家继续支持鱼C、支持小甲鱼,看到大家都能坦诚相待,很开心,很幸福!

 

编写int 9 中断例程

 

复习一下前边的内容中,我们可以总结出键盘输入的处理过程:

(1)键盘产生扫描码;

(2)扫描码送入60h 端口;

(3)一旦侦测到60h端口有动静,引发9 号中断;

(4)CPU执行int 9 中断例程处理键盘输入。

以上的过程,前三步都由硬件系统自动完成。我们能够改变的只有第四步,修改int 9 终端程序。

但是,在这门课程中,我们不准备完整地编写一个键盘中断的处理程序,因为要涉及到一些硬件细节,而这些内容脱离了我们的内容主线。

插入语:如果有兴趣想更为深入的学习汇编语言,探究汇编语言的奥妙,可以关注小甲鱼今后推出的《The Art of Assembly Language》。

 

但是,我们却还要编写新的键盘中断处理程序,来进行一些特殊的工作,那么这些硬件细节如何处理呢?

如果单纯要完成这点还是相对比较简单的,因为BIOS 提供的int 9中断例程已经对这些硬件细节进行了处理。

我们只要在自己编写的中断例程中调用BIOS 的int 9中断例程就可以了。

 

任务演示:在屏幕中间依次显示 “a”~“z” ,并可以让人看清。在显示的过程中,按下Esc键后,改变显示的颜色。

 

我们先来看一下如何依次显示“a”~“z”:

assume cs:code
	code segment
	start:    
		mov ax,0b800h
		mov es,ax
		mov ah,'a'
 
 	s:   
		mov es:[160*12+40*2],ah
		inc ah
		cmp ah,'z'
		jna s
 
 		mov ax,4c00h
		int 21h
 
 	code ends
	end start

 

我们发觉,因为一个字母刚显示到屏幕上,CPU执行几条指令后,就又变成了另一个字母,字母之间切换得太快,因此我们无法看清。

理想状况是:我们应该在每显示一个字母后,延时一段时间,让人看清后,再显示下一个字母。

 

那么如何延时呢?

不如……我们让CPU 执行一段时间的空循环。有时候让它做点无用功哈~

 

请看源代码并试图分析作者的做法:相关代码下载

 

现在显示“a”~“z”的任务我们基本完成了,并做到可以让人看清,虽然做法有些无耻……

 

那么接下来将进一步来实现:按下 Esc 键后,改变显示的颜色!怎么办呢?

键盘输入到达60h 端口后,就会引发 9号中断,CPU 则转去执行int 9中断例程。

 

我们可以编写int 9中断例程,功能如下:

(1)从60h端口读出键盘的输入;

(2)调用BIOS 的int 9 中断例程,处理其他硬件细节;

(3)判断是否为Esc的扫描码,如果是,改 变显示的颜色后返回;如果不是则直接返回。

 

分页阅读: 1 2 下一页
为您推荐

报歉!评论已关闭.