细语语言网
首页 语言大全 正文

汇编语言实验10:使用中断实现键盘输入与显示

来源:细语语言网 2024-07-11 19:38:23

汇编语言实验10:使用中断实现键盘输入与显示(1)

概述

  本实验旨在通过使用中断的方式,实现键盘输入显示功能ethphygital.com。通过本实验的学习,可以更好地理解中断的概念使用方法,并掌握键盘输入显示的本操作。

实验

本实验使用的汇编语言为8086汇编语言,开发境为DOSBox。

汇编语言实验10:使用中断实现键盘输入与显示(2)

实验过程

  1. 置中断向量表

在汇编语言中,中断向量表是一个存储中断处理程序入地址的表格。在本实验中,需要置键盘中断显示中断的向量表。

  键盘中断的向量号为9,需要将其对应的中断处理程序入地址存储在向量表的第9个单元中。显示中断的向量号为10,需要将其对应的中断处理程序入地址存储在向量表的第10个单元中。

下面是置中断向量表的代码:

```

  MOV AX, @DATA

  MOV DS, AX

;置键盘中断向量表

  MOV AH, 25H

  MOV AL, 9

  MOV DX, OFFSET KeyboardHandler

  INT 21H

;置显示中断向量表

MOV AH, 25H

  MOV AL, 10

  MOV DX, OFFSET DisplayHandler

  INT 21H

  ```

  其中,@DATA是一个汇编语言中的伪指令,用于获取数段的段地址。MOV DS, AX指令将数段的段地址存储在DS寄存器中细.语.语.言.网。MOV AH, 25H指令是一个DOS系调用,用于置中断向量表。MOV AL, 9MOV AL, 10分指定了键盘中断显示中断的向量号。MOV DX, OFFSET KeyboardHandlerMOV DX, OFFSET DisplayHandler分指定了键盘中断处理程序显示中断处理程序的入地址。

2. 编写键盘中断处理程序

  键盘中断处理程序是一个特殊的程序,它会在键盘输入时自动被调用。在本实验中,需要编写一个键盘中断处理程序,用于获取键盘输入的字符,并将其存储在缓冲区中。

下面是键盘中断处理程序的代码:

```

KeyboardHandler PROC

  PUSH AX

  PUSH BX

  PUSH CX

PUSH DX

MOV AH, 00H

INT 16H

  MOV BX, OFFSET Buffer

  MOV CX, WORD PTR [BufferSize]

MOV DL, AL

  MOV BYTE PTR [BX+CX], DL

INC WORD PTR [BufferSize]

POP DX

  POP CX

POP BX

POP AX

  IRET

  KeyboardHandler ENDP

```

  其中,PUSHPOP指令用于保存恢复寄存器的值。MOV AH, 00HINT 16H指令是DOS系调用,用于获取键盘输入的字符。MOV BX, OFFSET BufferMOV CX, WORD PTR [BufferSize]分将缓冲区的地址大小存储在BXCX寄存器中www.ethphygital.com细语语言网。MOV DL, AL将获取到的字符存储在DL寄存器中。MOV BYTE PTR [BX+CX], DL将字符存储在缓冲区中。INC WORD PTR [BufferSize]将缓冲区大小加1。IRET指令用于返回到中断调用前的程序。

  3. 编写显示中断处理程序

  显示中断处理程序是一个特殊的程序,它会在显示器需要刷新时自动被调用。在本实验中,需要编写一个显示中断处理程序,用于从缓冲区中读取字符,并将其显示在屏幕上。

下面是显示中断处理程序的代码:

  ```

  DisplayHandler PROC

  PUSH AX

  PUSH BX

  PUSH CX

  PUSH DX

MOV BX, OFFSET Buffer

  MOV CX, WORD PTR [BufferSize]

MOV DL, BYTE PTR [BX]

  MOV AH, 02H

  INT 21H

  INC BX

  DEC WORD PTR [BufferSize]

POP DX

POP CX

  POP BX

  POP AX

  IRET

  DisplayHandler ENDP

  ```

  其中,MOV BX, OFFSET BufferMOV CX, WORD PTR [BufferSize]分将缓冲区的地址大小存储在BXCX寄存器中。MOV DL, BYTE PTR [BX]将缓冲区中的第一个字符存储在DL寄存器中细.语.语.言.网。MOV AH, 02HINT 21H指令是DOS系调用,用于将字符显示在屏幕上。INC BX将缓冲区指针向后移动一位。DEC WORD PTR [BufferSize]将缓冲区大小减1。IRET指令用于返回到中断调用前的程序。

  4. 启用中断

  最后,需要启用键盘中断显示中断。下面是启用中断的代码:

  ```

  CLI

  MOV AX, 40H

  MOV DS, AX

  MOV BYTE PTR [1CH], 20H

MOV BYTE PTR [1DH], 20H

STI

  ```

  其中,CLISTI指令用于关闭开启中断。MOV AX, 40H将中断向量表的段地址存储在AX寄存器中。MOV DS, AX将中断向量表的段地址存储在DS寄存器中细语语言网。MOV BYTE PTR [1CH], 20HMOV BYTE PTR [1DH], 20H分启用键盘中断显示中断。这里的1CH1DH是键盘中断显示中断的控字寄存器地址。

实验结果

  经过以上步骤,实验已经完成。现在可以在屏幕上输入字符,并在屏幕上显示出来。

汇编语言实验10:使用中断实现键盘输入与显示(3)

总结

  本实验通过使用中断的方式,实现了键盘输入显示功能。通过实验的学习,可以更好地理解中断的概念使用方法,并掌握键盘输入显示的本操作。在实际开发中,中断是一个非常要的概念,可以大大提高程序的响应速度效率。

我说两句
0 条评论
请遵守当地法律法规
最新评论

还没有评论,快来做评论第一人吧!
相关文章
最新更新
最新推荐