第九章 BIOS 和 DOS 中断
? DOS 中断调用
? BIOS 中断调用
BIOS ( Basic Input/Output System )
A Firmware program,存储在 ROM,EPROM 或
FlashROM 中,提供最基本的硬件初始化、外围控制的
必要程序代码。通常是用汇编语言编写的。
DOS ( Disk Operating System )
00000H
F0000H
upper
memory
conventional
memory 640K (RAM)
128K (RAM)
192K (ROM)
64K (ROM)
FE000H ~ FFFFFH 8K
调用 DOS 或 BIOS 功能的基本步骤,
(1) 将调用参数装入指定寄存器
(2) 如需功能号,将它装入 AH
(3) 如需子功能号,将它装入 AL
(4) 按 中断类型号 调用 DOS 或 BIOS 中断
(5) 检查返回参数是否正确
DOS 功能与 BIOS 功能都通过 软件中断 调用。
1,DOS 中断调用
DOS 功能调用 ( INT 21H )
用户在程序中调用 DOS 提供的一些子功能,
(1) 一般设备的输入输出
(2) 磁盘的输入输出及磁盘文件的管理
(3) 其它
DOS 键盘功能调用 ( AH = 1,6,7,8,A,B,C )
( 单字符输入 /输入字符串 /清除键盘缓冲区 /检验键盘状态 )
例:单字符输入 ( AH=1 )
get_key,mov ah,1
int 21h
cmp al,‘Y’
je yes
cmp al,‘N’
je no
jne get_key
yes,
……
no,
……
例:输入字符串 ( AH=0ah )
定义缓冲区,
maxlen db 32
actlen db?
string db 32 dup (? )
maxlen db 32,0,32 dup (? )
maxlen db 32,33 dup (? )
lea dx,maxlen
mov ah,0ah
int 21h
DOS 显示功能调用 ( AH=2,6,9 )
( 显示一个字符 /显示字符串 )
例:显示一个字符 ( AH=2 )
mov ah,2
mov dl,‘A’
int 21h
例:显示字符串 ( AH=9 )
string db ‘HELLO’,0dh,0ah,‘$’
mov dx,offset string
mov ah,9
int 21h
DOS 打印功能 ( AH=5 )
(打印一个字符)
DOS 串行通讯口功能 ( AH=3,4 )
(从串口读一个字符 /向串口写一个字符)
2,BIOS 中断调用
BIOS 键盘中断 ( INT 16H AH = 0,1,2 )
( 从键盘读一字符 /读键盘缓冲区字符 /取键盘状态字节 )
例:从键盘读一字符 ( AH=0 )
mov ah,0
int 16h ; al = 字符码; ah = 扫描码
mov bx,ax
call binihex
BIOS 显示中断 ( INT 10H AH = 1,2,3,6,7,8,9,A )
( 控制光标 /读光标位置 /清屏和卷屏 /字符显示 )
BIOS 打印中断 ( INT 17H AH = 0,1,2 )
( 打印一个字符 /初始化打印机 /取打印机状态字节 )
BIOS 串行通讯口功能 ( INT 14H AH = 0,1,2,3 )
( 初始化串口 /向串口写字符 /从串口读字符 /取串口状态 )
? DOS 中断调用
? BIOS 中断调用
BIOS ( Basic Input/Output System )
A Firmware program,存储在 ROM,EPROM 或
FlashROM 中,提供最基本的硬件初始化、外围控制的
必要程序代码。通常是用汇编语言编写的。
DOS ( Disk Operating System )
00000H
F0000H
upper
memory
conventional
memory 640K (RAM)
128K (RAM)
192K (ROM)
64K (ROM)
FE000H ~ FFFFFH 8K
调用 DOS 或 BIOS 功能的基本步骤,
(1) 将调用参数装入指定寄存器
(2) 如需功能号,将它装入 AH
(3) 如需子功能号,将它装入 AL
(4) 按 中断类型号 调用 DOS 或 BIOS 中断
(5) 检查返回参数是否正确
DOS 功能与 BIOS 功能都通过 软件中断 调用。
1,DOS 中断调用
DOS 功能调用 ( INT 21H )
用户在程序中调用 DOS 提供的一些子功能,
(1) 一般设备的输入输出
(2) 磁盘的输入输出及磁盘文件的管理
(3) 其它
DOS 键盘功能调用 ( AH = 1,6,7,8,A,B,C )
( 单字符输入 /输入字符串 /清除键盘缓冲区 /检验键盘状态 )
例:单字符输入 ( AH=1 )
get_key,mov ah,1
int 21h
cmp al,‘Y’
je yes
cmp al,‘N’
je no
jne get_key
yes,
……
no,
……
例:输入字符串 ( AH=0ah )
定义缓冲区,
maxlen db 32
actlen db?
string db 32 dup (? )
maxlen db 32,0,32 dup (? )
maxlen db 32,33 dup (? )
lea dx,maxlen
mov ah,0ah
int 21h
DOS 显示功能调用 ( AH=2,6,9 )
( 显示一个字符 /显示字符串 )
例:显示一个字符 ( AH=2 )
mov ah,2
mov dl,‘A’
int 21h
例:显示字符串 ( AH=9 )
string db ‘HELLO’,0dh,0ah,‘$’
mov dx,offset string
mov ah,9
int 21h
DOS 打印功能 ( AH=5 )
(打印一个字符)
DOS 串行通讯口功能 ( AH=3,4 )
(从串口读一个字符 /向串口写一个字符)
2,BIOS 中断调用
BIOS 键盘中断 ( INT 16H AH = 0,1,2 )
( 从键盘读一字符 /读键盘缓冲区字符 /取键盘状态字节 )
例:从键盘读一字符 ( AH=0 )
mov ah,0
int 16h ; al = 字符码; ah = 扫描码
mov bx,ax
call binihex
BIOS 显示中断 ( INT 10H AH = 1,2,3,6,7,8,9,A )
( 控制光标 /读光标位置 /清屏和卷屏 /字符显示 )
BIOS 打印中断 ( INT 17H AH = 0,1,2 )
( 打印一个字符 /初始化打印机 /取打印机状态字节 )
BIOS 串行通讯口功能 ( INT 14H AH = 0,1,2,3 )
( 初始化串口 /向串口写字符 /从串口读字符 /取串口状态 )