89
安安安安安安 安安安安安安安安安 安安安 安安安安安 《》 9安 9 9 BIOS BIOS DOS DOS 安安安安安安安安 安安安安安安安安 9.1 9.1 安安安安安安安安 安安安安安安安安 9.2 9.2 安安安安安安安安安 安安安安安安安安安

第 9 章 BIOS 和 DOS 中断调用程序设计

  • Upload
    braima

  • View
    192

  • Download
    0

Embed Size (px)

DESCRIPTION

第 9 章 BIOS 和 DOS 中断调用程序设计. 9.1 键盘输入中断调用 9.2 显示器输出中断调用. 开 始. DOS 中断和 BIOS 中断. 在存储器系统中,内存从 0FE000H 高端 8K 的 ROM 中 存放有基本输入输出系统( Basic Input/Output System , BIOS )例行程序。 BIOS 给 PC 系列的不同微处理器提供了兼容的系统 加电自检、引导装入、主要 I/O 设备的处理程序以及接口控制等功能模块来处理所有的系统中断 。 - PowerPoint PPT Presentation

Citation preview

Page 1: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

第第 99 章 章 BIOSBIOS 和和 DOSDOS 中断调用中断调用程序设计程序设计

• 9.19.1 键盘输入中断调用键盘输入中断调用

• 9.2 9.2 显示器输出中断调用显示器输出中断调用

开 始

Page 2: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

DOSDOS 中断和中断和 BIOSBIOS 中断中断 在存储器系统中,内存从在存储器系统中,内存从 0FE000H0FE000H 高端高端 8K8K 的的 ROMROM中中存放有基本输入输出系统(存放有基本输入输出系统( Basic Input/Output Basic Input/Output SystemSystem ,, BIOSBIOS )例行程序。)例行程序。 BIOSBIOS 给给 PCPC 系列的不同系列的不同微处理器提供了兼容的系统微处理器提供了兼容的系统加电自检、引导装入、主加电自检、引导装入、主要要 I/OI/O 设备的处理程序以及接口控制等功能模块来处设备的处理程序以及接口控制等功能模块来处理所有的系统中断理所有的系统中断。。

使用使用 BIOSBIOS 功能调用,给程序员编程带来极大方功能调用,给程序员编程带来极大方便。便。程序员程序员不必了解硬件的具体细节,不必了解硬件的具体细节,可直接使用指可直接使用指令设置参数,并中断调用令设置参数,并中断调用 BIOSBIOS 例行程序例行程序,所以利用,所以利用BIOSBIOS 功能调用编写的程序简洁,可读性好,而且易功能调用编写的程序简洁,可读性好,而且易于移植于移植

Page 3: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

磁盘操作系统磁盘操作系统(( Disk Operating SystemDisk Operating System )是)是PCPC 机上最重要的操作系统,它是由软盘或硬盘提供机上最重要的操作系统,它是由软盘或硬盘提供的。它的两个的。它的两个 DOSDOS 模块模块 IBMBIO.COMIBMBIO.COM 和和 IBMDOS.COMIBMDOS.COM使使 BIOSBIOS 使用起来更方便。因为使用起来更方便。因为 DOSDOS 模块提供了更多模块提供了更多更必要的测试,更必要的测试,使用使用 DOSDOS 操作比使用相应功能的操作比使用相应功能的 BIBIOSOS 操作更简易,而且操作更简易,而且 DOSDOS 对硬件的依赖性更少些对硬件的依赖性更少些。。

DOSDOS 模块和模块和 ROM BIOSROM BIOS 的关系如下图所示。的关系如下图所示。

Page 4: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

DOSDOS 中断和中断和 BIOSBIOS 中断使用方法中断使用方法 DOSDOS 功能调用与功能调用与 BIOSBIOS 功能都通过软件中断调用功能都通过软件中断调用。。在中断调用前需要把功能号装入在中断调用前需要把功能号装入 AHAH 寄存器,把子功寄存器,把子功能号装入能号装入 ALAL 寄存器寄存器,除此之外,还需要在,除此之外,还需要在 CPUCPU 的寄的寄存器中提供专门的调用参数存器中提供专门的调用参数。一般来说,调用。一般来说,调用 DOSDOS或或 BIOSBIOS 功能时,有以下几个步骤:功能时,有以下几个步骤:

(( 11 )将调用参数装入指定的寄存器。)将调用参数装入指定的寄存器。(( 22 )如需功能调用号,把它装入)如需功能调用号,把它装入 AHAH 。。(( 33 )如需子功能调用号,把它装入)如需子功能调用号,把它装入 ALAL 。。(( 44 )按中断号调用)按中断号调用 DOSDOS 或或 BIOSBIOS 。。(( 55 )检查返回参数是否正确。)检查返回参数是否正确。

Page 5: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

表表 9.1 BIOS9.1 BIOS 中断类型中断类型 地址(地址( HexHex ) 类型码 中断名称) 类型码 中断名称 0—3 0 0—3 0 除以除以 00

4—7 1 4—7 1 单步单步 8—B 2 8—B 2 非屏蔽非屏蔽 C—F C—F 3 3 断点断点 10—13 4 10—13 4 溢出溢出 14—17 5 14—17 5 打印屏幕打印屏幕 18—1B 6 18—1B 6 保留保留 1D—1F 7 1D—1F 7 保留保留 20—23 8 20—23 8 定时器定时器 24—27 9 24—27 9 键盘键盘 28—2B A 28—2B A 保留的硬中断保留的硬中断 2C—2F B 2C—2F B 异步通信(异步通信( COMCOM22 )) 30—33 C 30—33 C 异步通信(异步通信( COMCOM11 )) 34—37 D 34—37 D 硬盘硬盘 38—3B E 38—3B E 软盘软盘 3C—3F F 3C—3F F 并行打印机并行打印机

地址(地址( HexHex ) 类型码 中断名称) 类型码 中断名称40—43 10 40—43 10 视频显示视频显示 I/OI/O 调用调用44—47 11 44—47 11 设备检测调用设备检测调用48—4B 12 48—4B 12 存储器容量检测存储器容量检测4C—4F 13 4C—4F 13 软软 // 硬盘硬盘 I/OI/O 调用调用50—53 14 50—53 14 通信通信 I/OI/O 调用调用54—57 15 54—57 15 盒式磁带盒式磁带 I/OI/O 调用调用58—5B 16 58—5B 16 键盘键盘 I/OI/O 调用调用5C—5F 17 5C—5F 17 打印机打印机 I/OI/O 调用调用60—63 18 ROM BASIC60—63 18 ROM BASIC

64—67 19 64—67 19 引导程序入口引导程序入口68—6B 1A 68—6B 1A 时间调用时间调用6C—6F 1B 6C—6F 1B 键盘键盘 CTRL-BREAKCTRL-BREAK 控制控制

70—73 1C 70—73 1C 定时器报时定时器报时74—77 1D 74—77 1D 显示器参数表显示器参数表78—7B 1E 78—7B 1E 软盘参数表软盘参数表

7C—7F 1F 7C—7F 1F 字符点阵结构参数表字符点阵结构参数表

BIOSBIOS 中断向量中断向量

Page 6: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

地址(地址( HexHex ) 类型码 中断名称) 类型码 中断名称

80—83 20 80—83 20 程序结束,返回程序结束,返回 DOSDOS

84—87 21 DOS84—87 21 DOS 系统功能调用系统功能调用

88—8B 22 88—8B 22 程序结束地址程序结束地址

8C—8F 23 CTRL_BREAK8C—8F 23 CTRL_BREAK 退出地址退出地址

90—93 24 90—93 24 标准错误出口地址标准错误出口地址

94—97 25 94—97 25 绝对磁盘读绝对磁盘读

98—9B 26 98—9B 26 绝对磁盘写绝对磁盘写

9C—9F 27 9C—9F 27 程序结束,驻留内存程序结束,驻留内存

A0—FF 28—3F A0—FF 28—3F 为为 DOSDOS 保留保留

100—17F 40—5F 100—17F 40—5F 保留保留(扩充 BIOS 中断向量)

180—19F 60—67 为用户软中断保留1A0—1FF 68—7F 不用(其中 70—77 为 I/O 设备中断向量)

200—217 80—85 BASIC 使用

218—3C3 86—F0 BASIC 运行时,用于解释

3C4—3FF F1—FF 未用

表表 9.2 DOS9.2 DOS 中断类中断类型型

Page 7: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

9.1 9.1 键盘输入中断调用键盘输入中断调用

9.1.1 9.1.1 ASCIIASCII与扫描码 与扫描码

9.1.2 9.1.2 BIOSBIOS键盘中断 键盘中断

9.1.3 9.1.3 DOSDOS中断调用中断调用

Page 8: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

9.1.1 ASCII9.1.1 ASCII 与扫描码与扫描码 键盘是计算机最基本的一种输入设备,键盘是计算机最基本的一种输入设备,用来输入信息,以达到人机对话的目的。键用来输入信息,以达到人机对话的目的。键盘主要由盘主要由 33 种基本类型的键组成:种基本类型的键组成:

(( 11 ))字符数字键字符数字键::(( 22 ))扩展功能键扩展功能键:如:如 HomeHome 、、 EndEnd 、、 BackspaBackspacece 、、 DeleteDelete 、、 InsertInsert 、、 PgUpPgUp 、、 PgDownPgDown 以以及功能键及功能键 F1F1 ~~ F10F10

