20
汇汇汇汇汇汇汇汇 汇汇汇 BIOS 汇 DOS 汇汇 汇汇 I/O 汇汇汇 I/O 汇汇汇 I/O 汇汇汇汇汇 I/O 汇汇汇 BIOS 汇 DOS 汇汇

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

Embed Size (px)

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

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

汇编语言程序设计

第九章 BIOS和 DOS中断

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

● 串行通信口 I/O

第九章 BIOS 和 DOS 中断

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

子程序调用

主程序

……

CALL SUBP

……

子程序

……

……

RET

DOS/BIOS 调用

源程序

……

INT n

……

DOS/BIOS 例行程序 …… ……

IRET

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

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

汇编语言程序设计

第九章 BIOS和 DOS中断

BIOS 和 DOS 基本调用

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

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

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

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

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

汇编语言程序设计

第九章 BIOS和 DOS中断

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

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

INT 21H ;DOS 调用

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

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

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

INT 21H ; DOS 调用

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

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

对应一个扫描码

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

(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 )

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

例 : 输入字符串到缓冲区 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

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

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 色属

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

(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 调用

定义窗口

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

汇编语言程序设计

第九章 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 调用

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

例 : 在 屏 幕 上 以 红 底 兰 字 显 示 字 符 串 : “ 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

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

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

AH 功 能 调 用 参 数

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

光标跟随字符移动

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

光标跟随字符移动

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

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

光标跟随串移动

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

汇编语言程序设计

第九章 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

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

汇编语言程序设计

第九章 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 = 状 态 字节

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

汇编语言程序设计

第九章 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

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

汇编语言程序设计

第九章 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

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

汇编语言程序设计

第九章 BIOS和 DOS中断

4. 串行通信口 I/O

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

AH 功 能 调用参数 返回参数

3 读字符 AL=读入的数据

4 写字符 DL=写入的数据

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

汇编语言程序设计

第九章 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状态

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

汇编语言程序设计

第九章 BIOS和 DOS中断

例 1. 从串行口输入字符

MOV AH, 3 ;读字符

INT 21H ; DOS 调用

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

… …

CHAR DB 0

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

汇编语言程序设计

第九章 BIOS和 DOS中断

例 2. 初始化 COM1 端口

MOV AH, 0 ;读字符

MOV DX, 0 ; COM1

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

INT 14H ; BIOS 调用

— END —