汇编语言第八章 输入与输出程序设计

合集下载

《汇编语言程序设计》第8章输入、输出与中断

《汇编语言程序设计》第8章输入、输出与中断

输入输出程序设计示例
读取键盘输入
通过IN指令读取键盘控制器端 口的数据,解析按键信息。
控制LED显示
通过OUT指令向LED控制端口 发送数据,控制LED的亮灭和闪 烁。
串行通信程序设计
通过IN和OUT指令实现串行数 据的发送和接收,需要设置串 行通信参数和端口地址。
并行通信程序设计
通过IN和OUT指令实现并行数 据的传输,需要设置并行通信
改进方向
进一步加强汇编语言编程和调试技能的学习和实践,提高代码质量和效率。同时,探索更多的输入输出和中断应 用场景,拓展知识面和应用能力。
THANKS FOR WATCHING
感谢您的观看
CPU在执行输入输出指令时,可能需要等待外部设备的响应,此时CPU 可以转而执行其他任务,直到收到外部设备的中断请求后再继续执行输 入输出操作。
02 输入输出指令及编程方法
输入输出指令介绍
1 2
IN指令
从端口读取数据到累加器中,可用于读取外设状 态或数据。
OUT指令
将累加器中的数据输出到端口,可用于控制外设 或发送数据。
04 输入输出与中断控制芯片 介绍
典型输入输出控制芯片
01
02
03
8255芯片
具有三个8位并行I/O端口, 可通过编程控制各端口的 工作模式和数据传输方向。
8253芯片
可编程定时/计数器,可生 成定时中断或计数中断, 常用于控制外部设备的定 时操作。
串行通信接口芯片
如8250等,实现串行数据 的传输和控制,常用于与 其他设备的串行通信。
3
端口寻址方式
直接寻址和间接寻址,直接寻址指定端口地址, 间接寻址通过DX寄存器间接指定端口地址。

80X86汇编语言电子教案(8-输入输出程序设计)

80X86汇编语言电子教案(8-输入输出程序设计)

3 I/O程序设计举例
例 发声子程序SOUND
已知设备控制寄存器的端口地址为61H
7 6 54 321
端口61H
1/0
表示不由震荡 器产生声音
0 0
2号定时器门控
控制其它外部设备
﹠ 放大器
控制原理
扬声器
使用61H寄存器的第1位交替为0和1 当第1位由0变1 延迟一会 又由1变0 脉冲门先打开 后关上 产生一个 脉冲电流 脉冲电流被放大后 送到扬声器使之发出声音
第八章 输入/输出程序设计
典型的计算机结构包括
中央处理机 存储器 外部设备
中央处 理机
总线控 制逻辑
系 统 总 线
存储器 接口 … 接口
大容量
存储器 I/O



I/O

设备
外部设备 是实现人机交互和机间通信为目的的一些机电设备 例如 键盘 显示器 等
计算机系统通过硬件接口及I/O控制程序对外设进行控制 使其完成I/O操作
(AH)=25H (AL)=中断类型号, DS:DX=中断程序的入口地址 执行: INT 21H 功能: 将DS:DX指定的中断程序入口放入AL 的中断类型号所在的中断向量的位置
取中断向量 入口
(AH)=35H (AL)=中断类型号,
执行: INT 21H
功能: 将AL 指定的中断类型在向量表中存放的 入口地址取出放入ES:BX中 (见书上P296例8.4)
1 I/O端口地址
为了存取接口上的寄存器 系统给这些寄存器分 配专门的存取地址 这样的地址称为端口地址
书上P284的表8.1列出了部分端口地址 注意
在Intel 80X86系列 CPU 的系统中 I/O端口地址 和存储单元地址分别编址 占用不同的地址空间 80X86的I/O地址空间可为64KB 端口地址范围 0000 FFFFH 虽然386及后继机型可有32位端口 但整个I/O 空间不允许超过64KB

汇编--输入输出程序设计.

汇编--输入输出程序设计.

一、实验目的和内容1. 掌握输入输出指令的使用;2. 上网查 3相步进电机的工作原理;3. 用 emu8086工具运行步进电机程序;4. 对步进电机程序进行改进,精确控制其转速。