(( 33 ))和其他键组合使用的控制键和其他键组合使用的控制键:如:如 AltAlt ,,CtrlCtrl ,, ShiftShift 等等

Page 9: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

键盘和主机通过键盘和主机通过 55 芯电缆相连,这芯电缆相连,这 55 根线根线分别是分别是电源线、地线、复位线以及键盘数据线电源线、地线、复位线以及键盘数据线和键盘时钟线和键盘时钟线。。 PCPC 机系列的键盘触点电路按机系列的键盘触点电路按 1166 行行 ×8×8 列的矩阵列的矩阵来排列,用单片机来排列,用单片机 Intel804Intel80488 来控制对键盘的扫描。来控制对键盘的扫描。按键的识别采用行列按键的识别采用行列扫描法扫描法,即根据对行线和列线的扫描结果来确,即根据对行线和列线的扫描结果来确定闭合键的位置,定闭合键的位置,这个位置值称为按键的扫描这个位置值称为按键的扫描码码,通过数据线将,通过数据线将 88 位扫描码送往主机。位扫描码送往主机。当在当在键盘上“按下”或“放开”一个键时,如果键键盘上“按下”或“放开”一个键时,如果键盘中断是允许的(盘中断是允许的( 21H21H 端口的第一位等于端口的第一位等于 00 ),),就会产生一个就会产生一个类型类型 99 的中断的中断,并转入到,并转入到 BIOSBIOS的键盘中断处理程序。的键盘中断处理程序。

Page 10: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

该处理程序从该处理程序从 82558255 可编程外围接口芯片的输入端口可编程外围接口芯片的输入端口读取一个字节,这个字节的低读取一个字节,这个字节的低 77 位是按键的扫描码。最位是按键的扫描码。最高位为高位为 00 或者为或者为 11 ,分别表示键是“按下”状态还是,分别表示键是“按下”状态还是“放开”状态。“放开”状态。按下时,取得的字节称为按下时,取得的字节称为通码通码,,放开时放开时取得的字节称为取得的字节称为断码断码。如。如 ESCESC 键按下取得的通码为键按下取得的通码为 01H01H(( 0000000010000001BB ),放开),放开 ESCESC 键时会产生一个断码键时会产生一个断码 81H81H(( 1100000010000001BB )。)。

BIOSBIOS 键盘处理程序将取得的扫描码转换成相应的键盘处理程序将取得的扫描码转换成相应的字符码,大部分的字符码是一个标准的字符码,大部分的字符码是一个标准的 ASCIIASCII 码码;没有;没有相应相应 ASCIIASCII 的键,如的键,如 AltAlt 和功能键(和功能键( F1F1 ~~ F10F10 ),字),字符码为符码为 00;还有一些非;还有一些非 ASCIIASCII 码键产生一个指定的操作。码键产生一个指定的操作。

Page 11: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

键盘缓冲区键盘缓冲区

键盘缓冲区是一个先进先出的环形队列,其所占内存区域如下键盘缓冲区是一个先进先出的环形队列,其所占内存区域如下:

键盘缓冲区是一个环形队列,其性质与《数据结构》课程键盘缓冲区是一个环形队列,其性质与《数据结构》课程中对“环形队列”所描述的性质完全一致。虽然缓冲区的本身中对“环形队列”所描述的性质完全一致。虽然缓冲区的本身长度为长度为 1616个字,但出于判断“对列满”的考虑,它最多只能个字,但出于判断“对列满”的考虑,它最多只能保存保存 1515 个键盘信息。当缓冲区满时,系统将不再接受按键信个键盘信息。当缓冲区满时,系统将不再接受按键信息,而会发出“嘟”的声音,以示要暂缓按键。当息,而会发出“嘟”的声音,以示要暂缓按键。当 KBHeadKBHead== KKBTailBTail 时,表示无键盘输入。时,表示无键盘输入。

KBHead DWKBHead DW    ?? ; ; 其内存地址为其内存地址为 0000:041AH0000:041AH ,缓冲区头指针,缓冲区头指针KBTailKBTail DW DW    ?? ; ; 其内存地址为其内存地址为 0000:041CH0000:041CH ,缓冲区尾指针,缓冲区尾指针KBBuffKBBuff DW DW    16 DUP(?) ;16 DUP(?) ; 其内存地址为其内存地址为 0000:041EH0000:041EH ,该缓冲区,该缓冲区 的缺省长度为的缺省长度为 1616 个字个字

Page 12: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

9.1.2 BIOS9.1.2 BIOS 键盘中断键盘中断 类型 类型 16H 16H 的中断提供了基本的键盘操作,它的中的中断提供了基本的键盘操作,它的中断处理程序包括断处理程序包括 33 个不同的功能,分别根据个不同的功能,分别根据 AHAH 寄存器中寄存器中的子功能号来确定。的子功能号来确定。

(( 11 )) AH=0 AH=0 本功能为本功能为从键盘读字符到从键盘读字符到 ALAL 寄存器中寄存器中。。 (A(AL=L=字符码,字符码, AH=AH= 扫描码)扫描码)

(( 22 )) AH=1 AH=1 本功能为本功能为读键盘缓冲区字符到读键盘缓冲区字符到 ALAL 寄存器中,寄存器中, 并置并置 ZFZF 标志位标志位。。 (( 若若 ZF=0ZF=0 ,则,则 AL=AL= 字符码,字符码, AH=AH= 扫扫描码, 描码, ZF=1ZF=1 ,缓冲区空),缓冲区空)

(( 33 )) AH=2 AH=2 本功能为本功能为读取特殊功能键读取特殊功能键的状态。的状态。 (AL=(AL= 键键盘状态字节)盘状态字节)

Page 13: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

code segment

assume cs:code

mov ah, 0

int 16h

mov ah, 4ch

int 21h

code ends

end

从键盘读字符从键盘读字符

Page 14: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

在计算机键盘上除了可输入各种字符在计算机键盘上除了可输入各种字符 ((字母、数字母、数字和符号等字和符号等 ))的按键之外,还有一些的按键之外,还有一些功能键功能键 ((如:如:F1F1 、、 F2F2 、…等、…等 ))、、控制键控制键 ((如:如: CtrlCtrl 、、 AltAlt 、、 ShShiftift 等等 ))、、双态键双态键 ((如:如: Num LockNum Lock 、、 Caps LockCaps Lock等等 ))和和特殊请求键特殊请求键 ((如:如: Print ScreenPrint Screen 、、 Scroll Scroll LockLock 等等 ))。 。

键盘中的控制键和双态键是非打印按键,它键盘中的控制键和双态键是非打印按键,它们是起控制或转换作用的。们是起控制或转换作用的。当使用者按下控制键或当使用者按下控制键或双态键时,系统要记住其所按下的按键。双态键时,系统要记住其所按下的按键。为此,在为此,在计算机系统中,计算机系统中,特意安排的一个字来标志这些按键特意安排的一个字来标志这些按键的状态,我们称该字为的状态,我们称该字为键盘状态字键盘状态字。。

键盘状态字的各位含义如图所示。键盘状态字的各位含义如图所示。

键盘状态字键盘状态字

Page 15: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

Page 16: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

code segment

assume cs:code

mov ah, 2

int 16h

mov ah, 4ch

int 21h

code ends

end

读取特殊功能键的状态读取特殊功能键的状态

Page 17: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

9.1.3 DOS9.1.3 DOS 键盘功能调用(键盘功能调用( INT 21HINT 21H ))

Page 18: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

get_key:mov ah, 1get_key:mov ah, 1

int 21hint 21h

cmp al , ’y’cmp al , ’y’

je yesje yes

cmp al, ’n’cmp al, ’n’

je noje no

jne get_keyjne get_key

11 )单字符输入)单字符输入

例例 9—2 9—2 接收键盘输入并对其进行测试。接收键盘输入并对其进行测试。

Page 19: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

wait_here: mov ah, 7wait_here: mov ah, 7

int 21hint 21h

cmp al, 0dhcmp al, 0dh

jne wait_herejne wait_here

例例 9—3 9—3 检测键盘输入的字符是否是回车键。检测键盘输入的字符是否是回车键。

Page 20: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

code segmentcode segment assume cs:codeassume cs:code mov ah,7mov ah,7 int 21hint 21h cmp al,0cmp al,0 je get_charje get_char jmp errorjmp errorget_charget_char_ _ mov ah,7mov ah,7 int 21hint 21h cmp al,cmp al,3bh3bh ;F1;F1 je option1je option1 cmp al,cmp al,3ch3ch ;F2;F2 je option2je option2 mov ah,4chmov ah,4ch int 21hint 21hcode endscode endsendend

如果程序要求能接收功能键如果程序要求能接收功能键或数字组合键必须进行两次或数字组合键必须进行两次 DOSDOS

功能调用功能调用 ::

第一次回送第一次回送 0000

第二次回送扫描码第二次回送扫描码

例例 9-4 9-4 检测键盘输入的功能键检测键盘输入的功能键。。

Page 21: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

data segmentdata segment smax db 21smax db 21 sact db ?sact db ? stri db 21 dup(?)stri db 21 dup(?)data endsdata endscode segmentcode segment assume cs:code,ds:data assume cs:code,ds:data Start:mov ax,dataStart:mov ax,data mov ds,ax mov ds,ax lea dx, strilea dx, stri mov ah,0ahmov ah,0ah int 21hint 21h mov ah,4chmov ah,4ch int 21hint 21h code endscode endsEnd startEnd start

