已经知晓了8086汇编代码中,8255被初始化为81H,且其端口地址为0270h-0273h,请编写按键扫描子程序,实现识别按键转化为数值保存到AX,没有按键AX=-1。要求在子程序内对使用到的寄存器进行push和pop
时间: 2024-05-14 16:12:01 浏览: 15
以下是按键扫描的8086汇编代码:
```
;按键扫描子程序
;输入:无
;输出:AX中存储按键对应的数值,没有按键则为-1
;其他寄存器:AX、BX、CX、DX、SI、DI、BP、SP、DS、ES
KEY_SCAN PROC NEAR
PUSH AX ;保存寄存器
PUSH BX
PUSH CX
PUSH DX
MOV DX, 0270H ;设置8255端口地址
MOV AL, 81H ;初始化8255
OUT DX, AL
INC DX ;选择端口C
IN AL, DX ;读取端口C的状态
MOV BX, 000FH ;掩码,用于识别按键
MOV CX, 0000H ;计数器,用于判断是否有按键
MOV SI, 0001H ;按键对应的数值
MOV AX, -1 ;设置默认值
CMP AL, BL ;判断是否有按键
JE KEY_EXIT ;如果没有按键,跳转到退出
MOV CX, 0001H ;有按键,计数器加1
CMP AL, 7FH ;判断是否是第一个按键
JE KEY_7 ;如果是第一个按键,跳转到KEY_7
CMP AL, 3FH ;判断是否是第二个按键
JE KEY_3 ;如果是第二个按键,跳转到KEY_3
CMP AL, 1FH ;判断是否是第三个按键
JE KEY_1 ;如果是第三个按键,跳转到KEY_1
CMP AL, 0FH ;判断是否是第四个按键
JE KEY_0 ;如果是第四个按键,跳转到KEY_0
JMP KEY_EXIT ;如果不是任何一个按键,跳转到退出
KEY_7:
MOV AX, SI ;将按键对应的数值存储到AX中
JMP KEY_EXIT ;跳转到退出
KEY_3:
ADD SI, 2 ;按键对应的数值加2
MOV AX, SI ;将按键对应的数值存储到AX中
JMP KEY_EXIT ;跳转到退出
KEY_1:
ADD SI, 4 ;按键对应的数值加4
MOV AX, SI ;将按键对应的数值存储到AX中
JMP KEY_EXIT ;跳转到退出
KEY_0:
ADD SI, 6 ;按键对应的数值加6
MOV AX, SI ;将按键对应的数值存储到AX中
KEY_EXIT:
POP DX ;恢复寄存器
POP CX
POP BX
POP AX
RET ;返回
KEY_SCAN ENDP
```
在主程序中,可以通过调用KEY_SCAN子程序来实现按键扫描,代码如下:
```
.MODEL SMALL
.STACK 100H
.DATA
MSG DB 0DH, 0AH, 'Please press a key:', '$'
MSG_NUM DB 0DH, 0AH, 'The number you pressed is: $'
MSG_NONE DB 0DH, 0AH, 'You didn't press any key.', '$'
.CODE
MAIN PROC
MOV AX, @DATA ;初始化数据段寄存器
MOV DS, AX
MOV AH, 9 ;显示提示信息
MOV DX, OFFSET MSG
INT 21H
CALL KEY_SCAN ;调用按键扫描子程序
CMP AX, -1 ;判断是否有按键
JE NO_KEY ;如果没有按键,跳转到NO_KEY
MOV BL, AL ;保存按键对应的数值
MOV AH, 9 ;显示按键对应的数值
MOV DX, OFFSET MSG_NUM
INT 21H
MOV AH, 2 ;显示按键对应的数值
MOV DL, BL
ADD DL, 30H ;将数字转化为字符
INT 21H
JMP EXIT ;跳转到EXIT
NO_KEY:
MOV AH, 9 ;显示没有按键
MOV DX, OFFSET MSG_NONE
INT 21H
EXIT:
MOV AH, 4CH ;退出程序
INT 21H
MAIN ENDP
END MAIN
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.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)