二、实验原理及基本技术路线图(方框原理图步进电机的工作原理:三、所用仪器、材料(设备名称、型号、规格等1. 操作系统平台:Windows 72. 汇编环境:emu8086四、实验方法、步骤1. 打开 emu8086汇编开发环境;2. 打开 emu8086例子程序中的步进电机的源程序:D:\emu8086\examples\stepper_motor.asm3. 运行该程序,观察运行情况,并结合步进电机的工作原理,阅读并理解程序的执行逻辑,读懂程序中的注释;4. 尝试修改该程序,以精确控制步进电机的转速;5. 运行修改后的程序,观察运行结果,并分析;6. 记录实验过程,并完成实验报告。

五、实验过程原始记录 (数据、图表、计算等1. 打开步进电机的控制程序:2. 运行调试该程序,观察结果:3. 阅读该程序, 并添加注释 (下面为了保存原版程序, 打开程序的一个副本进行修改 :添加注释后的源代码如下:; 这是一个输出控制的例子; 它向虚拟的 I/O端口输出值; 以控制步进电机; d:\emu8086\devices\stepper_motor.exe 在 7号端口#start=stepper_motor.exe#name "stepper"#make_bin#steps_before_direction_change = 20h ; 十进制的 32 jmp start; ========= 数据 ===============; 二进制的数据用以控制步进电机; 顺时针以半步循环方式 (半个步距角转动 :datcw db 0000_0110b ;BC-->C-->AB-->B-->BCdb 0000_0100bdb 0000_0011bdb 0000_0010b; 二进制的数据用以控制步进电机; 逆时针以半步循环方式 (半个步距角转动 :datccw db 0000_0011b ;AB-->A-->BC-->B-->ABdb 0000_0001bdb 0000_0110bdb 0000_0010b; 二进制的数据用以控制步进电机; 顺时针以整步循环方式 (一个步距角转动 :datcw_fs db 0000_0001b ;A-->AB-->BC-->0-->Adb 0000_0011bdb 0000_0110b db 0000_0000b ; 二进制的数据用以控制步进电机 ; 逆时针以整步循环方式(一个步距角转动: datccw_fs db 0000_0100b ;C-->BC-->AB-->0-->C db 0000_0110b db 0000_0011b db 0000_0000b start: mov bx, offset datcw ; 开始以顺时针半步循环方式执行 mov si, 0 mov cx, 0 ; 初始化计数器 next_step: ; 获取步进电机控制信号最高位, 若为 1, 则表示就绪 wait: in al, 7 test al, 10000000b jz wait mov al, [bx][si] out 7, al inc si cmp si, 4 jb next_step mov si, 0 inc cx cmp cx,steps_before_direction_change jb next_step mov cx, 0 add bx, 4 ; 下一组控制数据 cmpbx, offset datccw_fs jbe next_step mov bx, offset datcw ; 返回顺时针半步循环方式执行 jmp next_step 4. 尝试修改该程序,以精确控制步进电机的转速: -6-修改说明:在原程序的 OUT 7, AL 一句后面加入如上图所示的代码,试图通过调用 DOS 系统中的 INT 15H 的 86H 号功能,即延时功能来控制步进电机每一步转动的时间,这里为了观察方便,设置每一秒转动一步(半步或整步)。

汇编语言设计 教案 第八章 输入输出程序设计

汇编语言设计 教案 第八章  输入输出程序设计

IRET
中断操作步骤
利用保留的中断类型号扩充中断功能,需要在中断向量表中建立相应的中断 向量。为中断类型N设置中断向量的方法: MOV AX ,0 MOV ES ,AX MOV BX ,N﹡4 MOV AX ,OFFSET INHAND MOV ES :WORD PTR [BX] ,AX MOV AX ,SEG INHAND MOV ES :WORD PTR[BX+2] ,AX ②
中断命令寄存器 (I/O)端口 )端口20H
7
R
6
SL
5
EOI
4
0
3
0
2
L2
1
L1
0
L0
中断标志位IF的设置: STI ;设置中断允许位(IF=1),允许中断(开中断) CLI ;清除中断允许位(1F=0),禁止中断(关中断) 中断命令寄存器:EOI是中断结束位,当EOI为1 时,当前正在处理的硬件中断请求就被清除,所以在 中断处理完成后,必须把中断结束位置为1。 结束硬件中断用下面的指令: MOV AL ,20H ;20H = 00100000B,置EOI 为1 OUT 20H ,AL ;
本例中CX=6000 它决定发声频率 值小声音尖锐, 值大声音低沉。 DX=1000决定 发声时间长短。
POP DX POP AX RET SOUND ENDP
例:打印字符程序PRT CHAR。 打印字符程序PRT—CHAR PRT CHAR。 这是一个采用查询方式的打印字符程序。程序通过 反复读取并测试打印机的状态来控制输出。在打印机接 口中,数据寄存器的端口地址为378H,状态寄存器的端 口地址为379H,控制寄存器的端口地址为37AH
中断逻辑
0 除法 错误

汇编语言程序设计第八章 输入

汇编语言程序设计第八章 输入

;line states register
COM_IN1: ;data ready? ;receive buffer register ;receive a character
COM_IN
5
8.3 中断传送方式
非屏蔽中断请求 2 NMI
中断逻辑
n 4 0 1
INTR
INTn 指令
INT0 指令
除法 错误
20-21 60-63 378-37A 3F8-3FE 2F8-2FE
中断控制器 8259A 可编程序外围接口芯片(PPI)8255A 并行接口打印机适配器 异步通信适配器(Primary) 同步通信适配器(Alternate)
2
8.2.2 I/O指令
PC机的I/O指令有IN和OUT,这两条指令既可以传送字节也 可以传送字,并且都具有直接端口寻址和间接端口寻址两种方式。
21
main
;
mov int ret endp proc push push push push mov mov sti dec jnz mov mov
ah,25h 21h
ring
near ds ax cx dx ax,dseg ds,ax
;save the working regs.
;count is value of 10 sec. count exit dx,offset mess ;print the message ah,09h 22
;set interrupt ; vector ;21h为中断屏蔽寄存器 ;的I/O端口地址P293 ;set interrupt ; mask bit
;main processor
;restroe old ; interrupt vector

第8章输入输出程序设计-精品

第8章输入输出程序设计-精品

存 储 器
I/O 接 口
入 设 备

I/O





数据总线 DB 控制总线 CB
2019/8/11
3
计算机科学与技术系
《汇编语言》
控制信息:是由CPU发送给外部设备的,命令其处于 某种方式或执行某种操作。
状态信息:从接口输入的状态信息表示I/O设备当前 的状态。
数据信息:则是I/O设备和CPU真正要交换的信息。 数据信息可分为三种类型:数字量、模拟量和开关量。 这些信息可以是并行的,也可以是串行的。
计算机科学与技术系
《汇编语言》
第八章 输入输出程序设计
输入输出功能是计算机的重要组成部分,是人— 机交互功能的主要承担者。在早期的计算机系统中, 通常把输入输出设备或功能作为次要的部分,而把 CPU作为主要研究对象。但现在随着输入输出设备 的日益丰富、功能要求越来越复杂,输入输出部分 在整个计算机系统中的地位也得到了进一步提高。
每类端口有4个字的空间,对有二 个串行口、二个并行口的计算机系统 ,其BIOS程序将得到如图所示的部分 数据表。
图中03F8H、02F8H、0378H和 0278H分别为COM1、COM2、 LPT1和LPT2的端口地址。
2019/8/11
12
计算机科学与技术系
8.2.2 I/O指令
《汇编语言》
• I/O指令:
系统板的RAM在读写时产生奇偶校验错; I/O通道中的扩展选件出现奇偶校验错;
协处理器8087的异常状态产生的中断。 • 可屏蔽中断INTR是由外部设备通过一片8259A产生的中断请求。
从外设发出的中断请求到cpu响应中断,用两个控制条件起决定 作用:

汇编语言程序设计第8章输入输出程序设计

汇编语言程序设计第8章输入输出程序设计
20
中断命令寄存器20H
8.3.2 中断向量表 (293页)
00000 类型0的(IP) 类型0的(CS) 00004 类型1的(IP) 类型1的(CS) 中断向量—中断处理程序的入口 地址(段址):(偏址)
4*N
类型N的(IP) 类型N的(CS)
用户可利用保留的中断类型号 扩充自己需要的中断功能。
29
(4) 优先级特殊循环方式
特点:该循环方式和优先级自动循环
方式基本相同,不同点仅在于可以根 据用户要求将最低优先级赋于某一中 断源。
30
结束中断处理的方式
当某个中断源得到CPU的中断服务后,使中断
服务寄存器的相应位置1,表示CPU正在为该 中断源服务。 如果CPU正在为某个中断源服务时,此时产生 了比该中断源级别高的中断申请,CPU将暂时 中止低级别的中断服务,转到高级别的中断服 务,同时也使高级别的中断源在中断服务寄存 器的相应位置1, 所以中断服务寄存器的状态反应出当前CPU正 在为哪个中断源服务和还未完成哪个中断源的 服务,为中断优先级裁决器的裁决提供了依据。
32
(1) 中断自动结束方式 特点:中断服务寄存器的相应位清零是 由硬件自动完成的。 使用环境:中断自动结束方式只能适用 于有一块8259A,并且各级中断不会发生 嵌套的情况。
33
(2) 一般中断结束方式 特点:该方式是通过用软件方法发一中 断结束命令,使当前中断服务寄存器中 级别最高的置1位清0。 使用环境:使用一般的中断结束方式只 能应用于全嵌套方式下,而不能用于优 先级自动循环方式和优先级特殊循环方 式。因为一般中断结束方式结束的中断 是尚未处理完的级别最高的中断。若中 断级别改变,会使整个中断过程混乱。
17

第八章:输入输出程序设计

第八章:输入输出程序设计

3
要从3个设备轮流输入数据 例8.3 CPU要从 个设备轮流输入数据,设备 要从 个设备轮流输入数据,设备1,2,3的状态寄存器 的状态寄存器 端口号分别用STAT1,STAT2,STAT3表示,第5位是输入 表示, 端口号分别用 表示 位是输入 准备位。 准备位。 INPUT: INPUT: STAT1 IN AL, STAT1 20H TEST AL, 20H DEV2 JZ DEV2 PROC1 CALL FAR PTR PROC1 DEV2 STAT2 DEV2: IN AL, STAT2 20H TEST AL, 20H DEV3 JZ DEV3 PROC2 CALL FAR PTR PROC2 DEV3 STAT3 DEV3: IN AL, STAT3 TEST AL, 20H 20H JZ NO_INPUT PROC3 CALL FAR PTR PROC3 NO_INPUT: NO_INPUT: ……
10
mov al, 1ch mov ah, 35h int 21h push es push bx push ds mov dx, offset ring mov ax, seg ring mov ds, ax mov al, 1ch mov ah, 25h int 21h pop ds in al, 21h and al, 11111110b out 21h, al sti
8
设置CPU中断允许位 中断允许位 设置 PSW中的 位=1 允许中断 (STI 开中断) 中的IF位 开中断) 中的 =0 禁止中断 (CLI 关中断) 关中断) 设置中断屏蔽位 非屏蔽中断(类型号为2) 一种特殊的外部中断, 非屏蔽中断(类型号为 ):一种特殊的外部中断,与IF位 位 的设置情况无关, 不能禁止此类中断。 的设置情况无关,CPU不能禁止此类中断。 不能禁止此类中断 21H 中断屏蔽寄存器 中断屏蔽位=0 允许中断 中断屏蔽位 =1 禁止中断 中断程序的编写步骤: 中断程序的编写步骤: 主程序: 主程序:(1) 设置中断向量

输入输出程序设计

输入输出程序设计

§8.2 程序直接控制I/O方式
§8.2 程序直接控制I/O方式
在例8.2打印字符的程序中,使用TEST指令对状 态寄存器(I/O端口379h)的第7位进行测试,如 果第7位为0,表示打印机处于忙状态,这时, CPU不能送出打印数据,所以程序再次循环测试, 一直等到第7位变为1,表明打印机空闲,程序才 7 1 从数据区取出一个字符送到打印机的数据寄存器, 并由控制寄存器发出一个选通信号(端口37AH的 0位),控制打印机将这个字符打印输出。 这种CPU与外部设备交换信息的方式称为查询方 式或等待方式。
I/O 通 道
硬盘适配器 游戏接口 并行打印机接口LPT2 并行打印机接口 串行通信接口COM2 串行通信接口 并行打印机接口LPT1 并行打印机接口 SDLC通信接口 通信接口 BSC通信接口 通信接口 单色显示/打印机适配器 单色显示 打印机适配器 彩色图形适配器CGA 彩色图形适配器 软盘适配器 串行通信接口COM1 串行通信接口
§8.3 中断传送方式
为调试程序设置的中断
单步中断 断点中断
§8.3 中断传送方式
§8.2 程序直接控制I/O方式
对8086及其后继机型的微处理机,所有I/O端口 与CPU之间的通信都由输入输出指令IN和OUT 来完成。IN指令将信息从I/O输入到CPU,OUT 指令将信息从CPU输出到I/O端口,因此,IN和 OUT指令都要指出I/O端口地址。微处理机分配 给外部设备最多有64K个端口,其中前256个端 口(0~FFH)称为固定端口,可以直接在指令中 指定。当端口地址超过8位(≥256),称为可变 端口,它必须先送到DX寄存器,然后再用IN或 OUT指令传送信息。
§8.2 程序直接控制I/O方式
例8.2打印字符程序PRT_CHAR

汇编语言程序设计第8章输入输出程序设计1精品PPT课件

汇编语言程序设计第8章输入输出程序设计1精品PPT课件
第8章 输入/输出程序设计
8.1 输入/输出指令 8.2 CPU与外设传送数据的控制方式 8.3 程序查询传送方式 8.4 中断传送方式
24.10.2020
第1章 汇编语言基础知识 8章 输入/
10
《汇编语言程序设计》
8.2 CPU与外设传送数据的控制方式
主机与外设之间的数据传送(控制)方式有: ●程序查询传送方式* ●程序中断传送方式* ●直接存储器存取(DMA)方式 ● I/O处理机方式(简称IOP协处理机方式)。
(b)I/O 映射方式示意图
统一编址
独立编址
图 68--11 I/O 映射方式和存储器映射方式的示意图
24.10.2020
第1章 汇编语言基础知识 8章 输入/
6
《汇编语言程序设计》
8.1 输入/输出指令
8.1.2 输入/输出指令
I/O指令:
输入指令:
IN AL,PORT
IN AX,PORT
IN AL,DX
数据
数据

状态
状态

CPU
接口

控制
备 控制
图8-2 主机与外设间传送的信息
24.10.2020
IN AL,DX IN AX,DX OUT DX, AL OUT DX, AX
在程序设计中,这种寻址方式比较灵活。因为在程序中,只 要修改DX的内容就可以用同一条输入/输出指令去访问不同的 端口,实现可变端口的输入/输出。
24.10.2020
第1章 汇编语言基础知识 8章 输入/
9
《汇编语言程序设计》
《汇编语言程序设计》
8.1 输入/输出指令
8.1.1 I/O端口编址方式
(1)统一编址:存储器(内存)与I/O端口的编址占 用同一个地址空间。特点是所有对内存操作的指令 对I/O端口同样有效,指令丰富,但会损失一部分 的内存空间。

汇编--输入输出程序设计

汇编--输入输出程序设计

一、实验目的和内容1. 掌握输入输出指令的使用;2. 上网查3相步进电机的工作原理;3. 用emu8086工具运行步进电机程序;4. 对步进电机程序进行改进,精确控制其转速。

二、实验原理及基本技术路线图(方框原理图)步进电机的工作原理:三、所用仪器、材料(设备名称、型号、规格等)1. 操作系统平台:Windows 72. 汇编环境:emu8086四、实验方法、步骤1. 打开emu8086汇编开发环境;2. 打开emu8086例子程序中的步进电机的源程序:D:\emu8086\examples\stepper_motor.asm3. 运行该程序,观察运行情况,并结合步进电机的工作原理,阅读并理解程序的执行逻辑,读懂程序中的注释;4. 尝试修改该程序,以精确控制步进电机的转速;5. 运行修改后的程序,观察运行结果,并分析;6. 记录实验过程,并完成实验报告。

五、实验过程原始记录(数据、图表、计算等)1. 打开步进电机的控制程序:2. 运行调试该程序,观察结果:3. 阅读该程序,并添加注释(下面为了保存原版程序,打开程序的一个副本进行修改):添加注释后的源代码如下:; 这是一个输出控制的例子; 它向虚拟的I/O端口输出值; 以控制步进电机; d:\emu8086\devices\stepper_motor.exe 在7号端口#start=stepper_motor.exe#name "stepper"#make_bin#steps_before_direction_change = 20h ; 十进制的32jmp start; ========= 数据 ===============; 二进制的数据用以控制步进电机; 顺时针以半步循环方式(半个步距角)转动:datcw db 0000_0110b ;BC-->C-->AB-->B-->BCdb 0000_0100bdb 0000_0011bdb 0000_0010b; 二进制的数据用以控制步进电机; 逆时针以半步循环方式(半个步距角)转动:datccw db 0000_0011b ;AB-->A-->BC-->B-->ABdb 0000_0001bdb 0000_0110bdb 0000_0010b; 二进制的数据用以控制步进电机; 顺时针以整步循环方式(一个步距角)转动:datcw_fs db 0000_0001b ;A-->AB-->BC-->0-->Adb 0000_0011bdb 0000_0110bdb 0000_0000b; 二进制的数据用以控制步进电机; 逆时针以整步循环方式(一个步距角)转动:datccw_fs db 0000_0100b ;C-->BC-->AB-->0-->C db 0000_0110bdb 0000_0011bdb 0000_0000bstart:mov bx, offset datcw ; 开始以顺时针半步循环方式执行mov si, 0mov cx, 0 ; 初始化计数器next_step:; 获取步进电机控制信号最高位, 若为1, 则表示就绪wait: in al, 7test al, 10000000bjz waitmov al, [bx][si]out 7, alinc sicmp si, 4jb next_stepmov si, 0inc cxcmp cx, steps_before_direction_changejb next_stepmov cx, 0add bx, 4 ; 下一组控制数据cmp bx, offset datccw_fsjbe next_stepmov bx, offset datcw ; 返回顺时针半步循环方式执行jmp next_step4. 尝试修改该程序,以精确控制步进电机的转速:修改说明:在原程序的OUT 7, AL一句后面加入如上图所示的代码,试图通过调用DOS系统中的INT 15H的86H号功能,即延时功能来控制步进电机每一步转动的时间,这里为了观察方便,设置每一秒转动一步(半步或整步)。

汇编输入输出程序设计

汇编输入输出程序设计

输入输出程序设计一、实验目的1)掌握输入输出指令的使用;2)了解对CMOS RAM的读写3)访问CMOS RAM,编程,以“年/月/日时:分:秒”的格式,显示当前的日期、时间。