(1) smax db 21(1) smax db 21 sact db ?sact db ? stri db 21 dup(?)stri db 21 dup(?)

(2) smax db 21(2) smax db 21 db ?db ? db 21 dup(?)db 21 dup(?)

(3)smax db 21, ?, 21 dup(?)(3)smax db 21, ?, 21 dup(?)

例例 9-5 9-5 输入字符串程序输入字符串程序22 )输入字符串)输入字符串

Page 22: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

Int 21Int 21 的功能的功能 0ch0ch 能清除键盘缓冲区,然后执行在能清除键盘缓冲区,然后执行在 ALAL 中指定中指定的功能。的功能。 ALAL 中指定的功能可以是中指定的功能可以是 11 ,, 66 ,, 77 ,, 88 或或 0AH0AH 。。

……

mov mov ahah, 0ch, 0ch

mov mov alal, 08h, 08h

int 21hint 21h

inc alinc al

je exitje exit

……

Exit:Exit:

33 )清除键盘缓冲区)清除键盘缓冲区

Page 23: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

例 编写按任意键结束程序的程序段例 编写按任意键结束程序的程序段

……

mov ah, 0bhmov ah, 0bh

int 21hint 21h

inc alinc al

je exitje exit

……

Exit:Exit:

44 )检验键盘状态)检验键盘状态

Page 24: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

显示器可以简单的分为单色显示器和彩色显示器。随着显示显示器可以简单的分为单色显示器和彩色显示器。随着显示技术的发展,种类也更加丰富,常见的有阴极摄像管(技术的发展,种类也更加丰富,常见的有阴极摄像管( CRT)CRT)、、液晶显示器、等离子显示器等。 液晶显示器、等离子显示器等。 显示器是通过显卡与主机相连显示器是通过显卡与主机相连。。显示器的显示屏通常称之为屏幕,现在常用的显示器有显示器的显示屏通常称之为屏幕,现在常用的显示器有 14"14"和和 117"7",常用的显示分辨率为,常用的显示分辨率为 800×600800×600 或或 1024×7681024×768 等。常用的显等。常用的显示卡类型为示卡类型为 VGAVGA 、、 SVGASVGA 、、 EVGAEVGA 和和 TVGATVGA 等,显示卡上也都带有等,显示卡上也都带有大量的显示存储器,能快速显示精美的图象。大量的显示存储器,能快速显示精美的图象。

11.. MDAMDA MDAMDA (( Monochrome Display Adapter Monochrome Display Adapter )属于单色显示适配)属于单色显示适配器,是器,是 IBMIBM 最早研制的视频显示适配器。最早研制的视频显示适配器。22.. CGACGA 在在 MDAMDA推出的同时,推出的同时, IBMIBM也推出了彩色图形显示适配器──也推出了彩色图形显示适配器──CGACGA (( Color Graphics AdapterColor Graphics Adapter )。)。

9.2 显示器 I/O

Page 25: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

33.. EGAEGA 增强图形显示适配器──增强图形显示适配器── EGAEGA (( Enhanced GraEnhanced Graphics Adapterphics Adapter )是)是 IBMIBM 公司推出的第二代图形显示公司推出的第二代图形显示适配器,它兼容了适配器,它兼容了 MDAMDA 和和 CGACGA 的全部功能。的全部功能。44.. VGAVGA 视频图形阵列显示适配器──视频图形阵列显示适配器── VGAVGA (( Video GrVideo Graphics Arrayaphics Array )是)是 IBMIBM 公司推出的第三代图形显示公司推出的第三代图形显示适配器,它兼容了适配器,它兼容了 MDAMDA 、、 CGACGA 和和 EGAEGA 的全部功能。的全部功能。5. XGA5. XGA XGAXGA (( Extended Graphics ArrayExtended Graphics Array )是)是 IBMIBM 公司公司继继 VGAVGA 之后推出的扩展图形显示适配器。之后推出的扩展图形显示适配器。

Page 26: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

显示模式显示模式

计算机系统中的显示器都有二种显示方式:计算机系统中的显示器都有二种显示方式:文文本显示方式本显示方式和和图形显示方式图形显示方式。。

在在 DOSDOS 操作系统环境下,其默认的显示方式操作系统环境下,其默认的显示方式为文本显示方式,而在为文本显示方式,而在 WindowsWindows 操作系统环境下,操作系统环境下,其显示方式是图形显示方式其显示方式是图形显示方式,其绝大多数操作界面,其绝大多数操作界面是以图形界面的窗口形式出现的。是以图形界面的窗口形式出现的。

Page 27: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

文本显示方式文本显示方式 文本显示方式是指文本显示方式是指以字符为最小单位以字符为最小单位的显示方式,每个字的显示方式,每个字符都是以矩形块形式显示的。符都是以矩形块形式显示的。在在 BIOS ROMBIOS ROM 中存有多种不同大小中存有多种不同大小的字符集,主要的显示字符集大小为:的字符集,主要的显示字符集大小为: 8×8(8×8( 标准标准 ))、、 8×148×14和和 8×168×16等。等。 在常用的文本显示模式在常用的文本显示模式 ((模式模式 3)3)下,屏幕被划分成下,屏幕被划分成 2525行,每行可显示行,每行可显示 8080 个字符,所以,每屏最多可显示个字符,所以,每屏最多可显示 2000(80×2000(80×25)25)个字符。为了便于标识屏幕上的每个显示位置,我们就用个字符。为了便于标识屏幕上的每个显示位置,我们就用其所在行和列来表示之,并规定:屏幕的左上角坐标为其所在行和列来表示之,并规定:屏幕的左上角坐标为 (0, 0)(0, 0),,右下角坐标为右下角坐标为 (24, 79)(24, 79)。。 在显示字符时,用一个字节存储该字符的在显示字符时,用一个字节存储该字符的 ASCIIASCII码,用码,用另一个字节存储的显示属性,即:显示颜色另一个字节存储的显示属性,即:显示颜色。。 在在 80×2580×25 的文本显示模式下,满屏可显示的文本显示模式下,满屏可显示 20002000个字符,也就需要个字符,也就需要 40004000 个字节来存储一屏的显示信息。个字节来存储一屏的显示信息。

Page 28: 第 9 章   BIOS 和 DOS 中断调用程序设计
Page 29: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

图形显示方式图形显示方式 图形显示是目前最常用的一种显示方式,也是图形显示是目前最常用的一种显示方式,也是 WindowsWindows 操操作系统的默认显示方式。在该显示方式下,我们可以看到优美作系统的默认显示方式。在该显示方式下,我们可以看到优美的图象、的图象、 VCDVCD 、浏览丰富多彩的网页等。、浏览丰富多彩的网页等。

图形显示的最小单位是象素图形显示的最小单位是象素,对每个象素可用不同的颜色,对每个象素可用不同的颜色来显示。所以,在显示缓冲区内记录的信息是屏幕各象素的显来显示。所以,在显示缓冲区内记录的信息是屏幕各象素的显示颜色。示颜色。

由于各种图形显示模式所能显示的颜色和象素是不同的,由于各种图形显示模式所能显示的颜色和象素是不同的,它决定了它决定了显示缓冲区的存储方式显示缓冲区的存储方式也是不同的。下面给出三个具也是不同的。下面给出三个具体的图形显示模式及其存储方式,通过它们可看出各种显示模体的图形显示模式及其存储方式,通过它们可看出各种显示模式在显示缓冲区存储方式上的明显差异。式在显示缓冲区存储方式上的明显差异。

Page 30: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

44 色色 320×200320×200 图形显示模式图形显示模式 由于每个象素只能是四种颜色之一,而四种情况用由于每个象素只能是四种颜色之一,而四种情况用 22位二位二进制就可表示,所以,进制就可表示,所以,一个字节可表示一个字节可表示 44 个象素的显示颜色个象素的显示颜色,,存储一行上的所有象素信息就需要存储一行上的所有象素信息就需要 8080 个字节个字节。。

在具体存储过程中,它又在具体存储过程中,它又把偶数行象素和奇数行分开来存把偶数行象素和奇数行分开来存储。储。偶数行和齐数行的象素总数各有偶数行和齐数行的象素总数各有 3200032000 个,也都需要个,也都需要 80008000个字节来存储,并规定:个字节来存储,并规定:

偶数行象素从偶数行象素从 0B800:0000H0B800:0000H开始存储,开始存储,

奇奇数行象素从数行象素从 0B800:2000H0B800:2000H开始存储。开始存储。

该显示模式的存储形式如图所示该显示模式的存储形式如图所示。。

Page 31: 第 9 章   BIOS 和 DOS 中断调用程序设计
Page 32: 第 9 章   BIOS 和 DOS 中断调用程序设计

1616 色色 640×480640×480 图形显示模式图形显示模式 640×480640×480 图形显示模式共有图形显示模式共有 307200307200 个象素,每个象素可选个象素,每个象素可选用用 1616种颜色,它需要用种颜色,它需要用 44位二进制来表示位二进制来表示。该显示模式在存储。该显示模式在存储显示信息时,把该显示信息时,把该 44位分在四个位平面位分在四个位平面 P1P1 、、 P2P2 、、 P3P3 和和 P4P4 上,上,所以,位平面所以,位平面 Pi(i=1,2,3,4)Pi(i=1,2,3,4) 共有共有 307200307200 个二进制位,即有个二进制位,即有 3384008400 个字节。其显示缓冲区的存储形式如图所示。个字节。其显示缓冲区的存储形式如图所示。

