8086实现键盘选择菜单功能
时间: 2023-09-01 16:11:13 浏览: 43
实现键盘选择菜单功能需要用到8086的中断处理程序。具体步骤如下:
1. 设置键盘中断向量,可以使用INT 9H指令设置键盘中断向量为09H,即INT 9H。
2. 编写中断处理程序,在中断处理程序中判断键盘输入,如果是菜单选项之一,则执行相应的操作;如果不是,忽略该输入。
3. 在主程序中,显示菜单选项并循环等待用户输入。如果用户输入了非法字符,则提示用户重新输入;如果用户输入合法字符,则跳转到相应的操作。
下面是一个简单的示例代码:
```
.MODEL SMALL
.STACK 100H
.DATA
menu DB '1. Option 1', 0AH, '2. Option 2', 0AH, '3. Option 3', 0AH, '4. Exit', 0AH, 'Select an option: $'
invalidMsg DB 0AH, 'Invalid input, please try again.', 0DH, 0AH, '$'
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
; 设置键盘中断向量
MOV AH, 25H
MOV AL, 09H
MOV DX, OFFSET KeyboardHandler
INT 21H
; 显示菜单选项
MOV AH, 09H
MOV DX, OFFSET menu
INT 21H
MenuLoop:
; 等待用户输入
MOV AH, 01H
INT 21H
; 判断用户输入
CMP AL, '1'
JE Option1
CMP AL, '2'
JE Option2
CMP AL, '3'
JE Option3
CMP AL, '4'
JE Exit
JMP InvalidInput
Option1:
; 执行操作1
JMP MenuLoop
Option2:
; 执行操作2
JMP MenuLoop
Option3:
; 执行操作3
JMP MenuLoop
InvalidInput:
; 显示无效输入提示
MOV AH, 09H
MOV DX, OFFSET invalidMsg
INT 21H
JMP MenuLoop
Exit:
MOV AH, 4CH
INT 21H
; 中断处理程序
KeyboardHandler PROC
PUSH AX
PUSH BX
; 读取键盘输入
IN AL, 60H
; 判断是否是菜单选项之一
CMP AL, '1'
JE Option1
CMP AL, '2'
JE Option2
CMP AL, '3'
JE Option3
CMP AL, '4'
JE ExitHandler
; 不是菜单选项,直接返回
JMP ExitHandler
Option1:
; 执行操作1
JMP ExitHandler
Option2:
; 执行操作2
JMP ExitHandler
Option3:
; 执行操作3
JMP ExitHandler
ExitHandler:
; 结束中断处理程序
MOV AL, 20H
OUT 20H, AL
POP BX
POP AX
IRET
KeyboardHandler ENDP
END MAIN
```
上述示例代码中,中断处理程序采用了INT 20H指令结束中断处理程序的方式,而不是使用IRET指令。这是因为在8086中,INT 9H中断处理程序被调用时,会将标志寄存器中的IF(中断允许标志)复位,IRET指令会恢复标志寄存器的值,可能会导致中断处理程序被重入。因此,在中断处理程序中使用INT 20H指令结束中断处理程序是比较安全的做法。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)