● 键盘 I/O ● 显示器 I/O ● 打印机 I/O ● 串行通信口 I/O

Preview:

DESCRIPTION

第九章 BIOS 和 DOS 中断. ● 键盘 I/O ● 显示器 I/O ● 打印机 I/O ● 串行通信口 I/O. 子程序调用. 主程序 …… CALL SUBP ……. 子程序 …… …… RET. DOS/BIOS 调用. 源程序 …… INT n ……. DOS/BIOS 例行程序 …… …… IRET. 实现机制不同. BIOS 和 DOS 基本调用 调用方法: 1、将 调用参数 装入 指定的 寄存器中; 2、 BIOS 或 DOS 功能号 装入 AH ; - PowerPoint PPT Presentation

Citation preview

汇编语言程序设计

第九章 BIOS和 DOS中断

● 键盘 I/O● 显示器 I/O● 打印机 I/O

● 串行通信口 I/O

第九章 BIOS 和 DOS 中断

子程序调用

主程序

……

CALL SUBP

……

子程序

……

……

RET

DOS/BIOS 调用

源程序

……

INT n

……

DOS/BIOS 例行程序 …… ……

IRET

实现机制不同实现机制不同

汇编语言程序设计

第九章 BIOS和 DOS中断

BIOS 和 DOS 基本调用

调用方法:1 、将调用参数装入指定的寄存器中;2 、 BIOS 或 DOS 功能号装入 AH ;

3 、如需子功能号,把它装入 AL ;

4 、按中断号调用 DOS 或 BIOS 中断(INT);

5 、检查或取得返回参数。

汇编语言程序设计

第九章 BIOS和 DOS中断

例: DOS 调用:键盘输入,显示输出

MOV AH, 01 ;DOS 功能号 : 键盘输入

INT 21H ;DOS 调用

MOV CHAR, AL ; 返回参数 : (AL)

MOV DL, ’A’ ; 调用参数 : 输出字符

MOV AH, 02 ; DOS 功能号 : 显示输出

INT 21H ; DOS 调用

1. 1. 键盘键盘 I/OI/O

(1) BIOS 键盘中断 ( INT 16HINT 16H )

AH 功能 返回参数

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

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

AH= 扫描码

如 ZF=1 ,缓冲区空

2 取键盘状态字节 AL= 键盘状态字节 字符数字键 字符码为 ASCII 码 功能键、控制键 字符码为 0

对应一个扫描码

(2)DOS 键盘中断 ( INT 21HINT 21H )

AHAH 功 能 调用参数 返回参数

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

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

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

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

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

检测 Ctrl-Break

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

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

CC 清除键盘缓冲区, AL= 键盘功能号

并调用一种键盘功能 ( 1 , 6 , 7 , 8 或 A )

例 : 输入字符串到缓冲区 STRING DATA SEGMENTDATA SEGMENT

MAXLEN DB 32 MAXLEN DB 32 ,0, 32 DUP(?)

ACTLEN DB ? MAXLEN DB 32 ,33 DUP(?)

STRING DB 32 DUP(?)

DATA ENDSDATA ENDS

CODE SEGMENT…

LEA DX,MAXLEN

MOV AH,0AH0AH

INT 21H…

CODE ENDS

END

325

68H61H70H70H79H0DH

MAXLENACTLEN

STRING

2.2.显示器显示器 I/OI/O 文本方式 ASCII 字

7 6 5 4 3 2 1 0

7 6 5 4 3 2 1 0

前景000 = 黑111 = 白

亮度0 = 正常亮度1 = 加强亮度

闪烁0 = 正常显示1 = 闪烁显示

背景000 = 黑111 = 白

单色属性

7 6 5 4 3 2 1 0

前景闪烁

背景BL R G B I R G B16 色属

(1) BIOS 显示中断 INT 10H

功能号 AH=0,1, 2, 3, 5, 6, 7, 8, 9, 0AH, 0EH 13H (p.328)

例:清除屏幕 mov ah, 6 ; 屏幕初始化

mov al, 0 ; 全屏空白mov bh, 7 ; 卷入行属性mov ch, 0 ; 左上角行号mov cl, 0 ; 左上角列号mov dh, 24 ; 右下角行号mov dl, 79 ; 右下角列号int 10h ; BIOS 调用

定义窗口

汇编语言程序设计

第九章 BIOS和 DOS中断

例 : 在品红背景下,显示 5 个浅绿色闪烁的星号。

MOV AH , 09 ;光标位置下显示

MOV AL ’, *’ ;显示字符

MOV BH , 0 ;显示页 0