Page 33: 第 9 章   BIOS 和 DOS 中断调用程序设计

256256 色色 320×200320×200 图形显示模式图形显示模式 表达表达 256256种不同颜色需要种不同颜色需要 88位二进制,即一个字节。在该位二进制,即一个字节。在该模式下,其显示缓冲区的存储方式是非常简单的,即:第一个模式下,其显示缓冲区的存储方式是非常简单的,即:第一个字节存储第一个象素的颜色,第二个字节存储第二个象素的颜字节存储第一个象素的颜色,第二个字节存储第二个象素的颜色,色,以此类推,所以,存储满屏象素所需要的字节数为:以此类推,所以,存储满屏象素所需要的字节数为: 320320×200×1×200×1== 6400064000 。其显示缓冲区的存储方式如图所示。。其显示缓冲区的存储方式如图所示。

Page 34: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

从上面三种不同图形显示模式的介绍,不难看出:各种显示模式在显示缓冲区存储方式上的明显差异,操作象素方法的难易程度相差也很大,所以,再次建议:程序员不要用直接操作显示缓冲区的办法来达到改变显示象素的目的,最好是通过 BIOS 内的中断功能来实现相应的功能,这样,所编写的程序能很方便地适应不同的图形显示模式。

Page 35: 第 9 章   BIOS 和 DOS 中断调用程序设计

9.2.1 9.2.1 字符属性字符属性 显示器的屏幕通常划分为行和列的二维系统,显示适配器就在行列组成的网格位置上显示字符。对应屏幕上的每个字符位置,主存空间都有相应的存储单元与之对应,因此可说是显示屏幕式“存储器的映像”。对应显示屏幕上的每个字符,在存储器中由连续的两个字节表示,一个字节表示 ASCII码,另一个字节保存字符的属性。

Page 36: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

属性值()属性值() 属性值()属性值() 显示效果显示效果0000000000000000 0000 无显示无显示0000000100000001 0101 黑底白字,下划线黑底白字,下划线0000011100000111 0707 黑底白字,正常显示黑底白字,正常显示0000111100001111 0F0F 黑底白字,高亮度黑底白字,高亮度0111000001110000 7070 白底黑字,反相显示白底黑字,反相显示1000011110000111 8787 黑底白字,闪烁黑底白字,闪烁1111000011110000 F0F0 白底黑字,反相闪烁白底黑字,反相闪烁

单色显示的属性值

7 6 5 4 3 2 1 07 6 5 4 3 2 1 0

背景背景 前景前景闪烁闪烁 亮度亮度

11 、单色字符属性、单色字符属性

Page 37: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

22、彩色字符显示、彩色字符显示

位号位号 77 6 5 46 5 4 3 2 1 03 2 1 0

属性属性字节字节

BLBL R G BR G B I R G BI R G B

闪烁选择闪烁选择 背景颜色背景颜色 前景颜色前景颜色

彩色字符显示属性字节

Page 38: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

110 棕

RGB 颜色

000 黑

001001 蓝

010010 绿

011 青

100100 红

101 品红

111 白

IRGB 颜色 IRGB 颜色

0000 黑 1000 灰

0001 蓝 1001 浅蓝

0010 绿 1010 浅绿

0011 青 1011 浅青

0100 红 1100 浅红

0101 品红 1101 浅品红

0110 棕 1110 黄

0111 白 1111 强度白

背景颜色组合背景颜色组合 前景颜色组合前景颜色组合

Page 39: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

3. 显示存储器 对于所有的显示适配器,文本方式下显示字符的原理是一对于所有的显示适配器,文本方式下显示字符的原理是一样的,所不同的是显存的起始地址不同,样的,所不同的是显存的起始地址不同,对于对于 MDAMDA ,显存的起,显存的起始地址为始地址为 B000:0000B000:0000;对于;对于 CGACGA 、、 EGAEGA 、、 VGAVGA 是是 B800:0000B800:0000..每每个字符的个字符的 ASCIIASCII码和属性码字节存放于两个连续的字节中码和属性码字节存放于两个连续的字节中。图。图形显示方式下,其显示缓冲区段地址为形显示方式下,其显示缓冲区段地址为 0A000H0A000H 。。

在在 25 X 8025 X 80 的文本显示方式下,屏幕可有的文本显示方式下,屏幕可有 20002000 个字符位个字符位置,因每个字符需要用两个字节,显存容量需要多少?如果显置,因每个字符需要用两个字节,显存容量需要多少?如果显存有存有 16K,16K,可保存几屏幕的数据?可保存几屏幕的数据?对对 CGA,EGACGA,EGA 和和 VGAVGA 的的 8080 列显列显示方式,示方式, 00页的起始地址是页的起始地址是 B800:0000,1B800:0000,1页的起始地址是页的起始地址是 B800:B800:1000,21000,2页的起始地址为页的起始地址为 B800:2000,3B800:2000,3页的起始地址为页的起始地址为 B800:30B800:3000 00 。。

如何计算一个字符在显存中的位置?如何计算一个字符在显存中的位置?

Page 40: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

Page 41: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

9.2.2 BIOS9.2.2 BIOS 显示中断调用显示中断调用 10H10H 中断调用为显示器中断,共有中断调用为显示器中断,共有 1717 种功 种功 能。下面列出几种主要功能的使用情况。能。下面列出几种主要功能的使用情况。

(( 11 )设置显示方式()设置显示方式( 00 号功能)号功能)入口参数:入口参数: AH=0AH=0 (功能号),(功能号), AL=AL=设置方式(设置方式( 0~70~7)。)。

出口参数:无。出口参数:无。

(( 22 )设置光标类型()设置光标类型( 11 号功能)号功能)入口参数:入口参数: AH=1AH=1 (功能号),(功能号), CH=CH= 光标开始行,光标开始行, CL=CL= 光标结光标结束行。束行。

出口参数:无。根据出口参数:无。根据 CXCX给出光标的大小。给出光标的大小。

Page 42: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

AL 显示方式

0 40×25 黑白文本方式

1 40×25彩色文本方式

2 80×25 黑白文本方式

3 80×25彩色文本方式

4 320×200彩色图形方式

5 320×200 黑白图形方式

6 640×200 黑白图形方式

7 80×25 黑白文本方式(单色显示卡)

Page 43: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

(( 33 )设置光标位置()设置光标位置( 22 号功能)号功能)

入口参数:入口参数: AH=2AH=2 (功能号),(功能号), BH=BH= 页号,页号, DH=DH=行号,行号, DL=DL=列列号号。。

出口参数:无。根据出口参数:无。根据 DXDX确定了光标位置。确定了光标位置。

(( 44 )读当前光标位置()读当前光标位置( 33 号功能)号功能)

入口参数;入口参数; AH=3AH=3 (功能号),(功能号), BH=BH= 页号页号。。

出口参数:出口参数: DH=DH=行号,行号, DL=DL=列号,列号, CX=CX= 光标大小。光标大小。

(( 55 )初始窗口或向上滚动()初始窗口或向上滚动( 66号功能)号功能)

入口参数:入口参数: AH=6AH=6,, AL=AL=上滚行数,上滚行数, CX=CX=上滚窗口左上角的行、上滚窗口左上角的行、列号。列号。 DX=DX=上滚窗口右下角的行、列号。上滚窗口右下角的行、列号。 BH=BH= 空白行的属性。空白行的属性。

出口参数:无。当滚动后,底部为空白输入行。出口参数:无。当滚动后,底部为空白输入行。

Page 44: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

(( 66)初始窗口或向下滚动()初始窗口或向下滚动( 77号功能)号功能)

入口参数:入口参数: AH=7AH=7,, AL=AL=下滚行数,下滚行数, CX=CX=下滚窗口左下滚窗口左上角的行、列号。上角的行、列号。 DX=DX=下滚窗口右下角的行、列号。下滚窗口右下角的行、列号。BH=BH= 空白行的属性。空白行的属性。

出口参数:无。当滚动后,顶部为空白输入行。出口参数:无。当滚动后,顶部为空白输入行。

(( 77)读当前光标位置的字符与属性()读当前光标位置的字符与属性( 88 号功能)号功能)

入口参数:入口参数: AH=08HAH=08H ,, BH=BH= 页号页号。。

出口参数:出口参数: ALAL 为读出的字符,为读出的字符, AHAH 为字符属性为字符属性。。

Page 45: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

(( 88 )在当前光标位置写字符和属性()在当前光标位置写字符和属性( 99 号功能)号功能)

入口参数:入口参数: AH=9AH=9 ,, BH=BH= 页号,页号, AL=AL=字符的字符的 ASCIIASCII 码,码,BL=BL=字符属性,字符属性, CX=CX=写入字符重复次数写入字符重复次数。。

出口参数:无。出口参数:无。

(( 99 )在当前光标位置写字符()在当前光标位置写字符( 1010 号功能)号功能)

入口参数:入口参数: AH=0AHAH=0AH ,, BH=BH= 页号,页号, AL=AL=字符的字符的 ASCIIASCII码,码, CX=CX=写入字符重复次数。写入字符重复次数。

出口参数:无。出口参数:无。

Page 46: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

