1.BIOS中断

我们可以为所有中断类型自定义中断处理过程,包括内部中断、硬件中断和软中断。

BIOS中断,又称BIOS功能调用,主要是为了方便地使用最基本的硬件访问功能。通常,为了区分针对同一硬件的不同功能,使用寄存器AH来指定具体的功能编号。

比如说,以下的指令用于从键盘读取一个按键:

mov ah,0x00     ;0功能号对应从键盘读字符
    int 0x16        ;键盘服务, int 0x16; 中断返回时,字符的ASCII在AL中

需要说明的是,BIOS可能会为一些简单地外围设备提供初始化代码和功能调用代码,并填写中断向量表,但是有一些BIOS中断是由外部设备接口自己建立的。

首先,每个外部设备接口,包括各种板卡,如网卡、显卡、键盘接口电路、硬件控制器等,都有自己的只读存储器(ROM),类似于BIOS芯片,这些ROM中提供了它们自己的功能调用例程,以及本设备的初始化代码。按照规范,前两个单元的内容是0x55和0xAA,第三个单元是本ROM中的代码长度(以512字节为单位);从第四个单元开始,就是实际的ROM代码。

其次,我们知道,从内存物理地址A0000开始,到FFFFF结束,有相当一部分空间是留给外围设备的。如果设备存在,那么它自带的ROM会映射到分配给它的地址范围内。

在计算机启动期间,BIOS会以2KB为单位搜索内存地址C0000~E0000之间的区域。当它发现某个区域的前两个字节是0x55和0xAA时,那意味着该区域有ROM代码的存在,是有效的。接着,它对该区域做累加和检查,看结果是否和第三个单元相符。如果相符,就从第四个单元进入。这时候,处理器执行的是硬件自带的程序指令,这些指令初始化外部设备的相关寄存器和工作状态。最后,填写相关的中断向量表,使其指向自带的中断处理过程。

2.键盘读字符并显示的实验

(1)代码清单

;代码清单9-2;文件名:c09_2.asm;文件说明:用于演示BIOS中断的用户程序 ;创建日期:2012-3-28 20:35;===============================================================================
SECTION header vstart=0                     ;定义用户程序头部段 program_length  dd program_end          ;程序总长度[0x00];用户程序入口点code_entry      dw start                ;偏移地址[0x04]dd section.code.start   ;段地址[0x06]
    realloc_tbl_len dw (header_end-realloc_begin)/4;段重定位表项个数[0x0a]realloc_begin:;段重定位表           code_segment    dd section.code.start   ;[0x0c]data_segment    dd section.data.start   ;[0x14]stack_segment   dd section.stack.start  ;[0x1c]header_end:                ;===============================================================================
SECTION code align=16 vstart=0           ;定义代码段(16字节对齐)
start:mov ax,[stack_segment]mov ss,axmov sp,ss_pointermov ax,[data_segment]mov ds,axmov cx,msg_end-messagemov bx,message.putc:mov ah,0x0emov al,[bx]int 0x10inc bxloop .putc.reps:mov ah,0x00int 0x16mov ah,0x0emov bl,0x07int 0x10jmp .reps;===============================================================================
SECTION data align=16 vstart=0message       db 'Hello, friend!',0x0d,0x0adb 'This simple procedure used to demonstrate 'db 'the BIOS interrupt.',0x0d,0x0adb 'Please press the keys on the keyboard ->'msg_end:;===============================================================================
SECTION stack align=16 vstart=0resb 256
ss_pointer:;===============================================================================
SECTION program_trail
program_end:

(2)使用BIOS中断向屏幕写字符

关于代码,头部的部分和SS,DS的初始化自然不用多说,我们已经很熟悉了。

mov cx,msg_end-messagemov bx,message.putc:mov ah,0x0emov al,[bx]int 0x10inc bxloop .putc

首先,把重复次数传入CX,然后让BX指向要显示的信息的首地址。

接下来,我们要利用0x10号中断的0x0e号功能。

BIOS中断显示服务(Video Service——INT 10H)

功能描述:在Teletype模式下显示字符,具体说就是在屏幕的光标处写一个字符,并推进光标的位置。
入口参数:

AH=0EH
AL=字符
BH=页码
BL=前景色(图形模式);注意,仅在图形模式下,设置BL才会改变前景色;在文本模式下,这个参数不起作用(我们的实验工作在文本模式下)
出口参数:无

(3)使用BIOS中断从键盘读取字符

.reps:mov ah,0x00int 0x16mov ah,0x0emov bl,0x07   ;我觉得这句可以不要int 0x10jmp .reps

前面已经说了,0x16号中断的0x00号子功能是从键盘读字符。

然后,再次利用0x10号中断的0x0e号功能,把我们从键盘输入的字符显示出来。

BIOS中断键盘服务(Keyboard Service——INT 16H)
功能描述:从键盘读入字符
入口参数:

