汇编语言教案第5章.ppt
合集下载
第5章 汇编语言程序设计20PPT课件
第5章 汇编语言程序设计
第5章 汇编语言程序设计
5.1 汇编语言的基本概念
汇编语言是一种采用助记符表示的程序设计语言, 即用助记符来表示指令的操作码和操作数,用标 号或符号代表地址、常量或变量。
汇编语言编写的程序能够直接利用硬件系统的特 性直接对位、字节、字寄存器或存储单元、I/O端 口进行处理,同时也能直接使用CPU指令系统提供 的各种寻址方式。
(小于)、GT(大于)、LE(小于等于)、GE (大于等于) (4)分析运算符:SEG、OFFSET、TYPE、SIZE和 LENGTH (5)合成运算符:PTR、THIS、SHORT
5.3 伪指令语句
5.3.1 数据定义伪指令 5.3.2 符号定义伪指令 5.3.3 段定义伪指令 5.3.4 模块定义与连接伪指令 5.3.5 处理器选择伪指令
汇编程序时最早也是最成熟的一种系统软件。 汇编程序的功能如下:
用汇编语言编 写的源程序
汇编程序
目标程序
5.2汇编语言源程序的格式
5.2.1 分段结构 5.2.2 汇编语言语句的类型和格式
5.2.1 分段结构
汇编语言源程序的结构是分段结构形式,一个汇 编语言源程序由若干段(SEGMENT)组成,每个段 以SEGMENT语句开始,以ENDS语句结束。整个源 程序的结尾是END语句。
5.3.1 数据定义伪指令
数据定义伪指令的用途是定义一个变量的类型, 给操作数赋值,或者仅给变量分配存储单元而不 赋予特定的值
数据定义伪指令的一般格式为:
[变量名] 作数……]
伪指令定义符
操作数[,操
数据定义伪指令定义符后面的操作数可以是 常数、表达式或字符串,但每项操作数的值不能 超过由伪指令定义符所定义的数据类型限定的范 围。
第5章 汇编语言程序设计
5.1 汇编语言的基本概念
汇编语言是一种采用助记符表示的程序设计语言, 即用助记符来表示指令的操作码和操作数,用标 号或符号代表地址、常量或变量。
汇编语言编写的程序能够直接利用硬件系统的特 性直接对位、字节、字寄存器或存储单元、I/O端 口进行处理,同时也能直接使用CPU指令系统提供 的各种寻址方式。
(小于)、GT(大于)、LE(小于等于)、GE (大于等于) (4)分析运算符:SEG、OFFSET、TYPE、SIZE和 LENGTH (5)合成运算符:PTR、THIS、SHORT
5.3 伪指令语句
5.3.1 数据定义伪指令 5.3.2 符号定义伪指令 5.3.3 段定义伪指令 5.3.4 模块定义与连接伪指令 5.3.5 处理器选择伪指令
汇编程序时最早也是最成熟的一种系统软件。 汇编程序的功能如下:
用汇编语言编 写的源程序
汇编程序
目标程序
5.2汇编语言源程序的格式
5.2.1 分段结构 5.2.2 汇编语言语句的类型和格式
5.2.1 分段结构
汇编语言源程序的结构是分段结构形式,一个汇 编语言源程序由若干段(SEGMENT)组成,每个段 以SEGMENT语句开始,以ENDS语句结束。整个源 程序的结尾是END语句。
5.3.1 数据定义伪指令
数据定义伪指令的用途是定义一个变量的类型, 给操作数赋值,或者仅给变量分配存储单元而不 赋予特定的值
数据定义伪指令的一般格式为:
[变量名] 作数……]
伪指令定义符
操作数[,操
数据定义伪指令定义符后面的操作数可以是 常数、表达式或字符串,但每项操作数的值不能 超过由伪指令定义符所定义的数据类型限定的范 围。
第05章汇编语言及程序设计ppt课件
汇编语言 源程序
汇编
目标程序
汇编程序
一一对应
汇编语言的指令
机器语言的指令
汇编语言程序设计的特点:
➢ 汇编语言是面向机器的语言,CPU不同的机器有不同 的汇编语言
➢ 可以充分利用机器的硬件功能和结构特点
➢ 可有效地加快程序的执行速度,减少目标程序所占用 的存储空间
➢ 可以对输入/输出端口进行控制,实时性能好 ➢ 汇编语言程序移植性、通用性、可读性差
第 5 章 程序设计及汇编语言
内容安排
一. 程序设计步骤 二. 程序设计 三. 汇编语言及汇编程序 四. 汇编语言源程序格式及实例 五. 上机操作
§5.1 程序设计步骤
(1〕分析问题 (2〕建立数学模型 (3〕确定算法 (4〕绘制程序流程图 (5〕内存空间分配 (6〕编制程序与静态检查 (7〕程序调试〔实验)
[名字] DW <表达式或数据项表> 功能:表达式或项表中的每一项是一个/两个字
节数,他们从符号名地址开始按字节连续存放, 如:直D到1 表中DB数据12H项, 结12H束 12H
D1 DB 3 DUP (12H) MOV AX, D1
注意:① 表达式或数据项表多于一项时,项与项之间用 逗号“,”或空格分隔
MOV BL,0FFH ;将FFH送入BL寄存器
LOut: MOV AL,BL
OUT 73H,AL ;将结果的标志数据输出到 73H端口
HLT
;暂停
Lw10: MOV BL,00H
JMP LOut
L10to20: MOV BL,88H
JMP LOut
3. 循环程序
强制CPU重复执行某一指令系列〔程序段〕的一种程序 结构形式
组成:
汇编语言程序设计(第二版)第五章PPT课件
MACRO retnum mov al,retnum mov ah,4ch int 21h ENDM
;;带有形参retnum ;;宏定义中使用参数
宏调用
宏名 [实参表]
start: mainbegin dispmsg string mainend 0 end start
;宏调用,建立DS内容 ;宏调用,显示字符串 ;宏调用,返回DOS
过程名 ENDP
➢要 调 用 带➢参过数程声过明程伪定指义令:的用过于程事,先声不明应过采程用的结构 CALL指令过,程因名为比较PR烦O琐TO 调用距离 语言类型, 参数:类型 ➢应该采用过程调用伪指令INVOKE ➢使 用 INV➢O过K程E调伪用伪指指令令的 前 提 是 需 要 用 PROTO伪指令对过程IN进VO行K声E 明过程名,参数,...
mov al,_a
imul _c
mov cx,4
imul cx
例5.1-1/2
;bx中为b2 ;ax中为4ac
例5.1-2/2
.if sword ptr bx >= ax ;比较二者大小 mov tag,1
;第一分支体:条件满足,tag←1 .else
mov tag,0 ;第二分支体:条件不满足,tag←0 .endif .exit 0
mov bx,ax mov ax,0 .ELSE * jmp @C0003 *@C0001: dec ax .ENDIF *@C0003:
.data
_a
sbyte ?
_b
sbyte ?
_c
sbyte ?
tag byte ?
.code
.startup
mov al,_b
imul al
汇编语言程序设计ppt课件
3.用注释行说明程序,便于阅读和修改调试和修改。
1
9
常用程序结构: 顺序程序、循环程序、分支程序、查表程序、子程
2. 顺序与循环程序设计
❖5.2.1 顺序程序设计(又称简单程序) 既无分支,又无循环,按照顺序执行 可完成一定的基本功能,是编写复杂程序的 基础
10
例1:将一个字节内的两个BCD码拆开并变成ASCII码, 存入两个RAM单元。BCD码放在内RAM的20H, 转换后高半字节放到21H,低字节放22H。
ROM
20H BCDH BCDL
SWAP A ORL A, #30H MOV 21H, A SJMP $
;BCDH数送A的低4位 21H 0011 BCDH ;完成转换 @R0 22H 000101 B0C0D0L0
;存数
END
12
回目录 上页 下页
5.2.2 循环程序
包含多次重复执行的程序段,循环结构使程序紧凑。
11
回目录 上页 下页
程序:
ORG 1000H
MOV R0, #22H ;R0 22H MOV @R0,#0 ; 22H 0 MOV A, 20H ;两个BCD数送A
A
B0C0D01H01 B0BCC0DD0LH0
XCHD A, @R0 ;BCDL数送22H ORL 22H, #30H ;完成转换
表示程序结构和程序功能
美国国家标准化协会ANSI(American National
Standard Institute)设定了一些常用的流程图符号如图所示:
开始
起止框
或
流程线
输入输出框 判断框
处理框
连接点 图:常用流程图符号
Y
?
第5章 汇编语言程序设计ppt课件
;段分配
START:MOV AX,DATA MOV DS,AX MOV AL,BUF1 ADD AL,BUF2 MOV SUM,AL MOV AH,4CH INT 21H
CODE ENDS END START
;填装数据段寄存器DS ;取第一个加数 ;和第二个加数相加
代 码 段
;返回DOS状态 ;CODE段结束 ;整个源程序结束
第5章 汇编语言程序设计
5.1 汇编语言程序格式 5.2 常用伪指令 5.3 汇编语言的编写 5.4 DOS功能调用 5.5 汇编语言设计
最新课件
教学重点
本章介绍程序结构、伪指令、DOS功能调用。 重点:汇编语言程序的基本结构;
伪指令及其使用方法; DOS功能调用; 基本的汇编语言程序设计方法。 难点:DOS功能调用的应用 汇编语言程序的设计
算术运算符
运 算
逻辑运算符
符
及 关系运算符
表
达 式
分析运算符
综合运算符
+、—、*、/、MOD
与数学运算符的意义相同。
A取N模D是、取OR余、数N。OT、XOR E例运Q:算、82结NEM果、O是LD一T、1个6G常;T数、结.L果E、为G2 E 两个2表0H达M式O比D较7时; ,结表果达为式4表示 方法/性质要相同 关时SSEI系Z,GE成为、、立全OT,YF0PF结SE果ET为、全LE1;NG不T成H、立 例把T规等偏H如存定价移IS:储存于地、指单储址MP令元OT单RV地M元OB址的XV分,性B解0X质;,为3段2地EQ址4和5
作用:由编程者按照一定的规则来定义的一种较“宏 大”的指令,包括多条指令或伪指令 。
最新课件
例题1
SEGMENT
ENDS
汇编语言PPT课件
使两个FET均截止,然后方可作高阻抗 MCS-51单片机的硬件资源
湘
但在P0口连接外部存储器时,由于访问外部存储
潭 器期间,CPU会自动向口0的锁存器写入0FFH,所以,
大 学
对用户而言,P0口用作地址/数据总线时,则是一个真正
单 的双向口。
片
机 原
上面所述为数据由引脚输入的情况,称为“读引
湘
图51(a)是P0口的位结构图,它包括一个输出锁
潭 存器,两个三态缓冲器,一个输出驱动电路和一个
大 学
输出控制电路。
单
片 读锁存器
机 原
地址/数据 控制
vcc
&
理
P0.x
及 内部总线
应
用
编 写入
著
DQ 锁存器 CP Q
MUX
组
读引脚
2021/7/1
(a)p0口电路逻辑
4
第五章MCS-51单片机的硬件资源
著 组
MOS输入电路,且能驱动四个LSTTL输入。P2口常用
作外部存储器的高八位地址口。当不用作地址口时,
及 应
口的某一位,这些指令是:ANL,ORL,XRL,
用 JBC,CPL,INC,DEC,DJNZ,MOV PX·Y,C,
编 著
CLR PX·Y和SETB PX·Y等,它们的含义详见指令
组 系统一章的说明。
2021/7/1
9
第五章MCS-51单片机的硬件资源
湘 综上所述,P0口既可作地址/数据总线口,这时它
单 0,使上拉场效应管处于截止状态,因此输出级是漏
片 机
极开路电路。这样,当写脉冲加在触发器时针端CP
原 上时,则与内部总线相连的D端数据取反后就出现在
汇编语言程序设计 第五章 课件
(3)串搜索指令 SCAS
LEA DX,ASS MOV AH,10 INT 21H LEA DI,ASS+2 ;输入串首址→DI MOV CL,ASS+1 ;输入串长度→CX MOVZX CX,CL MOV AL,′A′ ;计数器清零 MOV BX,0 P: REPNE SCASB ;查找字符‛A” JE A ;查到字符‛A”转A处执行 ;全部查完转结束 JMP OUT1 ;所有判断完否 A: CMP CX,0 JE OUT1 ;全部查完转结束 CMP BYTE PTR [DI], ‘M’ ;判断‛A”后的字符为‛M”否 JNE B ;不是转B处执行 INC BX ;是‛AM”计数器加1 B: JMP P ;未完转P继续判断 OUT1:MOV AH,4CH ;返回操作系统 INT 21H CODE ENDS END START
(1)串操作指令MOVS、CMPS、SCAS的 使用格式及功能; (2)简单宏指令的定义与调用方式; (3)模块程序设计的方法。
第五章
程序设计的其它方法与技术 三、本章学习的难点:
(1)MOVS与MOV、CMPS与CMP功能上
的差别及串操作指令的正确使用方法; (2)宏指令的定义与调用方式; (3)模块之间的组合、定位及通信方式; (4)模块化程序设计技术。
(5)存储字节/字/双字指令 STOS
●格式: ●功能:
STOS
OPD 或
STOSB 往字节串中存数 STOSW 往字串中存数 STOSD 往双字串中存数
⑴ 字节操作:(AL)→ ES:[DI]/[EDI] 字操作: (AX)→ ES:[DI]/[EDI] 双字操作:(EAX)→ES:[DI]/[EDI] 即将AL(或AX、EAX)中的数据送入DI/EDI所指的目的串中的字节(或 字、双字)存储单元中。修改指针DI/EDI,使之指向串中的下一个元素。 ⑵ 修改串指针,使之指向下一元素,修改方式为: i.当DF=0时,(SI)/(ESI)增量1(字节操作)或2(字操作) 或 4(双字操作)。 ii.当DF=1时,(SI)/(ESI)减量1(字节操作)或2(字操作) 或 4(双字操作)。 说明:该指令执行后,并不影响标志位,因而它一般只带REP重复前缀, 用来将一片连续的存储字节(或字)单元臵相同的值。
《汇编语言程序设计》第5章基本汇编语言程序设计.ppt
汇编语言程序设计的基本步骤: 1.分析题意,确定数据结构和算法 2.根据算法绘制程序流程图 3.根据流程图编写程序 4.调试程序
5.1 汇编语言程序的设计步骤
汇编语言程序设计的基本步骤
例5.1 在100个字的无符号整数字中找出最 大数。
5.1 汇编语言程序的设计步骤
汇编语言程序设计的基本步骤
5.2 顺序结构的程序设计
(2)输出:在8086.8088指令系统中,字符的输出是由 DOS21H中断的02H子功能来实现的,命令序列如下: MOV AH,02H INT 21H 其作用是将寄存器DL中所存放的字符进行显示输出, 故在执行该命令序列之前,应先将被输出字符的ASCII 码存入DL中。
程序的基本结构
1.顺序结构 2.分支结构 3.循环结构
ห้องสมุดไป่ตู้
5.1 汇编语言程序的设计步骤
程序的基本结构 1.顺序结构
5.1 汇编语言程序的设计步骤
程序的基本结构 2.分支结构
5.1 汇编语言程序的设计步骤
程序的基本结构 3.循环结构
5.1 汇编语言程序的设计步骤
第5章基本汇编语言程序设计
1.分析题意,确定数据结构和算法 (1)初始化,建立一个数据指针指向数据区的首
地址; (2)将第一个数存入寄存器(如AX)中; (3)调整数据指针,使其指向下一个数; (4)将数据指针所指的数与寄存器AX的内容相比
较,如果该数较大,则将其存入AX,否则丢掉; (5)重复执行(3)、(4)两步,直至将数组中
分析:比较两数可用CMP指令,而带符号数的比 较结果可由标志位SF、OF来确定,选用的转移 指令应为JG、JL等。
第5章基本汇编语言程序设计
5.1 汇编语言程序的设计步骤 5.2 顺序结构的程序设计 5.3 分支结构的程序设计 5.4 循环结构的程序设计 5.5 子程序设计
5.1 汇编语言程序的设计步骤
汇编语言程序设计的基本步骤
例5.1 在100个字的无符号整数字中找出最 大数。
5.1 汇编语言程序的设计步骤
汇编语言程序设计的基本步骤
5.2 顺序结构的程序设计
(2)输出:在8086.8088指令系统中,字符的输出是由 DOS21H中断的02H子功能来实现的,命令序列如下: MOV AH,02H INT 21H 其作用是将寄存器DL中所存放的字符进行显示输出, 故在执行该命令序列之前,应先将被输出字符的ASCII 码存入DL中。
程序的基本结构
1.顺序结构 2.分支结构 3.循环结构
ห้องสมุดไป่ตู้
5.1 汇编语言程序的设计步骤
程序的基本结构 1.顺序结构
5.1 汇编语言程序的设计步骤
程序的基本结构 2.分支结构
5.1 汇编语言程序的设计步骤
程序的基本结构 3.循环结构
5.1 汇编语言程序的设计步骤
第5章基本汇编语言程序设计
1.分析题意,确定数据结构和算法 (1)初始化,建立一个数据指针指向数据区的首
地址; (2)将第一个数存入寄存器(如AX)中; (3)调整数据指针,使其指向下一个数; (4)将数据指针所指的数与寄存器AX的内容相比
较,如果该数较大,则将其存入AX,否则丢掉; (5)重复执行(3)、(4)两步,直至将数组中
分析:比较两数可用CMP指令,而带符号数的比 较结果可由标志位SF、OF来确定,选用的转移 指令应为JG、JL等。
第5章基本汇编语言程序设计
5.1 汇编语言程序的设计步骤 5.2 顺序结构的程序设计 5.3 分支结构的程序设计 5.4 循环结构的程序设计 5.5 子程序设计
精品PPT课件--第5章汇编语言程序设计
指示性语句的格式为:
名字 伪指令 操作数1,操作数2,…,操作数n ;注释
注:各部分之间至少要用一个空格作为分隔符。
指示性语句由汇编程序执行。它指出汇编程序应如何对源程序进行汇编, 如何定义变量、分配存储单元以及指示程序开始和结束等。指示性语句无 机器码指令与其相对应。
指示性语句汇编时不生成机器码。
显然,第二种写法要比第一种写法要好。
2021/1/20
23
5.3 伪操作命令
由汇编程序执行的指令,它本身不被汇编成机器指令。 常用的伪指令有:
• 数据定义伪指令 • 符号定义伪指令 • 段定义和段寄存器指定伪指令 • 过程定义伪指令 • 结束伪指令
2021/1/20
24
5.3.2 数据定义伪指令
➢ 变量在程序中作为存储器操作数被引用。 •标号和变量名的使用规则
– 组成:A-Z(不分大小写), 0-9, ?@ . _ $ – 不能以数字开头 – 长度小于31个字符 – 不能与保留字(指令助记符、伪指令、预定义符号等)重名 – 不能重复定义 例如: 正确的:LP1, AGAIN, NEXT, _GO, OK_1
(1)算术运算符—— +、-、*、/,MOD
➢ 用于数字表达式,例: MOV AX,4*1024
汇编后的形式为:
MOV AX,4096
➢ 用于地址表达式,例: LEA SI,TAB+3
若TAB的偏移地址为1000H,则汇编后的形式为:LEA
SI,1003H
2021/1/20
16
(2)逻辑运算符—— AND、OR、XOR、NOT
INT 21H
;返回DOS
CODE ENDS
;代码段结束
END START
名字 伪指令 操作数1,操作数2,…,操作数n ;注释
注:各部分之间至少要用一个空格作为分隔符。
指示性语句由汇编程序执行。它指出汇编程序应如何对源程序进行汇编, 如何定义变量、分配存储单元以及指示程序开始和结束等。指示性语句无 机器码指令与其相对应。
指示性语句汇编时不生成机器码。
显然,第二种写法要比第一种写法要好。
2021/1/20
23
5.3 伪操作命令
由汇编程序执行的指令,它本身不被汇编成机器指令。 常用的伪指令有:
• 数据定义伪指令 • 符号定义伪指令 • 段定义和段寄存器指定伪指令 • 过程定义伪指令 • 结束伪指令
2021/1/20
24
5.3.2 数据定义伪指令
➢ 变量在程序中作为存储器操作数被引用。 •标号和变量名的使用规则
– 组成:A-Z(不分大小写), 0-9, ?@ . _ $ – 不能以数字开头 – 长度小于31个字符 – 不能与保留字(指令助记符、伪指令、预定义符号等)重名 – 不能重复定义 例如: 正确的:LP1, AGAIN, NEXT, _GO, OK_1
(1)算术运算符—— +、-、*、/,MOD
➢ 用于数字表达式,例: MOV AX,4*1024
汇编后的形式为:
MOV AX,4096
➢ 用于地址表达式,例: LEA SI,TAB+3
若TAB的偏移地址为1000H,则汇编后的形式为:LEA
SI,1003H
2021/1/20
16
(2)逻辑运算符—— AND、OR、XOR、NOT
INT 21H
;返回DOS
CODE ENDS
;代码段结束
END START
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中断处理子程序:
(1) 保存寄存器内容 (2) 如允许中断嵌套,则开中断 ( STI )
(3) 中断处理功能
(4) 关中断 (5) 送中断结束命令( EOI )给中断命令寄存器 (6) 恢复寄存器内容 (7) IRET中断返回
15
例: 编写一个中断处理程序,要求在主程序运行期间, 每隔 10秒响铃一次,同时显示‘ bell ’
.model small .stack .data
mov al, 1ch mov ah, 35h int 21h push es push bx
第八章 输入输出程序设计
CPU MEM I/O接口
总线
I/O设备
1
1. I/O 设备的数据传送方式
查询方式 (程序控制方式) 中断方式 DMA方式 (直接存储器存取方式/成组传送方式)
2
2. 程序直接控制 I/O 方式
I/O 指令是主机与外设进行通信的最基本途径 。DOS 功能调用和BIOS例行程序中的输入/输出 功能也是由IN和OUT指令完成的。
11
例:为中断类型 N 设置中断向量
…… MOV AX, 0 MOV ES, AX MOV BX, N*4
MOV AX, OFFSET INTHAND
MOV ES: WORD PTR[BX], AX
;偏移地址(N*4)
MOV AX, SEG
INTHAND
MOV ES: WORD PTR[BX+2],AX
;段地址(N*4+2)
……
INTHAND: …… IRET
;中断处理程序
12
DOS 功能调用(21H)存取中断向量:
设置中断向量: AH = 25H AL = 中断类型号 DS : DX = 中断向量 INT 21H
取中断向量: AH = 35H AL = 中断类型号 INT 21H 返回时送 ES : BX = 中断向量
用户可利用保留的中断类型号 扩充自己需要的中断功能。
003FC 类型255的(IP) 类型255的(CS)
10
CPU中断过程:
(1)取中断类型:CPU ← type N (2)保护现场:FLAGS、CS、IP入栈 (3)IF=0, TF=0 (4)取中断向量:(4×N)→ IP
(4×N+2)→ CS (5)转中断处理程序
例:循环测试某状态寄存器的第2位是否为1
读I/O状态
N 准备好? Y
传送数据
AGAIN: IN TEST JZ
AL, STATUS_PORT AL, 00000100B AGAIN
MOV AL, DATA OUT DATA_PORT, AL
3
轮流查询几种I/O设备:
DEV1: IN AL, STAT1 TEST AL, STAT1_BIT JZ DEV2 CALL FAR PTR PROC1
8
中断的条件:
设置CPU中断允许位:
FLAGS 中的 IF 位 = 1 允许中断 ( STI ) = 0 禁止中断 ( CLI )
设置中断屏蔽位:
中断屏蔽寄存器的中断屏蔽位 = 0 允许I/O设备请求中断 = 1 禁止I/O设备请求中断
8259A
76 5 4
中断屏蔽寄存器21H
打 印 机
3210
IN AL, 21H AND AL,0FDH
2号定时器门控
与 门
放大器
5
例:8.2p287
6
3. 中断传送方式
中断源:引起中断的事件
外中断(硬中断):
外设的 I/O 请求 —— 可屏蔽中断 电源掉电 / 奇偶错 —— 非屏蔽中断
内中断(软中断):
INT 指令 / CPU 错(除法错、溢出)/ 为调试程序设置的中断
7
80x86 中断源:
CPU
4
例:Sound 程序1
……
mov
in
and
sound: xor
out
mov
wait1: loop
dec
jne
……
dx, 100
al, 61h al, 11111100b al, 2 61h, al cx, 140h wait1 dx sound
设备控制寄存器( 61h )
控制其它外部设备
1
0
1/0 0
键定 时
盘器
OUT 21H,AL
76 5 4
中断命令寄存器20H
EOI
3 2 1 0 MOV AL, 20H OUT 20H, AL
9
中断向量表
00000 类型0的(IP) 类型0的(CS)
00004 类型1的(IP) 类型1的(CS)
中断向量—中断处理程序的入口 地址(段址):(偏址)
4*N 类型N的(IP) 类型N的(CS)
DEV2: IN AL, STAT2 TEST AL, STAT2_BIT JZ DEV3 CALL FAR PTR PROC2
DEV3: IN AL, STAT3 TEST AL, STAT3_BIT JZ DEV1 CALL FAR PTR PROC3
优:程序安排或修改 设备的优先次序 缺:查询等待浪费 CPU大量有效时间
定时器 中断
18.2次/SEC
; INT_TIMER
∶ ∶ INT 1CH ∶ ∶ IRET
INT_1CH PROC IRET
INT_ICH ENDP
RING PROC 1.计数182(10秒) 2.显示字符串
IRET RING ENDP
16
例:编写一个中断处理程序,要求在主程序运行期间, 每隔 10 秒响铃一次,并显示 ‘bell’
INT 21H
; 设置新的中断向量
POP DS
……
POP DX
POP DS
MOV AL, N
MOV AH, 25H
INT 21H
; 恢复原中断向量
……
INTHAND:
; 中断处理程序
……
IRET
14
中断程序的编写步骤:
主程序:
(1) 设置中断向量 (2) 设置 CPU 的中断允许位 IF (3) 设置设备的中断屏蔽位
n INT n
非屏蔽中断请求
2 NMI
中断逻辑
40 INTO 除法错
1 单步
INTR
8259A IR0
可 IR1
编 程
IR2
中 IR3
断 IR4
控 制
IR5
器 IR6
(PIC) IR7
08 系统定时器 09 键盘 0A 彩色/图形接口 0B 保留 0Байду номын сангаас 串行通讯口 0D 保留 0E 软盘 0F 打印机
13
例:用 DOS 功能调用存取中断向量
MOV AL, N
MOV AH, 35H
INT 21H
; 取原中断向量
PUSH ES
PUSH BX
; 保存原中断向量
PUSH DS
MOV AX, SEG INTHAND
MOV DS, AX
MOV DX, OFFSET INTHAND
MOV AL, N
MOV AH, 25H
(1) 保存寄存器内容 (2) 如允许中断嵌套,则开中断 ( STI )
(3) 中断处理功能
(4) 关中断 (5) 送中断结束命令( EOI )给中断命令寄存器 (6) 恢复寄存器内容 (7) IRET中断返回
15
例: 编写一个中断处理程序,要求在主程序运行期间, 每隔 10秒响铃一次,同时显示‘ bell ’
.model small .stack .data
mov al, 1ch mov ah, 35h int 21h push es push bx
第八章 输入输出程序设计
CPU MEM I/O接口
总线
I/O设备
1
1. I/O 设备的数据传送方式
查询方式 (程序控制方式) 中断方式 DMA方式 (直接存储器存取方式/成组传送方式)
2
2. 程序直接控制 I/O 方式
I/O 指令是主机与外设进行通信的最基本途径 。DOS 功能调用和BIOS例行程序中的输入/输出 功能也是由IN和OUT指令完成的。
11
例:为中断类型 N 设置中断向量
…… MOV AX, 0 MOV ES, AX MOV BX, N*4
MOV AX, OFFSET INTHAND
MOV ES: WORD PTR[BX], AX
;偏移地址(N*4)
MOV AX, SEG
INTHAND
MOV ES: WORD PTR[BX+2],AX
;段地址(N*4+2)
……
INTHAND: …… IRET
;中断处理程序
12
DOS 功能调用(21H)存取中断向量:
设置中断向量: AH = 25H AL = 中断类型号 DS : DX = 中断向量 INT 21H
取中断向量: AH = 35H AL = 中断类型号 INT 21H 返回时送 ES : BX = 中断向量
用户可利用保留的中断类型号 扩充自己需要的中断功能。
003FC 类型255的(IP) 类型255的(CS)
10
CPU中断过程:
(1)取中断类型:CPU ← type N (2)保护现场:FLAGS、CS、IP入栈 (3)IF=0, TF=0 (4)取中断向量:(4×N)→ IP
(4×N+2)→ CS (5)转中断处理程序
例:循环测试某状态寄存器的第2位是否为1
读I/O状态
N 准备好? Y
传送数据
AGAIN: IN TEST JZ
AL, STATUS_PORT AL, 00000100B AGAIN
MOV AL, DATA OUT DATA_PORT, AL
3
轮流查询几种I/O设备:
DEV1: IN AL, STAT1 TEST AL, STAT1_BIT JZ DEV2 CALL FAR PTR PROC1
8
中断的条件:
设置CPU中断允许位:
FLAGS 中的 IF 位 = 1 允许中断 ( STI ) = 0 禁止中断 ( CLI )
设置中断屏蔽位:
中断屏蔽寄存器的中断屏蔽位 = 0 允许I/O设备请求中断 = 1 禁止I/O设备请求中断
8259A
76 5 4
中断屏蔽寄存器21H
打 印 机
3210
IN AL, 21H AND AL,0FDH
2号定时器门控
与 门
放大器
5
例:8.2p287
6
3. 中断传送方式
中断源:引起中断的事件
外中断(硬中断):
外设的 I/O 请求 —— 可屏蔽中断 电源掉电 / 奇偶错 —— 非屏蔽中断
内中断(软中断):
INT 指令 / CPU 错(除法错、溢出)/ 为调试程序设置的中断
7
80x86 中断源:
CPU
4
例:Sound 程序1
……
mov
in
and
sound: xor
out
mov
wait1: loop
dec
jne
……
dx, 100
al, 61h al, 11111100b al, 2 61h, al cx, 140h wait1 dx sound
设备控制寄存器( 61h )
控制其它外部设备
1
0
1/0 0
键定 时
盘器
OUT 21H,AL
76 5 4
中断命令寄存器20H
EOI
3 2 1 0 MOV AL, 20H OUT 20H, AL
9
中断向量表
00000 类型0的(IP) 类型0的(CS)
00004 类型1的(IP) 类型1的(CS)
中断向量—中断处理程序的入口 地址(段址):(偏址)
4*N 类型N的(IP) 类型N的(CS)
DEV2: IN AL, STAT2 TEST AL, STAT2_BIT JZ DEV3 CALL FAR PTR PROC2
DEV3: IN AL, STAT3 TEST AL, STAT3_BIT JZ DEV1 CALL FAR PTR PROC3
优:程序安排或修改 设备的优先次序 缺:查询等待浪费 CPU大量有效时间
定时器 中断
18.2次/SEC
; INT_TIMER
∶ ∶ INT 1CH ∶ ∶ IRET
INT_1CH PROC IRET
INT_ICH ENDP
RING PROC 1.计数182(10秒) 2.显示字符串
IRET RING ENDP
16
例:编写一个中断处理程序,要求在主程序运行期间, 每隔 10 秒响铃一次,并显示 ‘bell’
INT 21H
; 设置新的中断向量
POP DS
……
POP DX
POP DS
MOV AL, N
MOV AH, 25H
INT 21H
; 恢复原中断向量
……
INTHAND:
; 中断处理程序
……
IRET
14
中断程序的编写步骤:
主程序:
(1) 设置中断向量 (2) 设置 CPU 的中断允许位 IF (3) 设置设备的中断屏蔽位
n INT n
非屏蔽中断请求
2 NMI
中断逻辑
40 INTO 除法错
1 单步
INTR
8259A IR0
可 IR1
编 程
IR2
中 IR3
断 IR4
控 制
IR5
器 IR6
(PIC) IR7
08 系统定时器 09 键盘 0A 彩色/图形接口 0B 保留 0Байду номын сангаас 串行通讯口 0D 保留 0E 软盘 0F 打印机
13
例:用 DOS 功能调用存取中断向量
MOV AL, N
MOV AH, 35H
INT 21H
; 取原中断向量
PUSH ES
PUSH BX
; 保存原中断向量
PUSH DS
MOV AX, SEG INTHAND
MOV DS, AX
MOV DX, OFFSET INTHAND
MOV AL, N
MOV AH, 25H