(10(10 )显示字符串()显示字符串( 1313 号功能)号功能)ES:BP=ES:BP=串地址串地址CX=CX=串长度串长度DH,DL=DH,DL=起始行列起始行列BH=BH= 页号页号AL=0,BL=AL=0,BL= 属性属性串:串: char,char…char char,char…char 光标返回到起始位置光标返回到起始位置AL=1,BL=AL=1,BL= 属性属性串:串: char,char…char char,char…char 光标跟随串移动光标跟随串移动AL=2AL=2串:串: char,char…char char,char…char 光标返回起始位置光标返回起始位置AL=3AL=3串:串: char,char…char char,char…char 光标跟随串移动光标跟随串移动

Page 47: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

code segmentcode segment

assume cs:code assume cs:code

start:start: mov ch,5mov ch,5

mov cl,7mov cl,7

mov ah,1mov ah,1

int 10hint 10h

mov dh,5mov dh,5

mov dl,6mov dl,6

mov bh,0mov bh,0

mov ah,2mov ah,2

int 10hint 10h

mov ah,4chmov ah,4ch

int 21hint 21h

code endscode ends

end startend start

例 置光标开始行为例 置光标开始行为 55 ,结束行为,结束行为 77,并把它设置到第五行第六,并把它设置到第五行第六列列

设置光标位置(设置光标位置( 22 号功能)号功能)

入口参数:入口参数: AH=2AH=2 (功能号),(功能号), BH=BH= 页页号,号, DH=DH= 行号,行号, DL=DL= 列号。列号。

出口参数:无。根据出口参数:无。根据 DXDX 确定了光标位确定了光标位置。置。

设置光标类型(设置光标类型( 11 号功能)号功能)入口参数:入口参数: AH=1AH=1 (功能号),(功能号), CH=CH= 光标光标开始行,开始行, CL=CL= 光标结束行。光标结束行。出口参数:无。根据出口参数:无。根据 CXCX 给出光标的大小。给出光标的大小。

Page 48: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

例:编写清除全屏幕的程序例:编写清除全屏幕的程序clear segmentclear segment

assume cs:clearassume cs:clear

mov ah,6mov ah,6

mov al,0mov al,0

mov bh,7mov bh,7

mov ch,0mov ch,0

mov cl,0mov cl,0

mov dh,24mov dh,24

mov dl,79mov dl,79

int 10hint 10h

mov dx,2mov dx,2

mov ah,2mov ah,2

int 10hint 10h

mov ah,4chmov ah,4ch

int 21hint 21h

clear endsclear ends

end end

初始窗口或向上滚动(初始窗口或向上滚动( 66 号功能)号功能)

入口参数:入口参数: AH=6AH=6 ,, AL=AL= 上滚行数,上滚行数, CX=CX=上滚窗口左上角的行、列号。上滚窗口左上角的行、列号。 DX=DX= 上滚上滚窗口右下角的行、列号。窗口右下角的行、列号。 BH=BH= 空白行的空白行的属性。属性。

出口参数:无。当滚动后,底部为空白出口参数:无。当滚动后,底部为空白输入行。输入行。

设置光标位置(设置光标位置( 22 号功能)号功能)

入口参数:入口参数: AH=2AH=2 (功能号),(功能号), BH=BH=页号,页号, DH=DH= 行号,行号, DL=DL= 列号。列号。

出口参数:无。根据出口参数:无。根据 DXDX 确定了光确定了光标位置。标位置。

Page 49: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

例 清除左上角为(例 清除左上角为( 0000 )右下角为()右下角为( 2424 ,, 3939 )的窗口,初)的窗口,初始化为反相显示。该窗口相当于屏幕的左上角始化为反相显示。该窗口相当于屏幕的左上角

clear segmentclear segment assume cs:clearassume cs:clear mov ah,7mov ah,7 mov al,0mov al,0 mov bh,70hmov bh,70h mov ch,0mov ch,0 mov cl,0mov cl,0 mov dh,24mov dh,24 mov dl,39mov dl,39 int 10hint 10h mov dx,2mov dx,2 mov ah,2mov ah,2 int 10hint 10h mov ah,4chmov ah,4ch int 21hint 21hclear endsclear endsend end

设置光标位置(设置光标位置( 22 号功能)号功能)

入口参数:入口参数: AH=2AH=2 (功能号),(功能号), BH=BH= 页页号,号, DH=DH= 行号,行号, DL=DL= 列号。列号。

出口参数:无。根据出口参数:无。根据 DXDX 确定了光标位确定了光标位置。置。

初始窗口或向下滚动(初始窗口或向下滚动( 77 号功能)号功能)

入口参数:入口参数: AH=7AH=7 ,, AL=AL= 下滚行数,下滚行数, CX=CX= 下下滚窗口左上角的行、列号。滚窗口左上角的行、列号。 DX=DX= 下滚窗口右下滚窗口右下角的行、列号。下角的行、列号。 BH=BH= 空白行的属性。空白行的属性。

出口参数:无。当滚动后,顶部为空白输入出口参数:无。当滚动后,顶部为空白输入行。行。

Page 50: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

例 在屏幕中心显示小窗口例 在屏幕中心显示小窗口data segmentdata segment

esc_key equ 1bhesc_key equ 1bh

win_ulc equ 30win_ulc equ 30

win_ulr equ 8win_ulr equ 8

win_lrc equ 50win_lrc equ 50

win_lrr equ 16win_lrr equ 16

win_width equ 20win_width equ 20

data endsdata ends

code segmentcode segment

assume cs:code,ds:dataassume cs:code,ds:data

start:start:mov ah,2mov ah,2

mov mov dh,win_lrrdh,win_lrr

mov mov dl,win_ulcdl,win_ulc

mov mov bh,0bh,0

int int 10h10h

movmov cx,win_width cx,win_width

get_char:get_char:

movmov ah,1 ah,1

int int 21h21h

cmp al, esc_keycmp al, esc_key

jz exitjz exit

loop loop get_charget_char

movmov ah,6 ah,6

movmov al,1 al,1

mov mov ch,win_ulrch,win_ulr

mov mov cl,win_ulc cl,win_ulc

mov mov dh,win_lrrdh,win_lrr

mov mov dl,win_lrcdl,win_lrc

mov mov bh,7bh,7

int int 10h10h

jmp jmp startstart

exit:mov exit:mov ah,4chah,4ch

intint 21h 21h

code code endsends

endend

设置光标位置(设置光标位置( 22号功能)号功能)

入口参数:入口参数: AH=2AH=2(功能号),(功能号), BH=BH=页号,页号, DH=DH=行号,行号, DDL=L=列号。列号。

出口参数:无。根出口参数:无。根据据 DXDX确定了光标位确定了光标位置。置。

初始窗口或向上滚动初始窗口或向上滚动(( 66号功能)号功能)

入口参数:入口参数: AH=6AH=6 ,, ALAL==上滚行数,上滚行数, CX=CX= 上滚上滚窗口左上角的行、列号。窗口左上角的行、列号。DX=DX= 上滚窗口右下角的上滚窗口右下角的行、列号。行、列号。 BH=BH= 空白行空白行的属性。的属性。

出口参数:无。当滚动出口参数:无。当滚动后,底部为空白输入行。后,底部为空白输入行。

Page 51: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章例:在品红背景下,显示例:在品红背景下,显示 55 个浅绿色闪烁的星号个浅绿色闪烁的星号

code segmentcode segment

assume cs:codeassume cs:code

start:start:

mov mov ah,9ah,9

mov mov al,'*'al,'*'

mov mov bh,0bh,0

mov mov bl,0bl,0dadahh

mov mov cx,5cx,5

int int 10h10h

mov mov ah,4chah,4ch

intint 21h 21h

code code endsends

end startend start

在当前光标位置写字符在当前光标位置写字符和属性(和属性( 99 号功能)号功能)

入口参数:入口参数: AH=9AH=9 ,, BH=BH=页号,页号, AL=AL=字符的字符的 ASCIASCIII码,码, BL=BL=字符属性,字符属性, CCX=X=写入字符数。写入字符数。

出口参数:无。出口参数:无。

Page 52: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

在屏幕上以红底蓝字显示字符串“在屏幕上以红底蓝字显示字符串“ WORLD SCENERWORLD SCENERY”Y”data segmentdata segment

string db 'world scenear'string db 'world scenear'

len equ $-stringlen equ $-string

data endsdata ends

code segmentcode segment

assume cs:codeassume cs:code

start:start:mov ah,0mov ah,0

mov al,3mov al,3

int int 10h 10h

movmov bp,seg string bp,seg string

mov mov es,bp es,bp

mov bp,offset stringmov bp,offset string

mov cx,lenmov cx,len

mov dx,0mov dx,0

mov bl,41hmov bl,41h

mov al,0mov al,0

mov ah,13hmov ah,13h

int 10hint 10h

mov ah,4chmov ah,4ch

int 21hint 21h

code endscode ends

end startend start

设置显示方式(设置显示方式( 00 号功能)号功能)入口参数:入口参数: AH=0AH=0 (功能号),(功能号), AL=AL= 设设置方式(置方式( 0~70~7 )。)。出口参数:无。出口参数:无。

(10(10 )显示字符串()显示字符串( 1313 号号功能)功能)ES:BP=ES:BP= 串地址串地址CX=CX= 串长度串长度DH,DL=DH,DL= 起始行列起始行列BH=BH= 页号页号AL=0,BL=AL=0,BL= 属性属性串:串: char,char…char char,char…char 光标返回到起始位光标返回到起始位置置AL=1,BL=AL=1,BL= 属性属性串:串: char,char…char char,char…char 光标跟随移动光标跟随移动AL=2AL=2串:串: char,char…char char,char…char 光标返回起始位置光标返回起始位置AL=3AL=3串:串: char,char…char char,char…char 光标跟随移动光标跟随移动

