按一下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又返回到哪里了等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)