看8086汇编 书上的一个小作业 键盘中断例程编写

本文介绍了一个使用汇编语言编写的程序,该程序能够在屏幕上依次显示字母a至z,并通过按下Esc键改变显示颜色。程序还包含了键盘中断处理,以响应用户的输入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

assume cs:code

;栈
stack segment
	db 128 dup (0)
stack ends

;store data
data segment
	dw 0,0
data ends

;
code segment
start:	
	mov ax,stack
	mov ss,ax
	mov sp,128		;ss:sp

	mov ax,data
	mov ds,ax		;ds
	
	mov ax,0
	mov es,ax		;es


	;将键盘原来的中断例程地址复制到ds:[0]中
	push es:[9*4]
	pop ds:[0]
	push es:[9*4+2]
	pop ds:[2]		;

	;将新的int9地址写入中断向量表
	mov word ptr es:[9*4],offset int9
	mov es:[9*4+2],cs	;int9


	;屏幕依次输出a---z
	mov ax,0b800h
	mov es,ax
	mov ah,'a'
s:	mov es:[160*12+40*2],ah
	call delay	;delay用来延时  也就是空循环
	inc ah
	cmp ah,'z'
	jna s
	
	mov ax,0
	mov es,ax

	;恢复中断向量表
	push ds:[0]
	pop es:[9*4]
	push ds:[2]
	pop es:[9*4+2]

	;exit
	mov ax,4c00h
	int 21h

;延时
delay:	push ax		;因为用到dx,ax 先将他们保存到栈中
	push dx
	mov dx,1000h
	mov ax,0
s1:	sub ax,1
	sbb dx,0
	cmp ax,0
	jne s1
	cmp dx,0
	jne s1
	pop dx
	pop ax
	ret	;call---ret 是一对
;------------------------------
;int9

int9:			;我们新编写的中断例程
	push ax
	push bx
	push es		;保存环境

	in al,60	;从键盘读取一个字符
	pushf
	pushf
	pop bx
	and bh,11111100b
	push bx
	popf
	call dword ptr ds:[0];调用原来的int9

	cmp al,1	;1表示Esc
	jne int9ret

	mov ax,0b800h
	mov es,ax
	inc byte ptr es:[160*12+40*2+1]		;变色

int9ret:		;恢复环境颜色
	pop es
	pop bx
	pop ax
	iret




code ends
end start




想要掌握如何利用TASM5.0集成环境编写一个基于键盘中断汇编语言打字计时程序,关键在于理解键盘中断的处理机制以及如何在TASM中设置和使用中断向量。这本《汇编语言课程设计:打字计时程序》详细解释了这一过程,适合你深入学习和实践。 参考资源链接:[汇编语言课程设计:打字计时程序](https://wenku.youkuaiyun.com/doc/647fd0f4543f8444883c336a) 在TASM5.0环境下,首先需要编写主模块程序,用于初始化中断向量,并设置键盘中断服务例程。键盘中断服务例程(例如kbint)是关键部分,它负责响应键盘中断,读取扫描码,将其转换为ASCII码,并更新计时信息。主程序通过调用子模块来进行数据的显示和计时。 具体来说,你需要熟悉8086 CPU的中断向量表,了解如何使用INT指令模拟键盘中断,以及如何使用DOS中断(如INT 16h)来获取按键状态。此外,理解缓冲区的使用和字符在内存中的存储方式对于程序的稳定性至关重要。在TASM5.0中,可以使用其内置的调试工具来逐步执行程序,观察内存和寄存器的变化,以便于调试和验证程序的正确性。 当你完成了程序的编写和调试,应该能够得到一个能够准确计时并且响应用户输入的打字练习程序。这样的经验不仅有助于提高你的汇编语言能力,还能够加深你对计算机中断机制的理解。如果你希望更全面地掌握汇编语言编程,以及计算机硬件和软件的交互,这本书将是一个非常好的学习资源。 参考资源链接:[汇编语言课程设计:打字计时程序](https://wenku.youkuaiyun.com/doc/647fd0f4543f8444883c336a)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值