Page 53: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

例 用直接写屏方式在屏幕第例 用直接写屏方式在屏幕第 55 行、第行、第 1010 列以黄色列以黄色 (0EH)(0EH) 显示显示字符串字符串 "Hello""Hello" 。。解:在文本显示方式下,每行显示解:在文本显示方式下,每行显示 8080 个字符,每个字符占个字符,每个字符占 22 个字节,所以,个字节,所以,显示一行需要显示一行需要 160160 个字节。若在第个字节。若在第 mm 行、第行、第 nn 列位置显示字符,则该位置所列位置显示字符,则该位置所对应存储单元的偏移量为:对应存储单元的偏移量为: m×160 + n×2m×160 + n×2 。。

..MODEL SMALLMODEL SMALL

.DATA.DATA   YellowYellow    EQUEQU    0EH0EH   MSG1MSG1    DBDB    "Welcome...""Welcome..."   CountCount    EQUEQU    $-MSG1$-MSG1.CODE.CODE   .STARTUP.STARTUP   MOV AX, 0B800HMOV AX, 0B800H   MOV ES, AX MOV ES, AX ; ;彩色显示器的显示缓冲区段地址彩色显示器的显示缓冲区段地址   MOV DI, 5MOV DI, 5   IMUL DI, 160 IMUL DI, 160 ;5 ;5 行所跳过的显示存储单元行所跳过的显示存储单元

Page 54: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

  MOV CX, 10MOV CX, 10

   SHL CX, 1SHL CX, 1 ;10 ;10 列所跳过的显示存储单元列所跳过的显示存储单元   ADD DI, CXADD DI, CX ; ; 第第 55 行、第行、第 1010 列之前所跳过的所有显示单列之前所跳过的所有显示单元元   MOV CX, CountMOV CX, Count

   LEA SI, MSG1 LEA SI, MSG1 ;CX: ;CX: 字符个数,字符个数, SI:SI: 显示字符首地址显示字符首地址   MOV AH, YellowMOV AH, Yellow ; ; 设置显示属性,即显示颜色设置显示属性,即显示颜色   .REPEAT.REPEAT    LODSBLODSB ;;取显示字符取显示字符   STOSWSTOSW ; ; 向显示缓冲区设置显示字符和属性向显示缓冲区设置显示字符和属性   .UNTILCXZ.UNTILCXZ

   .EXIT.EXIT    00

   ENDEND

Page 55: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

9.2.3 DOS9.2.3 DOS 显示功能显示功能

AHAH 功能功能 调用参数调用参数22

66

99

显示一个字符(检显示一个字符(检 CTRL_BREAK)CTRL_BREAK)

显示一个字符(不检显示一个字符(不检 CTRL_BREACTRL_BREAK)K)

显示字符串显示字符串

DL=DL= 字符;光标跟随移动字符;光标跟随移动DL=DL= 字符;光标跟随移动字符;光标跟随移动DS:DX=DS:DX= 串地址 串必须以串地址 串必须以‘‘ $“$“ 结尾结尾

Page 56: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

• 计算机与外设交换信息的过程中:计算机与外设交换信息的过程中:– 并行通信:多位数据通过多条数据线同时传送。并行通信:多位数据通过多条数据线同时传送。– 串行通信:多位数据通过同一条数据线按位传送。串行通信:多位数据通过同一条数据线按位传送。

并行通信就是把一个字符的各数位用几条并行通信就是把一个字符的各数位用几条线同时进行传输。与串行通信(一位一位传输)相线同时进行传输。与串行通信(一位一位传输)相比,在相同传输率下,并行通信的信息实际传输速比,在相同传输率下,并行通信的信息实际传输速度快、信息率高。但并行通信比串行通信所用电缆度快、信息率高。但并行通信比串行通信所用电缆多,随着距离的增加,电缆的开销会成为突出的问多,随着距离的增加,电缆的开销会成为突出的问题。所以,并行通信总是用在数据传输率要求较高,题。所以,并行通信总是用在数据传输率要求较高,而传输距离较短的场合。而传输距离较短的场合。

9.3 串行通信口 I/O

Page 57: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

串行通信可以分为两种类型:同步通信、异步通信。

异步通信异步通信一个字符一个字符地传输,每个字符一位一位地传输,传输一个字符时,以起始位开始,然后传输字符本身的各位,接着传输校验位,最后以停止位结束该字符的传输。一次传输的起始位、字符各位、校验位、停止位构成一组完整的信息,称为帧( Frame )。帧与帧之间可有任意个空闲位。起始位之后时数据的最低位。

Page 58: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

在异步通信中,每个字符都要用起始位作为字符的开始和结束的标志,占用了传输的时间,所以在数据块传送时,为了提高效率,就要去掉这些标志,采用同步通信。同步通信方式不给每个字符都加起始位和停止位,而把字符顺序的连接起来,组成一个数据块(首尾相连的数据串),把这样一个数据块称为一个信息桢。在数据的开始加上一个同步字符,而在信息的末尾加有一定的差错检验字符,其格式如下:

同步通信同步通信

同步字符 字符 1 字符 2 …… 字符 n 校验字符

数据块

Page 59: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

实现串行通信有专用的接口芯片,常用的有 USART( 通用同步 / 异步接收 /发送器 )—— 如 Intel8251 和UART( 通用异步接收 /发送器 )—— 如 Ins 8250 。

无论是 UART ,还是 USART ,均能实现数据发送时所需要的并串转换以及数据被 CPU 接收时所需要的串并转换。

Page 60: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

串行通信接口串行通信基础

起始位

最低位 最高位 奇偶位 停止位

数据位

起始位起始位 逻辑逻辑 00 11 位位数据位数据位 逻辑逻辑 00 或或 11 55 位、位、 66 位、位、 77 位、位、 88 位位校验位校验位 逻辑逻辑 00 或或 11 11 位或无位或无停止位停止位 逻辑逻辑 11 11 位、位、 1.51.5 位或位或 22 位位空闲位空闲位 逻辑逻辑 11 任意数量任意数量

异步通信的信息格式:

Page 61: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

并行通信中,传输速率以每秒钟传输多少字节来表示。而串行通信中,传输速率是用波特率来表示。所谓波特率是指单位时间内传送二进制数据的位数 (简写为 bps) 。在计算机里,每秒传输多少位和波特率的含义是完全一致的。但是要注意,在最初的定义上(波特率是每秒传输离散信号的数目),每秒传输多少位和波特率是不相同的。收、发双方的波特率必须一致。传输一位所需要的时间T叫“位周期”。

波特率和传输率波特率和传输率

例:计算串行传输 5 页,每页 80x25 个字符总共需要多少位?假设每个字符 8 位, 1 位起始位和 1 位终止位。计算传输上述五页所需要的时间。数据传输率分别为 2400bps 和 9600bps

Page 62: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

RS232 串行通信接口为了兼容各厂家生产的数据通信设备, 1960 年电子工业协会( Electronics Industries association ,EIA )制定了 RS-232 接口标准,以后又陆续发布了修订版本 RS-232A,RS-232B 和 RS-232C 。目前广泛应用于个人计算机上的 RS-232串行接口,他安装于 PC 机内的通信适配器版上。

PC 机上的 COM1、 COM2 接口,就是 RS-232C 接口,使用 9 针和 25 针连接器

Page 63: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

RS-232C采用负逻辑,且信号电平与 TTL 不兼容,规定逻辑“ 1” 在 -3V~-15V之间,逻辑“ 0” 在 +3V~+15V之间。RS-232C 不是 TTL电平的接口标准,当计算机与外设进行通信时,必须有相应的电平转换电路。通常采用的是 MC1488 和 MC1489电平转换器。

串行接口芯片 8250、 8251均使用 TTL电平,应使用电平转换电路与 RS-232C连接器连接。MC1488: TTL电平→ RS232电平 (用于发送方)MC1489: TTL电平← RS232电平 (用于接收方)

Page 64: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

IBM PC 通信端口 在微机系统中,可以有两个或多个端口连接到不同的外部设备上进行通信,如 IBM PC 和 80X86 兼容机可以连接4 个通信端口,他们的编号为 COM1—4(BIOS 编号为 COM0—3), 但程序每次只能对其中一个端口进行存取。当微机加电自检时,由加电自检程序来测试通用异步收发器的 4 个 COM 端口是否存在,如果微机系统中设置了 COM 端口,则设置的每个 COM 端口的 I/O 地址就写到 BIOS 数据区的 0040 : 0000—0040 : 0007 ,每个端口地址占用两个字节。如果没有连接串行端口, BIOS 数据区 的这几个单元的内容就成为 0 。可以用 DEBUG 查看 URAT 的端口地址。

保存在 BIOS 数据区的 COM 端口地址称为基地址,因为每个 COM 端口都包括一组8位的寄存器,程序员可以通过这些寄存器进行编程,以控制数据按设定的格式发送或接收数据。 BIOS 数据区的 COM 端口地址是第一个寄存器的地址。

Page 65: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

串行口功能调用

1、 DOS 串行通信口功能

使用 DOS 命令可以设置串行通信参数,如波特率,字长,校验位和终止位。

格式: MODE COMm:b ,p ,d , s

例如: MODE COM1 :24,O,8,1

