按动单脉冲按钮,液晶屏开始显示数字,第一次显示“1”, 每按一次加1,第9次显示“9”,循环反复。按ESC退出程序返回DOS。使用汇编语言
时间: 2024-02-22 18:57:04 浏览: 32
好的,这是一个涉及到8259芯片中断的程序。下面是一个简单的汇编代码实现:
```assembly
.MODEL SMALL
.STACK 100H
.DATA
CNT DB 1
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV AL, 0B6H ; 初始化8259
OUT 020H, AL
MOV AL, 004H
OUT 021H, AL
MOV AL, 001H
OUT 021H, AL
MOV AL, 0FFH ; 禁止所有中断
OUT 021H, AL
MOV AL, 0FBH
OUT 021H, AL
MOV AL, 0F9H ; 开启时钟中断
OUT 021H, AL
MOV AH, 0 ; 清空计数器
MOV AL, CNT
MOV [AL], AH
START:
MOV AH, 0 ; 等待中断
INT 1CH
CMP AH, 0DH ; 判断是否为时钟中断
JNE START
MOV AH, 0 ; 获取当前计数器的值
MOV AL, CNT
MOV BL, [AL]
ADD BL, 1 ; 计数器加1
CMP BL, 9 ; 判断是否等于9
JLE DISPLAY
MOV BL, 1 ; 如果等于9,重新从1开始计数
DISPLAY:
MOV AH, 2 ; 显示数字
MOV DL, BL
ADD DL, 30H
INT 21H
MOV AH, 0 ; 存储计数器的值
MOV AL, CNT
MOV [AL], BL
JMP START ; 重新等待中断
EXIT:
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
```
在这个程序中,我们初始化了8259芯片,并开启了时钟中断。然后我们等待中断的发生,如果发生的是时钟中断,就获取当前计数器的值并加1,然后判断是否等于9,如果小于等于9,则显示数字并存储计数器的值。如果等于9,则重新从1开始计数。
按下ESC键时,程序将退出并返回DOS。