观察并记录运行结果。

二、实验原理及基本技术路线图(方框原理图)程序源代码:assume cs:code,ds:datadata segmenttime db 'yy/mm/dd hh:mm:ss',0dh,0ah,'$'cmos db 9,8,7,4,2,0data endscode segmentstart:mov ax,datamov ds,axmov bx,0mov si,0mov cx,6a: push cxmov al,cmos[bx]out 70h,alin al,71hmov ah,almov cl,4shr al,cland ah,0fhadd ax,3030hmov word ptr time[si],axinc bxadd si,3pop cxloop amov ah,6mov al,0mov bh,1fhmov cx,0mov dx,184fhint 10hmov ah,2mov bh,0mov dh,13mov dl,32int 10hmov dx,offset timemov ah,9int 21hmov ax,4c00hint 21hcode endsend start三、所用仪器、材料(设备名称、型号、规格等)Masm 6.0,debug。

四、实验方法、步骤1.使用masm6.0将所写的程序进行编译,生成exe文件,运行。

2.使用debug调试生成的exe文件,使用t命令进行单步调试。

3.记录下关键位置的调试截图。

五、实验过程原始记录(数据、图表、计算等)1.经过masm编译的程序b6.exe,得到程序运行结果2.r命令查看寄存器初始状态3.u命令进行反汇编4.使用t命令进行单步调试(1)设置好存储时间coms端口号和存放时间的内存位置的指针(2)从coms ram的9号单元读出当前年份的BCD码要读取CMOS RAM的信息,先要向地址端口70h写入要访问的单元的地址:(3)从数据端口71h中取得指定单元中的数据,相应的数据输入到AL中,同时将AL中的数据放入到AH中:(4)将AL中的数据右移4位,并且将AH的高4位置0,得到年份BCD码对于的十进制数据:(5)将AX中的数据加上3030H,得到十进制数据的ASCII码,并存放的time 数据段中:(6)完成年份的取出和存放,将BX和SI指向的位置改变,BX指向coms的下一个单元,即8号单元,取出月份,SI指向存放月份的位置,即[SI+3];转入第二次循环,取出并存放月份。

