第9章 bios和dos功能调用_第1页
第9章 bios和dos功能调用_第2页
第9章 bios和dos功能调用_第3页
第9章 bios和dos功能调用_第4页
第9章 bios和dos功能调用_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第九章BIOS和DOS中断用户编程原则①尽可能使用DOS的系统功能调用,提高程序可移植性。②在DOS功能不能实现的情况下,考虑用BIOS功能调用。(比如读打印机状态:BIOS中断17H的功能2)③在DOS和BIOS的中断子程序不能解决问题时,才使用IN/OUT指令直接控制硬件。(比如声音控制)中断:使cpu中止正在执行的程序而转去处理特殊事件的操作。中断源:引起中断的事件。8086/8088CPU最多有256个中断源,这些中断源根据来自CPU的内部还是外部分为两大类:内部中断源和外部中断源。外中断(硬中断):外设的I/O请求——可屏蔽中断INTR

电源掉电/奇偶错——非屏蔽中断NMI所谓不可屏蔽中断是指该中断请求不能通过软件的方式对其屏蔽,一旦出现NMI中断请求,CPU必须立即响应。内中断(软中断):

INT指令/CPU错(除法错、溢出)/

为调试程序设置的中断(t、g命令)中断传送方式非屏蔽中断请求

中断逻辑INTnINTO除法错单步

n401CPU

2NMI8259A可编程中断控制器(PIC)IR0系统定时器IR1键盘IR2彩色/图形接口IR3保留IR4串行通讯口IR5保留IR6软盘IR7打印机INTR08090A0B0C0D0E0F80x86中断源(图中引线端标示的数字为分配的终端类型号N(0-255)):8259A外部有28个引脚。有9片8259A可构成64级中断源。

类型0的(IP)

类型0的(CS)

类型1的(IP)

类型1的(CS)

类型N的(IP)

类型N的(CS)

类型255的(IP)

类型255的(CS)0000000004

4*N003FC中断向量—中断处理程序的入口地址(段址):(偏址)中断向量表:各类型(0~0FFH)中断处理程序的入口地址表设置CPU中断允许位:

FLAGS中的IF位=1允许中断(STI开中断)

=0禁止中断(CLI关中断)设置中断屏蔽位:

中断屏蔽寄存器的中断屏蔽位=0允许I/O设备请求中断

=1禁止I/O设备请求中断

76543210定时器键盘打印机中断屏蔽寄存器21H8259A中断的条件(从外设发出中断请求到CPU响应中断,有两个控制条件起决定性作用):INAL,21HANDAL,0FDH

OUT21H,ALCPU中断过程:(1)取中断类型:CPU←typeN(2)保护现场:FLAGS、CS、IP入栈(3)IF=0(关中断),TF=0(禁止单步中断)(4)计算中断向量地址,取中断向量:(4×N)→IP

(4×N+2)→CS(5)转中断处理程序以上步骤都由硬件完成。采用向量中断的方法,大大加快了中断处理的速度。因为计算机可直接通过中断向量表转向相应的处理程序,而不需要CPU去逐个检测和确定中断原因。

int指令格式:intn

;n为中断类型码。功能:是引发n号中断过程。CPU执行intn过程如下:(1)取中断类型码n;(2)标志寄存器入栈,IF=0,TF=0;(3)CS、IP入栈;(4)(IP)=(n*4),(CS)=(n*4+2)。从此处转去执行n号中断的中断处理程序。IRET指令可见,int

指令的最终功能和call指令相似,都是调用一段程序。一般情况下,系统将一些具有一定功能的子程序,以中断处理程序的方式提供给应用程序调用。我们在编程的时候,可以用int指令调用这些子程序,而在子程序中安排iret指令返回。我们将这样的中断处理子程序简称为中断例程。Iret指令的执行过程相当于:

popippopcspopflagsBIOS和DOS中断例程的安装过程(1)开机后,CPU一加电,初始化(CS)=0FFFFH,(IP)=0,自动从FFFF:0单元开始执行程序。FFFF:0处有一条转跳指令,CPU执行该指令后,转去执行BIOS中的硬件系统检测和初始化程序。(2)初始化程序将建立BIOS所支持的中断向量,即将BIOS提供的中断例程的入口地址登记在中断向量表中。(3)硬件系统检测和初始化完成后,调用int19h进行操作系统的引导。从此将计算机交由DOS操作系统控制。(4)DOS启动后,除完成其它工作外,还将它所提供的中断例程装入内存,并建立相应的中断向量。中断例程调用方法设置入口参数在AH设置功能号m执行中断指令INTN分析、应用出口参数一般来说,中断例程中包含多个子程序,内部用AH传递子程序的编号来决定执行哪个子程序。例:DOS功能调用:int21h中断例程是DOS提供的中断例程,其中包含了DOS提供给程序员在编程时调用的子程序。;----------键盘输入一个字符 MOV AH,01 ;设置功能号:键盘输入

INT 21H

;DOS功能调用 MOVCHAR,AL ;返回参数:(AL)=字符ASCII码;-----------------显示输出一个字符 MOVDL,’A’ ;调用参数:待输出字符的ASCII码 MOV AH,02

;DOS功能号:显示输出

INT 21H

;DOS调用

中断例程调用举例movah,4ch;调用第21h号中断例程的4ch号子程序

moval,0;提供返回值作为参数int21h与子程序调用的比较

主程序

……CALLSUBP

……

子程序…………RETDOS/BIOS调用

