急求用汇编语言实现键盘中断代码

急求用汇编语言实现键盘中断代码,第1张

按一下L键显示一个红色的L,按ESC退出

================================以下为程序代码

assume cs:code

code segment

in al,60H

mov cs:switch,al

;-------将键盘控制器发送的扫描码保存到switch变量里

mov al, 20H

out 20H, al

;-------以上两条令中断控制器可以再次相应中断

iret

temp1 dw

temp2 dw

switch db

start: mov ax,0

mov ds,ax

mov bx,94+2

mov ax,[bx]

mov cs:temp1,ax

mov ax,code

mov [bx],ax

mov bx,94

mov ax,[bx]

mov cs:temp2,ax

mov word ptr [bx],0

;-------保存并设置新的 INT 9 中断入口

mov ax,0B800H

mov ds,ax

;-------显存段地址

mov bx,0

;-------写现存时的偏移地址

s:mov al,cs:switch

cmp al,01H

jz exit

;-------判断是否是ESC,如果是,退出

cmp al,26H

jnz s

;-------判断'L'键是否按下,如果不是,继续循环

p:mov byte ptr [bx],76

inc bx

mov byte ptr [bx],00001100B

inc bx

mov cs:switch,0

jmp s

;-------如果是'L', *** 作相应的显存,显示一个红色的'L'

exit:mov ax,0

mov ds,ax

mov bx,94+2

mov ax,cs:temp1

mov [bx],ax

mov bx,94

mov ax,cs:temp2

mov [bx],ax

;-------恢复原来的 INT 9 的中断入口

mov ax,4C00H

int 21H

code ends

end start

主要是出于效率方面的考量。中断处理程序需要在尽量短的时间内完成所需的必要处理,尽量减少对线程/程序流造成的影响,因此大部分情况下用汇编直接编写,跳过了通用编译过程中冗余的适配部分。

汇编语言是

汇编指令

集、

伪指令

集和使用它们

规则

的统称,使用具有一定

含义

符号

为助记符。由于汇编语言是完全依赖于硬件的,因此通过适当的

汇编程序

设计,能够充分发挥出硬件的潜力,产生高效率的运行

代码

不光是中断处理程序,有许多软件系统的

内核

(例如

*** 作系统内核

)都是用汇编语言编写的。

这个程序中断1个机器周期就回响应一次,所以基本无法正常工作,当然如果你将TMOD改变一下,使其工作在计数模式的话,TMOD=0x50,那么检测到P35上一个脉冲信号就会响应一次中断。RETI的返回地址是不确定的,取决于中断时候的执行地址,返回到中断响应当前执行语句的下一个语句处。

不知道你要显示几位,我写了个1位显示的。前提是共阴数码LED且一端已接地,由P1口控制。

ORG 0000H

LJMP START

ORG 0003H

LJMP INTT0

ORG 0600H

START: SETB EA

SETB EX0 ; 打开外部中断0

CLR IT0 ; 令中断0为电平触发

MOV @R0,#00H

DISPLAY: MOV DPTR,#TAB;给字形表的初地址

MOV A,R0; 将要显示的数给A

MOVC A,@A+DPTR ;在字形表中取数放到A

MOV P1,A; 假设是P1口输出要显示的数据把A放到P1中

SJMP DISPLAY ;循环显示等待中断

INTT0:INC @R0; ;中断中有按键着加1

RETI

TAB:DB 3FH,06H,5BH,4FH,66H ;字形表

DB 6DH,7DH,07H,7FH,6FH

DB 77H,7CH,39H,5EH,79H

END

第一步把0号中断向量设置成0000:0200h(0号中断发生时CS为0000 IP为0200h)

第三步把int0到int0end的代码复制到00200h中去了

注意到int0处的第一个指令是jmp short int0start

这条语句的汇编代码为0ebh(jmp short *** 作码) 02h(偏移量)

所以紧接着的db "my name is xiongbingxin" 的首地址安排在了0000(CS就是0000):0202h了

以上就是关于急求用汇编语言实现键盘中断代码全部的内容,包括:急求用汇编语言实现键盘中断代码、为什么现代计算机系统中还有中断处理程序是用汇编语言编写、求助大神!汇编语言,中断的问题,下面程序中断怎么响应的,最后的RETI又返回到哪里了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9354214.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存