80x86汇编语言程序设计第8章输入输出与中断

80x86汇编语言程序设计第8章输入输出与中断

7. CPU对可屏蔽中断的响应条件
该设备的中断请求未被屏蔽,即相应的中断屏蔽位为0。 CPU允许中断,即IF=1。
2012-6-2
80x86汇编语言程序设计
8.3 DOS与BIOS服务
1.DOS系统调用:INT 21H
AH = 25H:设置中断向量 AH = 35H:获取中断向量 AH = 31H:程序终止并驻留内存
中断控制器通过端口20H和21H(用于IRQ 0 ~ 7)以及0A0H和0A1H(用于IRQ 8 ~ 15)与CPU通信。 其中,端口20H与0A0H对应于中断命令寄存器,端口21H与0A1H 对应于中断屏蔽 寄存器。
5. 发送中断结束命令的方法
向中断命令寄存器输出字节20H。如下所示。 mov al, 20h
• 必须保护所有要修改的寄存器,尤其是硬件中断或异常的ISR。 • 对于硬件中断服务程序,应在返回之前,向中断控制器发送中断结束命令。 主程序的基本结构。 实例。
2012-6-2
80x86汇编语言程序设计
8.5.2 驻留程序设计
(1)什么是驻留程序(TSR程序)?
驻留程序在执行结束后,使程序的一部分仍留在内存,受到操作系统的保护,可以由其 它程序再次激活。 (2)驻留程序的基本框架
3.实例
2012-6-2
80x86汇编语言程序设计
8.2 80x86的中断系统 8.2.1 中断的基本概念
1. 什么是中断?
在CPU执行程序的过程中,由于出现了某个事件,CPU暂停当前程序,而转去执行 处理该事件的程序,处理完后,返回被暂停的程序处继续执行,这个过程称为中断。 引起中断的事件称作中断源, 处理该事件的程序称作中断服务程序(Interrupt Service Routine,简称ISR)。 实现中断的硬件及软件称为中断系统。