AH=00H——读键盘
AH=10H——读扩展键盘(可根据0000:0496H单元的内容判断:扩展键盘是否有效 )
出口参数:

AH=键盘的扫描码
AL=字符的ASCII码

(4)实验结果截图

上图就是启动Bochs后,再按C之后的画面。接下来,我们就可以尝试按键,看看会发生什么

下一次,我们就开始探索32位的x86了,你是否很期待呢?

8086键盘输入实验——《x86汇编语言:从实模式到保护模式》读书笔记07相关推荐

  1. 硬盘和显卡的访问与控制(一)——《x86汇编语言:从实模式到保护模式》读书笔记01

    本文是<x86汇编语言:从实模式到保护模式>(电子工业出版社)的读书实验笔记. 这篇文章我们先不分析代码,而是说一下在Bochs环境下如何看到实验结果. 需要的源码文件 第一个文件是加载程 ...

  2. 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16...

    一.Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式. (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 ...

  3. 程序的加载和执行(六)——《x86汇编语言:从实模式到保护模式》读书笔记26

    程序的加载和执行(六)--<x86汇编语言:从实模式到保护模式>读书笔记26 通过本文能学到什么? NASM的条件汇编 用NASM编译的时候,通过命令行选项定义宏 Makefile的条件语 ...

  4. 程序的加载和执行(一)——《x86汇编语言:从实模式到保护模式》读书笔记21

    程序的加载和执行(一) 本文及之后的几篇博文是原书第13章的学习笔记. 本章主要是学习一个例子,对应的代码分为3个文件: ;代码清单13-1;文件名:c13_mbr.asm;文件说明:硬盘主引导扇区代 ...

  5. 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16

    一.Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式. (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 ...

  6. x86汇编语言从实模式百度云_x86汇编语言:从实模式到保护模式

    x86汇编语言:从实模式到保护模式2013年1月由电子工业出版社出版发行,总共6000行的源代码,全方位地向读者展现汇编语言程序设计之美.尽管汇编语言也是一种计算机语言,但却是与众不同的,与它的同类们 ...

  7. 任务切换——《x86汇编语言:从实模式到保护模式》读书笔记38

    任务切换--<x86汇编语言:从实模式到保护模式>读书笔记38 本文及后面的几篇博文是原书第15章的学习笔记. 本章依然使用第13章的主引导程序. 1. 协同式多任务与抢占式多任务 有两种 ...

  8. 任务切换的方法——《x86汇编语言:从实模式到保护模式》读书笔记37

    任务切换的方法--<x86汇编语言:从实模式到保护模式>读书笔记37 1. 中断门和陷阱门 在实模式下,内存最低端的1M是中断向量表,保存着256个中断处理过程的段地址和偏移.当中断发生时 ...

  9. 任务和特权级保护(四)——《x86汇编语言:从实模式到保护模式》读书笔记35

    任务和特权级保护(四)--<x86汇编语言:从实模式到保护模式>读书笔记35 7. 正式进入用户程序的局部空间 67 mov ebx,message_1 68 call far [fs:P ...

最新文章

  1. Auty 2017——WebMonitor接口线上检测平台
  2. 经典问题——进程和线程区别
  3. python中噪音是什么意思_Python数据噪音
  4. Java任何一个元素都可以转换成String类型
  5. java反射的优化_请问Java反射的性能为什么比直接调用慢一个数量级左右?
  6. sql相同顺序法和一次封锁法_率土之滨追击战法攻略
  7. 【Vegas2008】7月19日-凉粉的做法
  8. 计算机画图软件教学教案,画图软件教学设计
  9. asp解决“另一个SqlParameterCollection中已包含SqlParameter”的方法
  10. 分析了获得家庭摇号新能源指标的数据后,我发现了一个秘密
  11. 使用C#开发Excel插件
  12. SofaRpc源码学习篇-netty以及跟dubbo骚操作,负载均衡
  13. IDEA修改中文字体为微软雅黑
  14. python的Pmw库的安装
  15. 幅相曲线渐近线_开环幅相曲线绘制.ppt
  16. 服务器omv系统,开源NAS系统OpenMediaVault安装与体验
  17. freemarker生成word文档无法用office打开问题
  18. java怎么清空paint所画图案,[求助]怎么样消除之前画过的轨迹
  19. 如何快速优雅地导入第三方Android项目
  20. 安装语言包(LANGUAGE PACKAGE)

热门文章

  1. list中的linkedlist的用法
  2. nyoj 710 外星人的供给站
  3. 浮点数在内存中的存储方式
  4. linux下增加磁盘改变指定文件路径分区挂载点和迁移数据
  5. 为什么在Python里推荐使用多进程而不是多线程?(为什么python多线程无法增加CPU使用率?)...
  6. hihocoder offer收割编程练习赛12 B 一面砖墙
  7. BZOJ2837 : 小强的形状
  8. 新闻添加html页面
  9. 编程方法学4:计算机科学发展简史
  10. YOLO v3解析与实现