说明:波特率用最高两位来表示, P 是校验位( N 无, O奇,    E 偶。

   端口号的分配: BIOS 位0-3, DOS 为1-4

Page 66: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

DOS 串行通信口功能调用

AHAH 功能功能 调用参数调用参数 返回参数返回参数33 从串行口读一个字从串行口读一个字

符符AL=AL= 输入的数输入的数据据

44 向串行口写一个字向串行口写一个字符符

DLDL=输出的数据=输出的数据

Page 67: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

例:INPUT_CHAR DB ?

:

MOV AH,3

INT 21H

MOV INPUT _CHAR,AL

BUFFER DB ‘HELLO’

BUF_LEN EQU $-BUFFER

:

MOV BX,SEG BUFFER

MOV DS,BX

MOV BX, OFFSET BUFFER

MOV CX,BUF_LEN

NEXT:

MOV DL ,[BX]

MOV AH,4

INT 21H

LOOP NEXT

Page 68: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

串行通信口 BIOS 功能调用 (int 14h)

AHAH 功能功能 调用参数调用参数 返回参数返回参数00 初始化串行口初始化串行口 AL=AL=初始化参数初始化参数 (( 书上图书上图 9.9.

1212 ))DX=DX= 通信口号(通信口号( COM1=0,COM1=0,COM2=1 etc)COM2=1 etc)

AH=AH= 通信口状态通信口状态(书上图(书上图 9.139.13 ))AL=AL= 调制解调器状调制解调器状态态

11 向串行口写字向串行口写字符符

ALAL=所写字符=所写字符DX=DX= 通信口号(通信口号( COM1=0,COM1=0,COM2=1 etc)COM2=1 etc)

写成功:写成功: AH=0AL=AH=0AL=字符。失败:字符。失败: (AH)(AH)7=7=

1 1 (AL)(AL)1-61-6== 通信口状态通信口状态

22 从串行口读字从串行口读字符符

DX=DX= 通信口号(通信口号( COM1=0,COM1=0,COM2=1 etc)COM2=1 etc)

写成功:写成功: AH=0AL=AH=0AL=字符。失败:字符。失败: (AH)(AH)7=7=

1 1 (AL)(AL)1-61-6== 通信口状态通信口状态

33 取串行口状态取串行口状态 DX=DX= 通信口号(通信口号( COM1=0,COM1=0,COM2=1 etc)COM2=1 etc)

AH=AH= 通信口状态通信口状态AL=AL= 调制解调器状调制解调器状态态

Page 69: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

例:两台 PC 机通过 COM2端口进行串行数据通信,编写一个汇编语言程序,要求从一台 PC 机上键盘上输入的字符传送到另一台 PC 机,若按下 ESC 键,则退出程序。在程序中, COM2端口初始化为 4800BPS , 8位数据,无校验, 1位终止位;

Page 70: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章.datamessage db 'serial communication via com2,4800,no p,1stop,8 bit data ',0ah,0dh,’$’ db 'any key press is sent to other PC ',0ah,0dh db 'press esc to exit','$'.code main proc mov ax,@data mov ds,ax mov ah,09 mov bx,offset message int 21h mov ah,0 mov dx,1 mov al,03ch int 14h

again: mov al,01 int 16h jz next mov ah,0 int 16h

Page 71: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章 cmp al,1bh je exit mov ah,1 mov dx,1 int 14h next: mov ah,3 mov dx,1 int 14h and ah,1 cmp ah,1 jne again mov ah,2 mov dx,1 int 14h mov dl,al mov ah,2 int 21h jmp againexit:mov ah,4ch int 21hmain endpend

Page 72: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

9.4 9.4 磁盘文件管理磁盘文件管理

9.4.1 9.4.1 BIOSBIOS磁盘存取功能 磁盘存取功能

9.4.2 9.4.2 DOSDOS磁盘存取功能 磁盘存取功能

Page 73: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

9.4.2 DOS9.4.2 DOS 磁盘存取功能磁盘存取功能 DOSDOS 功能调用中断(功能调用中断( INT 21HINT 21H )提供了两类磁)提供了两类磁

盘文件管理功能,盘文件管理功能,一类是一类是 FCBFCB 表控制方式,另表控制方式,另一类是文件代号式存取方式一类是文件代号式存取方式。。 当用户需要打开或建立一个文件时,必须提供文当用户需要打开或建立一个文件时,必须提供文件标识符。文件标识符用件标识符。文件标识符用 ASCII ZASCII Z 字符串表示。字符串表示。ASCII ZASCII Z 字符串是指文件标识符的字符串是指文件标识符的 ASCIIASCII 字符字符串后面再加串后面再加 11 个“个“ 0”0” 字符。文件标识符的字符字符。文件标识符的字符串包括驱动器名、路径名和文件名。其格式为串包括驱动器名、路径名和文件名。其格式为

[d:][path]filename[.exe][d:][path]filename[.exe]

其中其中 dd 为驱动器名,为驱动器名, pathpath 为路径名,为路径名, .exe.exe 为文件为文件名后缀。名后缀。

Page 74: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

11 .建立文件(.建立文件( 3CH3CH ))功能:按指定文件名建立文件。功能:按指定文件名建立文件。入口参数:(入口参数:( AHAH )=)= 3CH3CH ,, DSDS :: DXDX

指向指向 ASCII ZASCII Z 字符串的段地址和偏移地字符串的段地址和偏移地址,址,

(( CXCX )=文件属性。)=文件属性。出口参数:若操作成功,则出口参数:若操作成功,则 CFCF == 00 ,,(( AXAX )=文件代号;)=文件代号; 若操作失败,则若操作失败,则 CFCF == 11 ,(,( AXAX ))=错误代码。=错误代码。

Page 75: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

22.打开文件(.打开文件( 3DH3DH ))功能:打开由功能:打开由 ASCII ZASCII Z 串指定的文件。串指定的文件。入口参数:(入口参数:( AHAH )=)= 3DH3DH ,, DSDS :: DXDX 指指

向向 ASCII ZASCII Z 字符串的段地址和偏移地址,字符串的段地址和偏移地址, (( ALAL )=存取方式代码()=存取方式代码( 00 :读文件,:读文件,

11:写文件,:写文件, 22:读、写文件)。:读、写文件)。出口参数:若操作成功,则出口参数:若操作成功,则 CFCF == 00 ,(,( AA

XX )=文件代号;)=文件代号; 若操作失败,则若操作失败,则 CFCF== 11 ,(,( AXAX )=)=

错误代码。错误代码。

Page 76: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

33 .关闭文件(.关闭文件( 3EH3EH ))功能:关闭文件代号指定的文件。功能:关闭文件代号指定的文件。入口参数:(入口参数:( AHAH )=)= 3EH3EH ,(,( BXBX )=)=

文件代号。文件代号。出口参数:若操作成功,则出口参数:若操作成功,则 CFCF == 00 ;; 若操作失败,则若操作失败,则 CFCF == 11 ,(,( AXAX ))=错误代码。 =错误代码。

Page 77: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

44 .读文件(.读文件( 3FH3FH ))功能:按文件代号读取文件。功能:按文件代号读取文件。入口参数:(入口参数:( AHAH )=)= 3FH3FH ,(,( BXBX )=)=

文件代号,(文件代号,( CXCX )=要读取的字节数;)=要读取的字节数; DSDS :: DXDX 指向接收数据缓冲区的段地址指向接收数据缓冲区的段地址

和偏移地址。和偏移地址。出 口 参 数:若操作成功 ,则出 口 参 数:若操作成功 ,则 CFCF == 00 ,,

(( AXAX )=实际读入字节数,()=实际读入字节数,( AXAX ))== 00 ,文件结束;,文件结束;

若操作失败,则若操作失败,则 CFCF == 11 ,(,( AXAX ))=错误代码。=错误代码。

Page 78: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

55 .写文件(.写文件( 40H40H ))功能:按文件代号写文件。功能:按文件代号写文件。入口参数:(入口参数:( AHAH )=)= 40H40H ,(,( BXBX )=)=

文件代号,(文件代号,( CXCX )=要写入的字节数;)=要写入的字节数; DSDS :: DXDX 指向存放写入信息数据缓冲区指向存放写入信息数据缓冲区

的段地址和偏移地址。的段地址和偏移地址。出 口 参 数:若操作成功 ,则出 口 参 数:若操作成功 ,则 CFCF == 00 ,,

(( AXAX )=写入字节数;)=写入字节数; 若操作失败,则若操作失败,则 CFCF == 11 ,(,( AXAX ))=错误代码。=错误代码。

Page 79: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章 6 . 移动文件指针( 42H)

功能:移动由文件代号标志的文件读写指针的位置

入口参数 : 在 bx 预置文件代号,在 cx:dx 双字中预置移 动位移量,在 al 中预置移动方式

移动方式:

00h 移动后文件指针值 =0+ 移动位移量

01h 移动后文件指针值 = 当前文件指针值 + 移动位移量 02h 移动后文件指针值 = 文件尾值 + 移动位移量

出口参数: CF=0 表示移动成功,此时 CX:DX 双字中返回移动后文件指针值; CF=1 表示移动失败,此时AX 中返回值为 1 表示移动方式无效,为 6 表示无效的文件代号。

Page 80: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

77 .取.取 // 置文件属性(置文件属性( 43H43H ))功能:按文件代号写文件。功能:按文件代号写文件。入口参数:(入口参数:( AHAH )=)= 43H43H ,, DSDS :: DXDX 指向指向 AA

SCII ZSCII Z 串的段地址和偏移地址。串的段地址和偏移地址。 (( ALAL )=)= 00 ,取文件属性,(,取文件属性,( ALAL )=)= 11 ,,置文件属性;置文件属性;

置文件属性时,(置文件属性时,( CXCX )=新文件属性)=新文件属性(低字节)。(低字节)。

出口参数:若操作成功,则出口参数:若操作成功,则 CFCF == 00 ,若为取属,若为取属性,(性,( CXCX )=文件属性;)=文件属性;

若操作失败,则若操作失败,则 CFCF== 11 ,(,( AXAX )=错误)=错误代码。代码。

Page 81: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

data segment

fname db 'c:\masm\file1.dat',0

dat db 80h dup(0)

dat1 db 80h dup(0)

data ends

code segment

assume cs:code,ds:data,es:data

start:mov ax,data

mov ds,ax

mov es,ax

mov dx,offset fname

mov cx,0

mov ah,3ch

int 21h

mov si,ax

new: mov bx,0

mov cx,20h era:mov ah,01h int 21h mov dat[bx],al inc bx loop era mov dat[bx],0ah mov dx,offset dat mov cx,20h mov bx,si mov ah,40h int 21h mov bx,si mov ah,3eh int 21h mov ah,4ch int 21h code endsend start

例:从键盘输入 20 个字符存放到利用扩充文件管理方式建立的文件中。

Page 82: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

data segment fname db 'c:\masm\file1.dat',0 fname1 db 'c:\masm\file2.dat',0 dta db 80h dup(0) dta1 db 80h dup(0)data endscode segment assume cs:code,ds:datastart:mov ax,data mov ds,ax mov es,ax mov dx,offset fname mov al,0 mov ah,3dh int 21h mov si,ax mov bx,si mov dx,offset dta1 mov cx,10h mov ah,3fh int 21h

mov di,ax mov ah,3eh int 21h mov dx,offset fname1 mov cx,0 mov ah,3ch int 21h mov si,ax mov dx,offset dta1 mov cx,di mov bx,si mov ah,40h int 21h mov bx,si mov ah,3eh int 21h mov ah,4ch int 21hcode endsend start

例:从文件 file1 中读取 10 个字符到 file2 文件中

Page 83: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章data segment fname db 'c:\masm\file1.dat',0 data1 db 8,?,8 dup(?) dat1 db 3000h dup(0) src dw 0ah mess1 db 'reading from n1=?',10,13,'$' mess2 db 'long n2=?',10,13,'$' mess3 db 10,13,'$'data endsstack segment stack dw 100 dup(0) top label wordstack endscode segmentmain proc far assume cs:code,ds:data,ss:stackstart:push ds sub ax,ax push ax mov ax,data mov ds,ax mov es,ax mov ax,stack mov ss,ax mov dx,offset mess1 mov ah,09h int 21h

call input dec di mov si,di mov dx,offset mess3 mov ah,9 int 21h mov dx,offset mess2 mov ah,9 int 21hcall input mov dx,offset mess3 mov ah,09h int 21h mov dx,offset fname mov al,0 mov ah,3dh int 21h mov bx,ax mov cx,0 mov dx,si mov al,0 mov ah,42h int 21h

例:从文件 FILE1.DAT 中读文件从 N1 起,长度为 N2 的字符串,并在屏幕中显示。 N1 N2 为十进制数。

Page 84: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章 mov dx,offset dat1 mov cx,di mov ah,3fh int 21h mov di,ax mov ah,3eh int 21h mov dx,offset mess3 mov ah,09h int 21h mov dx,offset dat1 mov al,'$' mov bx,di mov dat1[bx],al mov dx,offset dat1 mov ah,9 int 21h mov ah,4ch int 21hmain endp

input proc near mov dx,offset data1 mov ah,0ah int 21h mov bx,1 mov al,data1[bx] mov ah,0 mov cx,ax mov bx,2 mov di,0loop1: mov al,data1[bx] sub al,30h mov ah,0 push ax mov dx,offset mess3 mov ah,9 int 21h mov ax,di mul src mov di,ax pop ax add ax,di mov di,ax inc bx loop loop1 ret

input endpcode endsend start

Page 85: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

9.4.1 BIOS9.4.1 BIOS 磁盘存取功能磁盘存取功能 BIOSBIOS 磁盘操作磁盘操作 INT 13HINT 13H 处理的记录都是一个扇区的大小,处理的记录都是一个扇区的大小,都是以实际的磁道号和扇区号寻址的。都是以实际的磁道号和扇区号寻址的。

读、写和检查磁盘文件之前,都要把下列寄存器初始化:读、写和检查磁盘文件之前,都要把下列寄存器初始化:AHAH:子功能号(读、写、检查或格式化)。:子功能号(读、写、检查或格式化)。ALAL:扇区数。:扇区数。CHCH:柱面:柱面 // 磁道号(磁道号( 00 为起始号)。为起始号)。CLCL:起始的扇区号(:起始的扇区号( 11 为起始号)。为起始号)。DHDH:磁头:磁头 // 盘面号(对软盘是盘面号(对软盘是 00 或或 11 )。)。DLDL :驱动器号(软盘::驱动器号(软盘: 00 =驱动器=驱动器 AA ,, 11 =驱动器=驱动器 BB ,…,,…,

硬盘:硬盘: 80H80H=驱动器=驱动器 11 ,, 81H81H=驱动器=驱动器 22 ,…。),…。)ESES:: BXBX:数据区中:数据区中 I/OI/O 缓冲区的地址。缓冲区的地址。