MOV BL , 0DAH ; 1 101 1010 ( 表 9.7)

MOV CX , 05 ;显示次数 INT 10H ; BIOS 调用

例 : 在 屏 幕 上 以 红 底 兰 字 显 示 字 符 串 : “ WORLD SCENERY” STRING DB ‘WORLD SCENERY’ ; 定义在 ES 段 LEN_TR DW 13

┇MOV AL , 3 ;80×25, 16 色文 本方式MOV AH , 0INT 10HMOV BP , SEG STRINGMOV ES , BP ; 串地址 ES:BP

MOV BP , OFFSET STRING MOV CX , LEN_STR ; 串长度 MOV DX , 0 ; 起始行列MOV BX , 0041H ;0100

0001 (属性)MOV AL , 1 ; 子功能MOV AH , 13H ; 显示字符串INT 10H

(2) DOS 显示功能调用中断 INT 21HINT 21H

AH 功 能 调 用 参 数

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

光标跟随字符移动

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

光标跟随字符移动

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

串必须以串必须以 $$ 结束结束,

光标跟随串移动

汇编语言程序设计

第九章 BIOS和 DOS中断

例:显示字符串

MESSAGE DB ‘The sort operation is finished.’,13,10,’$’

… …

MOV MOV AHAH ,, 99

MOV DXMOV DX ,, SEG MESSAGESEG MESSAGE

MOV MOV DSDS ,, DXDX

MOV MOV DXDX ,, OFFSET MESSAGEOFFSET MESSAGE

INT 21HINT 21H

汇编语言程序设计

第九章 BIOS和 DOS中断

3. 3. 打印机打印机 I/OI/O (p.336)

INT AH 功 能 调用参数 返回参数

2121HH 55 打印一个字符 DL = 字符  

17H 0 打印一个字符 AL = 字符 AH = 状 态 字节

    并回送状态字节 DX = 打印机号  

17H 1 初始化打印机 DX = 打印机号 AH = 状 态 字节

    回送状态字节    

17H 2 回送状态字节 DX = 打印机号 AH = 状 态 字节

汇编语言程序设计

第九章 BIOS和 DOS中断

例 : 打印字符串 TEXT ( DOS )

TEXT DB ‘Hello , everybody!’

COUNT EQU $ - TEXT ;COUNT=17

……

MOV CX , COUNT

MOV BX,0

NEXT: MOV AH,5MOV AH,5

MOV DL,TEXT[BX]MOV DL,TEXT[BX]

INT 21HINT 21H

INC BX

LOOP NEXT

汇编语言程序设计

第九章 BIOS和 DOS中断

例 : 打印字符串 TEXT ( BIOS )

TEXT DB ‘Hello , everybody!’

COUNT EQU $ - TEXT

……

MOV CX, COUNT

MOV BX, 0

NEXT: MOV AH, 0MOV AH, 0

MOV AL,TEXT[BX]MOV AL,TEXT[BX]

MOV DX,0MOV DX,0 ;; 打印机号打印机号 INT 17HINT 17H

INC BX

LOOP NEXT

汇编语言程序设计

第九章 BIOS和 DOS中断

4. 串行通信口 I/O

(1)DOS 串行通信口功能 (INT 21H)

AH 功 能 调用参数 返回参数

3 读字符 AL=读入的数据

4 写字符 DL=写入的数据

汇编语言程序设计

第九章 BIOS和 DOS中断

( 2 ) BIOS 串行通信口功能 (INT 14H)

AH 功 能 调用参数 返回参数

0 初始化串行通信口 AL=初始化参数 AH=通信口状态

DX=通信口号 AL=modem状态

1 向通信口写字符 AL=所写字符 成功: AL=字符

DX=通信口号 失败: AH=口状态

2 从通信口读字符 DX=通信口号 成功: AL=字符

COM1=0,COM2=1 失败: AH=口状态

3 取通信口状态 DX=通信口号 AH=通信口状态

COM1=0,COM2=1 AL=modem状态

汇编语言程序设计

第九章 BIOS和 DOS中断

例 1. 从串行口输入字符

MOV AH, 3 ;读字符

INT 21H ; DOS 调用

MOV CHAR, AL ; (AL)= 读入字符

… …

CHAR DB 0

汇编语言程序设计

第九章 BIOS和 DOS中断

例 2. 初始化 COM1 端口

MOV AH, 0 ;读字符

MOV DX, 0 ; COM1

MOV AL, 0C3H ;4800 , n , 1 , 8

INT 14H ; BIOS 调用

— END —