汇编语言第8章输入输出接口

汇编语言第8章输入输出接口
本章主要内容
(1) I/O接口的基本概念 (2) I/O控制方式 (3) DMA接口技术 (4) 可编程DMA控制器8237
8.1 I/O接口概述
8.1.1 I/O接口的基本功能
(1) 数据缓冲 (2) 提供联络信息 (3) 信号与信息格式的转换 (4) 设备选择 (5) 中断管理 (6) 可编程功能
IOW
图8.4 片选信号的产生
8.2 I/O控制方式
主机与外围设备之间的数据传送控制方式(即I/O控制 方式)主要有三种:
程序控制方式、中断控制方式和直接存储器存取 (DMA)方式。
8.2.1 程序控制方式
程序控制方式是指在程序控制下进行的数据传送方式。 它又分为无条件传送和程序查询传送两种。
地址空间 200~20FH 210~217H 218~2F7H 2F8~2FFH 300~31FH 320~32FH 330~377H 378~37FH
器件/接口适配器 地址空间
游戏卡
380~38FH
扩充部件
390~3AFH
未用
3B0~3BFH
异步通信卡(COM2) 3C0~3CFH
未用
3D0~3DFH
(5) DMA控制器发出存储器写信号MEMW,将数据传送 到由地址总线上的地址所指向的内存单元;
(6) DMA控制器放弃对总线的控制权;
(7) 地址寄存器加1;
(8) 字节计数寄存器减1;
(9) 如果字节计数寄存器的值不为零,则返回第一步,否 则结束。
第8章 作业
8.1 8.2 8.3 8.5 8.6 8.7 8.11
硬盘卡
3E0~3EFH
未用
3F0~3F7H
打印卡
3F8~3FFH
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DMA方式:也称为成组数据传送方式.主要适用于—些高速的 /O设备,如 方式:也称为成组数据传送方式.主要适用于 些高速的 些高速的I/ 设备 设备, 方式 磁带,磁盘,模数转换器等设备.DMA方式能使 方式能使I 磁带,磁盘,模数转换器等设备.DMA方式能使I/O设备直接和存储器进行成 批数据的快速传送.每个字节一到达端口,就直接从接口送到存储器,同样, 批数据的快速传送.每个字节一到达端口,就直接从接口送到存储器,同样, 接口和它的DMA控制器也能直接从存储器取出字节并把它送到I DMA控制器也能直接从存储器取出字节并把它送到 设备中去. 接口和它的DMA控制器也能直接从存储器取出字节并把它送到I/O设备中去.
第一章 基础知识 第八章 输入与输出程序设计
第一章 基础知识 第八章 输入与输出程序设计
第二节:程序直接控制 / 方式 第二节:程序直接控制I/O方式
I/O端口的地址编码:计算机的外部设备和大容量存储设备都是通过接口连接 / 端口的地址编码 端口的地址编码: 到系统上,每个端口由一组寄存器组成,这些寄存器都分配有一个地址编码, 到系统上,每个端口由一组寄存器组成,这些寄存器都分配有一个地址编码, 该编码称为I 计算机的CPU和内存就是通过这些端口和 该编码称为I/O端口的地址编码 .计算机的 和内存就是通过这些端口和 外部设备进行通讯的. 外部设备进行通讯的. I/O接口中有用作数据缓 / 接口中有用作数据缓 冲的数据寄存器 数据寄存器, 冲的数据寄存器,有用做 保存设备和接口的状态信 息,供CPU对外设进行测 对外设进行测 试的状态寄存器 状态寄存器; 试的状态寄存器;还有用 来保存CPU发出的命令以 来保存 发出的命令以 控制接口和设备的操作的 命令寄存器. 命令寄存器.它们都分配 有各自的端口号, 有各自的端口号,CPU就 就 是通过不同的端口号来选 择外部设备的
第一章 基础知识 第八章 输入与输出程序设计
第三节: 第三节:中断传送方式
什么是中断:中断是一种使 中止正在执行的程序而转去处理特殊事件的操作. 什么是中断:中断是一种使CPU中止正在执行的程序而转去处理特殊事件的操作. 中止正在执行的程序而转去处理特殊事件的操作 什么是中断源: 什么是中断源:引起中断的事件 . 中断的优点:避免因反复查询外部设备的状态而浪费时问,从而提高了 的效率.பைடு நூலகம்中断的优点:避免因反复查询外部设备的状态而浪费时问,从而提高了CPU的效率. 的效率 外中断:由外设控制器或协处理器( 外中断:由外设控制器或协处理器(8087/80287)引起的中断一般称为外中断 . ) 内中断:中断指令INT产生的中断,或由 产生的中断, 内中断:中断指令 产生的中断 或由CPU的某些错误结果产生的中断称为内中断 的某些错误结果产生的中断称为内中断 8086/8088的中断源如下图所示 : / 的中断源如下图所示
第一章 基础知识 第八章 输入与输出程序设计
第一章 基础知识 第八章 输入与输出程序设计
非屏蔽中断:是为电源错,内存或 / 总线的奇偶错等异常事件的中断保留的 总线的奇偶错等异常事件的中断保留的. 非屏蔽中断:是为电源错,内存或I/O总线的奇偶错等异常事件的中断保留的. 外部设备的中断是通过 可编程中断控制器(PIC)连到主机上.CPU通过一组 / 连到主机上. 通过一组I/ 外部设备的中断是通过Inter 8259A可编程中断控制器 是通过 可编程中断控制器 连到主机上 通过一组 O端口控制 端口控制8259A,而8259A则通过 管脚给CPU传送中断信号.这种外中断类型的分 传送中断信号. 端口控制 , 则通过INTR管脚给 管脚给 传送中断信号 配由硬件连线实现. 配由硬件连线实现. 中断20H到3FH用于调用 到 用于调用DOS功能例行程序,其它中断号小于 功能例行程序, 或大于3FH的中断, 的中断, 中断 用于调用 功能例行程序 其它中断号小于20H或大于 或大于 的中断 用于调用IBM PC ROM BIOS或一些应用软件 用于调用 或一些应用软件
注意: 功能调用或BIOS例行程序, 例行程序, 注意:DOS功能调用或 功能调用或 例行程序 其例行程序本身也是用IN和 其例行程序本身也是用 和OUT指令 指令 与外部设备进行数据交换的. 与外部设备进行数据交换的.
第一章 基础知识 第八章 输入与输出程序设计
二, I/O直接数据传输举例 直接数据传输举例
一, 中断向量表
我们给每种中断都安排一个中断 类型号. 中断系统能处理256 类型号.IBM PC中断系统能处理 中断系统能处理 种类型的中断,类型号为0—0FFH. 种类型的中断,类型号为 . 每种类型的中断都由相应的中断处理 程序来处理,中断向量表就是各中断 程序来处理,中断向量表就是各中断 类型的处理程序的地址表. 类型的处理程序的地址表.如左图所 示:
例 SOUND程序 (发声程序) 程序 发声程序)
基本原理: 基本原理: 程序通过I/ 指令使设备控制寄存器 指令使设备控制寄存器(I/ 端口地址为 端口地址为61H)的第 位交替为 和l, 的第1位交替为 程序通过 /O指令使设备控制寄存器 /O端口地址为 的第 位交替为0和 , 而端口6lH的第 位和扬声器的脉冲门相连,当第 位由 变为 ,延迟一会又由 变为 时, 的第1位和扬声器的脉冲门相连 位由0变为 变为1时 而端口 的第 位和扬声器的脉冲门相连,当第1位由 变为1,延迟一会又由0变为 脉冲门就先打开后关闭,产生了一个脉冲电流. 脉冲门就先打开后关闭,产生了一个脉冲电流.这个脉冲电流被放大后送到扬声器使 之发出了声音. 端口的第0位和一个振荡器 号定时器)相连 之发出了声音.61H端口的第 位和一个振荡器 号定时器 相连,现在不用振荡器产生 端口的第 位和一个振荡器(2号定时器 相连, 声音,所以把第0位置零 位置零. 声音,所以把第 位置零.
第一章 基础知识 第八章 输入与输出程序设计
指令可以从一个数据寄存器输入数据或从状态寄存器输入接口和外没的状态. 用IN指令可以从一个数据寄存器输入数据或从状态寄存器输入接口和外没的状态. 指令可以从一个数据寄存器输入数据或从状态寄存器输入接口和外没的状态 下面两条指令能把一个字从端口地址0028和0029传送到存储器的 例如 下面两条指令能把一个字从端口地址 和 传送到存储器的 DATA_WORD单元中. 单元中. 单元中
第一章 基础知识 第八章 输入与输出程序设计
以上CPU与外部设备交换信息的方式称为查询方式或等待方式. 造成CPU必须查询等待的主要原因是许多外设的工作速度比较 低.如磁盘,打印机等,它们通过按键或打印头的机械动作输入 或输出一个数据,其速度是很慢的,而OUT执行指令的速度是它 的几千倍乃至上万倍,所以则在接收或发送数据之前必须要了解 外设的状态,看外设是否已经准备好.当外没还没有准备好以前, CPU就要等待,不能做别的操作.为了提高CPU的工作效率,我 们可采用中断方式传送数据.关于中断,我们将在下一节中做详 细介绍.
第一章 基础知识 第八章 输入与输出程序设计
例 COMM程序 程序
基本原理 这是一个关于INS8250串行通讯口 /O的例子.它的数据寄存器的端口地址是 串行通讯口I/ 的例子 的例子. 这是一个关于 串行通讯口 03F8H ,状态寄存器的端口地址是 状态寄存器的端口地址是03FDH.其中 位是输入数据准备位,5位是输出数据 位是输入数据准备位, 状态寄存器的端口地址是 .其中0位是输入数据准备位 位是输出数据 准备位.下列是串行口输入输出程序. 准备位.下列是串行口输入输出程序. 输出子过程: 输出子过程: 读取子过程: 读取子过程:
第一章 基础知识 第八章 输入与输出程序设计
一, I/O指令 指令
PC机的 /O指令 和OUT,这两条指令既可以传送字节也可以传送字,并 机的I/ 指令 指令IN和 机的 ,这两条指令既可以传送字节也可以传送字, 且都有直接端口寻址和间接端口寻址两种方式. 如下所示: 且都有直接端口寻址和间接端口寻址两种方式. 如下所示:
第一章 基础知识 第八章 输入与输出程序设计
程序:
soundprogram segment assume cs:soundprogram main proc far start: mov bx, 0f350h mov dx, 2300h in al, 61h mov ah, al and al, 11111100b;关断定时器通道 的门控 关断定时器通道2的门控 关断定时器通道 sound: xor al, 2;触发 触发61H端口第 位 端口第1位 触发 端口第 out 61h, al mov cx, dx;(dx)=控制脉宽的计数值 控制脉宽的计数值 wait1: loop wait1;延时循环 延时循环 dec bx; (bx)=脉冲持续的时间 脉冲持续的时间 jnz sound mov al, ah out 61h, al;恢复 恢复61H端口 恢复 端口 mov ax,4c00h int 21h main endp soundprogram ends end start
端口地址PORT是一个 位的立即数,其范围是 一255. 是一个8位的立即数 直接端口寻址方式 :端口地址 是一个 位的立即数,其范围是0一 . 端口地址在DX中 其范围为0一 间接寻址方式 :端口地址在 中,其范围为 一65535 .
另外要注意的是, 指令中使用的寄存器必须是 指令中使用的寄存器必须是AL或 . 另外要注意的是,I/O指令中使用的寄存器必须是 或AX.
控制信息输出到I/ 接口 控制信息输出到 /O接口 : 告诉接口和设备要做什么工作 的读取:表示I/O设备当前的状态 状态信息 的读取:表示 设备当前的状态 设备和CPU真正要交换的信息. 真正要交换的信息. 数据信息的传输 :是I/O设备和 / 设备和 真正要交换的信息 常用的输入/ 常用的输入/输出方式 : 1,查询输入输出; ,查询输入输出; 2,中断输入输出 ; , 3,DMA方式 , 方式
第一章 基础知识 第八章 输入与输出程序设计
相关文档
最新文档