Page 86: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

11 .. 00 号功能号功能功能:复位磁盘系统。功能:复位磁盘系统。入口参数:(入口参数:( AHAH )=)= 00 。。出口参数:无。出口参数:无。这个操作执行对磁盘控制器的硬件复位。如果在这个操作执行对磁盘控制器的硬件复位。如果在

其他磁盘操作之后调用这个功能,则返回一系其他磁盘操作之后调用这个功能,则返回一系列错误。列错误。

22 .. 11 号功能号功能功能:读磁盘状态。功能:读磁盘状态。入口参数:(入口参数:( AHAH )=)= 11 。。出口参数:(出口参数:( ALAL )中返回状态字节。)中返回状态字节。

Page 87: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章33 .. 22 号功能号功能功能:从指定磁盘的指定位置读取数据。功能:从指定磁盘的指定位置读取数据。入口参数:(入口参数:( AHAH )=)= 22

(( ALAL )=扇区数,()=扇区数,( CHCH ),(),( CLCL )=磁道号,扇区号)=磁道号,扇区号 (( DHDH ),(),( DLDL )=磁头号,驱动器号)=磁头号,驱动器号 (( ESES :: BXBX ):数据缓冲区地址):数据缓冲区地址出口参数:读成功,(出口参数:读成功,( AHAH )=)= 00 ,(,( ALAL )=读出的扇区数;)=读出的扇区数; 读失败,(读失败,( AHAH )=出错代码。)=出错代码。44 .. 33 号功能号功能功能:向指定磁盘的指定位置写数据。功能:向指定磁盘的指定位置写数据。入口参数:(入口参数:( AHAH )=)= 33

(( ALAL )=扇区数,()=扇区数,( CHCH ),(),( CLCL )=磁道号,扇区号)=磁道号,扇区号 (( DHDH ),(),( DLDL )=磁头号,驱动器号)=磁头号,驱动器号 (( ESES :: BXBX ):数据缓冲区地址):数据缓冲区地址出口参数:写成功,(出口参数:写成功,( AHAH )=)= 00 ,(,( ALAL )=写入的扇区数;)=写入的扇区数; 写失败,(写失败,( AHAH )=出错代码。 )=出错代码。

Page 88: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

55 .. 44 号功能号功能功能:检验磁盘扇区。功能:检验磁盘扇区。入口参数:(入口参数:( AHAH )=)= 44

(( ALAL )=扇区数,()=扇区数,( CHCH ),(),( CLCL )=磁道号,扇区号)=磁道号,扇区号(( DHDH ),(),( DLDL )=磁头号,驱动器号)=磁头号,驱动器号出口参数:检查成功,(出口参数:检查成功,( AHAH )=)= 00 ,(,( ALAL )=检验的扇)=检验的扇

区数; 区数; 检查失败,(检查失败,( AHAH )=出错代码。)=出错代码。

Page 89: 第 9 章   BIOS 和 DOS 中断调用程序设计

安徽理工大学 计算机科学与技术系 李敬兆 《汇编语言》 第 9 章

本章小结本章小结 对外设进行控制,使用其完成输入对外设进行控制,使用其完成输入 // 输输出工作。汇编语言能直接控制硬件工作,因出工作。汇编语言能直接控制硬件工作,因此成为编写高性能输入此成为编写高性能输入 // 输出程序最有效的输出程序最有效的程序设计语言。程序设计语言。

本章在中断调用指令的基础上详细讲解本章在中断调用指令的基础上详细讲解了了 BIOSBIOS 中断调用和中断调用和 DOSDOS 系统功能调用的使用系统功能调用的使用方法。分别介绍了键盘、显示器、磁盘文件方法。分别介绍了键盘、显示器、磁盘文件的输入的输入 // 输出方法,以及两种调用的区别,输出方法,以及两种调用的区别,并举例说明了常见的输入并举例说明了常见的输入 // 输出程序的编写输出程序的编写方法。在今后如果用到中断调用的其他功能,方法。在今后如果用到中断调用的其他功能,可以查看有关资料。可以查看有关资料。