源程序

……INTn

……DOS/BIOS

例行程序…………IRET实现机制不同(1)BIOS键盘中断(INT16H)

AH功能返回参数

0从键盘读一字符AL=字符码,AH=扫描码

1读键盘状态并

如按下ZF=0,AL=字符码,AH=扫描码检查是否有字符输入

否则ZF=1,缓冲区空

比如指令序列:

MOVAH,0INT16H;等待按键输入然后取得扫描码和字符码MOVBX,AX;用BX传递参数CALLBINIHEX;调用子程序将BX转16进制并显示DOS键盘中断(INT21H)AH

功能调用参数返回参数

1

从键盘输入一个字符并回显在屏幕上AL=字符

6

读键盘字符,不回显DL=0FFH

若有字符可取,AL=字符,ZF=0

若无字符可取,AL=0,ZF=1

7

从键盘输入一个字符,不回显AL=字符

8从键盘输入一个字符,不回显,AL=字符检测Ctrl-Break

A

输入字符到缓冲区DS:DX=缓冲区首址(DX+1)=实际输入字符数B检验键盘状态AL=0有输入AL=FF无输入例:检测键盘输入的字符是否为回车键Wait_here:movah,7

int21h;等待输入

cmpal,0dh;比较判断

jnewait-here例:某程序在执行过程中检测是否有键盘输入Sounder:…

movah,0bh

int21h;读键盘状态

incal;AL=FF无输入,A=00有输入

jnzsounder;AL不等于0无键入

ret例:输入字符串到缓冲区STRING

DATASEGMENT

MAXLENDB32ACTLENDB

?

STRINGDB32DUP(?)DATAENDSCODE SEGMENT

… LEA DX,MAXLEN MOV AH,0AH INT 21H …CODE ENDS ENDMAXLENACTLENSTRING32568H61H70H70H79H0DHMAXLENDB32,0,32DUP(?)MAXLENDB32,33DUP(?)输入happyDOS键盘中断0AH功能号①

若(DS:DX)字节单元的值为0,则不等待从键盘输入,结束调用。②若(DS:DX)字节单元的内容大于0,则等待从键盘输入,并把输入键的ASCII码顺序存放在DS:DX+2开始的单元,按回车键表示结束输入。当按下键的个数超过(DS:DX)中值,发出警告声’嘟嘟’,

不再接收输入的数据,直到输入回车键。③将实际输入的字符个数(不包括回车键)填入(DS:DX+1),

结束调用。DS:DX000000000000000000000000000000000AH功能执行过程:◢输入的字符均带回显,且光标随字符移动。当输入回车符结束时,也回显回车符。表现为功能调用结束后,光标回到了行首。◢

回车符0DH作为一个输入的字符存放在字符串尾,但计算输入个数时,不包括回车键。

实际最多能输入的字符数=限制的最多数-1

(回车符占一个)◢

执行完0AH功能后,DS和DX的值不变,DS:DX仍指向缓冲区的首地址。◢

整个缓冲区的大小应为:限制的最多数+2

maxDB11,?,11dup(?)缓冲区必须定义为字节类型,不能定义为字类型。0AH功能注意事项:(3)DOS显示功能调用中断INT21H

AH

功能调用参数

2

显示一个字符(检验Ctrl-Break)DL=字符

光标跟随字符移动

6

显示一个字符(不检验Ctrl-Break)DL=字符

光标跟随字符移动

9显示字符串DS:DX=串地址

串必须以$结束, 光标跟随串移动MESSAGEDB‘Thesortoperationisfinished.’,13,10,’$’

……

MOV

AH,9

MOVDX,SEGMESSAGE

MOV

DS,DX

MOV

DX,OFFSETMESSAGE

INT21HPrintmacrostr_addrpushdxpushaxmov

dx,offset

str_addr

movah,09

int21hpopaxpopdx

endm

例:显示字符串1.设置显示方式入口参数

AL=显示方式值

0040×25黑白文本方式

0140×25彩色文本方式

0280×25黑白文本方式

0380×25彩色文本方式

04320×320彩色图形方式功能号

AH=00H类型号

10H出口参数无实现功能将显示方式设置为指定的形式例:将显示方式设置为25×80彩色文本方式

MOVAL,03HMOV

AH,00

INT10H

(3)BIOS显示中断

INT10H功能号AH=0,1,2,3,5,6,7,8,9,0AH,0EH13H默认方式为03

Int10h的功能01:设置光标大小。光标行的开始和结束数据分别放在ch和cl的低4位(0~3位光标的大小),ch的4位为0显现光标,为1则关闭光标。光标只在文本方式中出现,在图形方式下光标消失。

Int10h的功能02:设置光标位置。Dh和dl寄存器中为光标位置的行列号,bh中为页号(单色显示器页号为0)。例:

mov ch,5

mov cl,7

mov ah,1

int10h

movdh,4

movdl,5

movbh,0

movah,2

int10h设置光标的大小,光标开始行为5,结束行为7。计算机有专门的硬件控制光标的显示大小、位置。设置光标的位置,光标在第5行第6列(4,5)。2、控制光标

movch,20h

mov cl,00h

mov ah,1

int10h;隐藏光标功能03

:bh中指定页号。把光标位置的行号回送给dh,列号回送给dl,光标大小的参数填入ch和cl

movah,3

movbh,0

int10h;返回参数dh:dl=行:列4、选择显示页功能05:由程序确定显存中的显示区域。入口参数:页号送给al。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论