汇编-第9章 BIOS和DOS中断_第1页
汇编-第9章 BIOS和DOS中断_第2页
汇编-第9章 BIOS和DOS中断_第3页
汇编-第9章 BIOS和DOS中断_第4页
汇编-第9章 BIOS和DOS中断_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

第9章BIOS和DOS中断键盘I/O显示器I/O打印机I/O串行通信口I/O子程序调用主程序……CALLSUBP……

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

源程序……INTn……DOS/BIOS

例行程序…………IRET实现机制不同BIOS和DOS基本调用调用方法:1、将调用参数装入指定的寄存器中;2、BIOS或DOS功能号装入AH;3、如需子功能号,把它装入AL;4、按中断号调用DOS或BIOS中断(INT);5、检查或取得返回参数。例1:DOS调用:键盘输入,显示输出 MOV AH,01 ;DOS功能号:键盘输入

INT 21H

;DOS调用 MOVCHAR,AL ;返回参数:键入字符的 ;ASCII码(在AL中) MOVDL,’A’ ;调用参数:输出字符 MOV AH,02

;DOS功能号:显示输出

INT 21H

;DOS调用

1.键盘I/O

(1)BIOS键盘中断(INT16H)AH功能返回参数

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

1读键盘缓冲区的字符如ZF=0,AL=字符码, AH=扫描码如ZF=1,缓冲区空

2取键盘状态字节AL=键盘状态字节

字符数字键字符码为ASCII码功能键、控制键字符码为0对应一个扫描码例2:读取键盘状态字节,并以十六进制打印出来again:

movah,02h

int16h

mov

bx,ax callbinihex

movdl,0dh

movah,02h

int21h

jmpagain(2)DOS键盘中断(INT21H)AH

功能调用参数返回参数

1

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

6读键盘字符,不回显DL=0FFH若有字符可取,AL=字符,ZF=0

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

7

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

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

A

输入字符到缓冲区DS:DX=缓冲区首址

B

读键盘状态AL=0FFH有键入,AL=00无键入

C

清除键盘缓冲区,AL=键盘功能号并调用一种键盘功能(1,6,7,8或A)例3:DOS调用:从键盘输入字符 MOVAH,01 ;DOS功能号:键盘输入

INT21H ;DOS调用 MOVCHAR,AL ;返回参数:键入字符 ;的ASCII码(AL)例4:输入字符串到缓冲区STRINGDATASEGMENTMAXLENDB32ACTLENDB?STRINGDB32DUP(?)DATAENDSCODESEGMENT

ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX

LEADX,MAXLENMOVAH,0AHINT21HMOVAH,4GHINT21HCODEENDSENDSTART32568H61H70H70H79H0DHMAXLENACTLENSTRING(2)DOS显示功能调用中断

INT21H

AH

功能调用参数

2

显示一个字符(检验Ctrl-Break)DL=字符 光标跟随字符移动

6

显示一个字符(不检验Ctrl-Break)DL=字符 光标跟随字符移动

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

串必须以$结束, 光标跟随串移动例5:DOS调用:显示输出一个字符

MOVDL,’A’ ;调用参数:输出字符 MOVAH,02 ;DOS功能号:显示输出 INT21H ;DOS调用

例6:显示字符串MESSAGEDB‘Thesortoperationisfinished.’,13,10,’$’

MOVAH,9 MOVDX,SEGMESSAGE MOVDS,DX MOVDX,OFFSETMESSAGEINT21H例7:除数为0时的软件中断(类型0)处理程序。此程序分成两部分:初始化部分和中断处理部分。初始化部分:设置新的0型中断向量,显示一条信息,然后完成终止和驻留后退出程序。中断处理程序:在发生被0除中断时,先保存有关的寄存器的值,然后询问是退出“Q”还是继续“C”,若键入“C”,则处理程序恢复所有的寄存器并执行IRET返回主程序(显示一个标记符“#”),此时除法的操作结果无效。若键入“Q”返回DOS。初始化部分:

leadx,zdivmovax,seg

zdivmov

ds,axmoval,0movah,25hint21hmovax,codemov

ds,axmov

dx,offsetok_msgmovah,9hmov21hmovax,1movdl,0divdlmovah,2movdl,‘#’int21hmovah,31h ;终止并驻留moval,0 ;AL=DOS返回吗mov

dx,((prog_len+15)/16)+16

;保留的节数(1节等于16字节)int21h

中断处理程序:zdiv procfar

stiprt_warn:

movax,code

mov

ds,ax

mov

dx,offsetwarn_msg

movah,9

int21hinput:movah,1

int21h

cmp

al,’c’ jecontinue

cmpal,‘q’ jeexit

mov

dx,offsetbeep

movah,9

int21h

jmp

prt_warnexit: movax,4cffh

int21hcontinue:

mov

dx,offsetcrlf

movah,9

int21h

cli

iretzdiv

endpok_msgdb0dh,0ah,’Zero-divisionHandler installed!’db0dh,0ah,’$’warn_msgdb‘Zer0-divisiondetected,’,07hdb‘ContinueorQuit(c/q)?$’beepdb07h,’$’crlfdb0dh,0ah,’$’prog_len

equ$-main软中断开发方法

对于软中断程序,则是通过软中断指令INTn来调用,为了定义一个用户自己的软中断指令,可以按以下步骤:1、确定一个空闲的中断号n。2、明确入口参数和出口参数。3、编写相应的中断处理程序。4、设置中断向量,即将新编写的中断处理程序的入口地址写入中断向量表的4*n开始的4个字节。在完成上述工作后,便可使用软中断指令INTn实现n号中断调用,执行用户自己开发的软中断处理程序。软中断程序设计举例例8:编写输出字符串“exampleforint”的中断处理程序,设中断号为5CODESEGMENTASSUMECS:CODEMAINPROCFARPUSHDSMOVAX,0PUSHAXCLIMOVAX,SEGNEWINT5MOVDS,AXMOVDX,OFFSETNEWINT5MOVAL,5MOVAH,25HINT21HSTIMOVCX,10L1:INT5H ;测试新中断

LOOPL1RETMAINENDPHELLODB‘exampleforint’NEWINT5PROCFARPUSHBXPUSHCXPUSHAX

MOVBX,OFFSETHELLOMOVCX,15L2:MOVAL,CS:[BX]CALLDISPCHARINCBXLOOPL2MOVAL,0DH ;显示回车

CALLDISPCHARMOVAL,0AH ;显示换行

CALLDISP

温馨提示

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

评论

0/150

提交评论