第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备.

Slides:



Advertisements
Similar presentations
第1章第1章 PC/AT 系統 1 Chapter 1 Chapter 1 PC/AT 系統 001.
Advertisements

微型计算机原理及应用.
输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
汇编语言程序设计 吴 向 军 中山大学计算机科学系
微型计算机技术 教 学 指 导(七) 太原广播电视大学 郭建勇.
第10章 DOS功能调用与BIOS中断调用.
第7章 8086/8088汇编语言程序设计 7.1 引言 7.2 顺序程序设计 7.3 分支结构程序设计 7.4 循环结构程序设计
第四章 汇编语言 程序设计 任课教师:王晓甜
第一章 计算机基础知识 第一节 计算机概述 一、计算机的基本组成和工作原理 二、有关术语 三、计算机发展简史 四、微型计算机概述
第5章 输入输出与接口技术.
输入/输出及接口 输入/输出的传送方式 中断技术 80x86/Pentium中断系统 8259A可编程中断控制器 中断程序设计
本周实验安排 实验内容:(P231)人名排序的例子。
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年10月30日.
得技通电子 问题 1 右何者非為假指令 (1) XRL (2) EQU (3) MACRO (4) ORG.
第3章 80x86汇编语言程序设计(下).
4.1 汇编语言 4.2 顺序结构程序 4.3 分支程序设计 4.4 循环程序设计 4.5 子程序设计
第3章 80x86汇编语言程序设计(上) 16位汇编版本 时间不够的情况下只讲16位汇编.
9.1 可编程并行输入/输出接口芯片8255A 9.2 可编程计数器/定时器 可编程串行输入/输出接口芯片8251A
3.3.5 程序控制指令 控制转移指令分为: 转移指令 循环控制指令 调用和返回指令 中断指令.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月26日.
第7章 中断与异常.
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
汇编语言程序设计 Assembly Language Programming
第三章 寻址方式与指令系统 3.1 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
第7章 并行接口 7.1 简单并行接口 7.2 可编程并行接口8255A 7.3 键盘接口 7.4 LED显示器接口.
第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第四节 Intel 8253在IBM PC机上的应用.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月10日.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月05日.
输入输出与中断 主要内容 CPU与外设之间数据传送方式 中断技术 8086中断系统和中断处理.
第5章 输入输出与接口技术.
第3章 IA-32指令系统 3.1 基本数据类型 3.2 IA-32的指令格式 3.3 IA-32指令的操作数寻址方式
第二部分 PC 微机异步通信适配器的分析和使用 一、PC中的UART 1.INS PC16450/PC16550
第4章 汇编语言程序设计 4.1 程序设计语言概述 4.2 汇编语言的程序结构与语句格式 4.3 汇编语言的伪指令
微机原理及应用 主讲:谢维成 西华大学 电气信息学院 1.
基本的”防”黑客技术 Basic” ” Hacker Technique
微机原理及应用 主讲:郑海春.
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
第8章 PCH中的常规接口.
汇编语言程序设计课程设计 第二次实验 DEBUG基本命令与算术运算指令
微型计算机原理及应用.
第3章 微型计算机输入输出接口 3.1 输入/输出接口 3.2 输入输出数据传输的控制方式 3.3 开关量输入输出接口 欢迎辞.
第六章 子程序结构 §6.1 子程序的设计方法 §6.2 嵌套与递归子程序 §6.3 子程序举例 §6.4 DOS系统功能调用.
1.3 微型计算机的结构和工作原理.
第 13 章 中断系统.
第九章 高级宏汇编语言 9.1 结构 结构就是将逻辑上有一定关系的一组数据,以某种方式组合在一起所形成的数据形式。
第5章 循环与分支程序设计 学习目标: 了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。
4.1 汇编语言程序格式 4.2 MASM中的表达式 4.3 伪指令语句 4.4 DOS系统功能调用和BIOS中断调用
3.4.5 控制转移指令(Control transfer instructions) (一)、控制转移指令概述
第7章 I/O接口和总线 7.1 I/O接口 7.2 总线.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月19日.
第五章:输入输出基本技术 主讲教师:范新民.
第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程.
第10章 可编程外围接口芯片8255A及其应用 10.1 概述 A的工作原理 A的应用举例.
可编程定时计数器.
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
第2章 80x86计算机组织  计算机系统  存储器  中央处理机  外部设备.
《微型计算机原理与接口技术》 第4版 王良 宁德师范学院 吴宁 乔亚男 编著 清华大学出版社 出版
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月17日.
第八章 中断系统.
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月06日.
第12章 中断 罗文坚 中国科大 计算机学院
第6章 子程序结构 在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 调用子程序的程序称为主调程序或主程序。 2019/7/20 ch6.
微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰.
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
第8章 并行接口芯片 并行接口一般具有两个或两个以上的8位I/O接口。各个口的工作方式可由程序分别确定或改变,使用灵活,便于和各种外部设备连接。因此,又称可编程的外部接口(PPI) 目前各主要微处理器厂商都有自己的PPI产品,但它们的功能基本类似.
第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程
第三章 8086的指令系统 8086指令特点 8086的寻址方式 8086的指令格式及数据类型 8086的指令集.
微型计算机系统.
Presentation transcript:

第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备

1. I/O 设备的数据传送方式 查询方式 (程序控制方式) 中断方式 DMA方式 (直接存储器存取方式/成组传送方式)

2. 程序直接控制 I/O 方式 I/O 指令是主机与外设进行通信的最基本途径。DOS 功能调用和BIOS例行程序中的输入/输出功能也是由IN和OUT指令完成的。 例:循环测试某状态寄存器的第2位是否为1 AGAIN: IN AL, STATUS_PORT TEST AL, 00000100B JZ AGAIN 读I/O状态 N 准备好? IN AL,DATA_PORT Y 传送数据

2. 程序直接控制 I/O 方式 I/O 指令是主机与外设进行通信的最基本途径。DOS 功能调用和BIOS例行程序中的输入/输出功能也是由IN和OUT指令完成的。 例:循环测试某状态寄存器的第2位是否为1 AGAIN: IN AL, STATUS_PORT TEST AL, 00000100B JZ AGAIN 读I/O状态 N 准备好? MOV AL, DATA OUT DATA_PORT, AL Y 传送数据

轮流查询几种I/O设备: DEV1: IN AL, STAT1 TEST AL, STAT1_BIT JZ DEV2 CALL FAR PTR PROC1 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大量有效时间

…… mov dx, 100 例:Sound 程序1 in al, 61h and al, 11111100b sound: xor al, 2 out 61h, al mov cx, 140h wait1: loop wait1 dec dx jne sound 例:Sound 程序1 设备控制寄存器( 61h ) 1/0 0 控制其它外部设备 与门 放大器 2号定时器门控 1 0

例:Sound 程序2 .model tiny .code .startup call speaker_on mov ah, 1 speaker_on proc push ax in al, 61h or al, 3  out 61h, al pop ax ret speaker_on endp   speaker_off proc and al, 0fch speaker_off endp end 例:Sound 程序2 .model tiny .code .startup call speaker_on mov ah, 1 int 21h call speaker_off .exit 0

例:打印机查询输出子程序 0 0 0 0 1 1 0 1 print proc near push ax push dx mov dx, 378h ; 数据寄存器 out dx, al mov dx, 379h ; 状态寄存器 again: in al, dx test al, 80h ; (dx)7 = busy je again ; =0,打印机忙 mov dx, 37ah ; 控制寄存器 mov al, 0dh out dx, al ; 送选通信号 jmp $+2 ; 展宽选通信号 mov al, 0ch pop dx pop ax ret print endp 0 0 0 0 1 1 0 1 37AH 中断位 选通位 选择位 初始化 自动换行

3. 中断传送方式 中断源:引起中断的事件 外中断(硬中断): 内中断(软中断): 外设的 I/O 请求 —— 可屏蔽中断 3. 中断传送方式 中断源:引起中断的事件 外中断(硬中断): 外设的 I/O 请求 —— 可屏蔽中断 电源掉电 / 奇偶错 —— 非屏蔽中断 内中断(软中断): INT 指令 / CPU 错(除法错、溢出)/ 为调试程序设置的中断

80x86 中断源: CPU 8259A 非屏蔽中断请求 可编程中断控制器 中断逻辑 (PIC) INT n INTO 除法错 单步 2 NMI 8259A 可编程中断控制器 (PIC) IR0 系统定时器 IR1 键盘 IR2 彩色/图形接口 IR3 保留 IR4 串行通讯口 IR5 保留 IR6 软盘 IR7 打印机 INTR 08 09 0A 0B 0C 0D 0E 0F

FLAGS 中的 IF 位 = 1 允许中断 ( STI ) 中断的条件: 设置CPU中断允许位: FLAGS 中的 IF 位 = 1 允许中断 ( STI ) = 0 禁止中断 ( CLI ) 设置中断屏蔽位: 中断屏蔽寄存器的中断屏蔽位 = 0 允许I/O设备请求中断 = 1 禁止I/O设备请求中断 7 6 5 4 3 2 1 0 定时器 键 盘 打印机 中断屏蔽寄存器21H 中断命令寄存器20H EOI MOV AL, 20H OUT 20H, AL 8259A IN AL, 21H AND AL,0FDH OUT 21H,AL

中断向量表 类型0的(IP) 类型0的(CS) 类型1的(IP) 类型1的(CS) 类型N的(IP) 类型N的(CS) 类型255的(IP) 00000 类型0的(CS) 类型1的(IP) 00004 中断向量—中断处理程序的入口 地址(段址):(偏址) 类型1的(CS) 类型N的(IP) 4*N 用户可利用保留的中断类型号 扩充自己需要的中断功能。 类型N的(CS) 类型255的(IP) 003FC 类型255的(CS)

CPU中断过程: (1)取中断类型:CPU ← type N (2)保护现场:FLAGS、CS、IP入栈 (3)IF=0, TF=0 (4)取中断向量:(4×N)→ IP (4×N+2)→ CS (5)转中断处理程序

例:为中断类型 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

DOS 功能调用(21H)存取中断向量: 设置中断向量: AH = 25H AL = 中断类型号 DS : DX = 中断向量 INT 21H 取中断向量: AH = 35H 返回时送 ES : BX = 中断向量

例:用 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 AH, 25H INT 21H ; 设置新的中断向量 POP DS …… POP DX INT 21H ; 恢复原中断向量 INTHAND: ; 中断处理程序 IRET

中断程序的编写步骤: 主程序: 设置中断向量 设置 CPU 的中断允许位 IF 设置设备的中断屏蔽位 中断处理子程序: 保存寄存器内容 如允许中断嵌套,则开中断 ( STI ) 中断处理功能 关中断 送中断结束命令( EOI )给中断命令寄存器 恢复寄存器内容 IRET中断返回

例: 编写一个中断处理程序,要求在主程序运行期间, 每隔 10秒响铃一次,同时显示‘ bell ’ 例: 编写一个中断处理程序,要求在主程序运行期间, 每隔 10秒响铃一次,同时显示‘ bell ’ ; INT_TIMER    ∶  INT 1CH ∶ IRET INT_1CH PROC IRET INT_ICH ENDP 定时器 中断 18.2次/SEC RING PROC 1.计数182(10秒) 2.显示字符串 IRET RING ENDP

例:编写一个中断处理程序,要求在主程序运行期间, 每隔 10 秒响铃一次,并显示 ‘bell’ 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 ah, 25h pop ds   in al, 21h and al, 11111110b out 21h, al sti .model small .stack .data cnt dw 1 mes db 'bell',0ah,0dh,'$'   .code main proc far start: mov ax, @data mov ds, ax 

ring proc near ring endp …… ;保存寄存器 mov di, 30000 mov ax, @data ……  ;保存寄存器 mov ax, @data mov ds, ax sti ;开中断 dec cnt jnz exit   mov dx, offset mes mov ah, 09 int 21h call sound mov cnt,182 exit: cli ;关中断 …… ;恢复寄存器 iret ring endp end start mov di, 30000 dly: mov si, 60000 dly1: dec si jnz dly1 dec di jnz dly ;主程序   pop dx pop ds mov al, 1ch mov ah, 25h int 21h  mov ax, 4c00h int 21h main endp 

例:键盘模拟程序 字符码:采用ASCII 码表示字母、数字、专用字符和一些 非打印字符,键盘上的控制键和功能键的ASCII 码为0,必须用扫描码来识别。 扫描码:键盘上的每个键都对应一个扫描码,扫描码是按 键的位置来排列的。 data segment scatab db 0,0,'1234567890-=',8,0 db 'qwertyuiop[]',0dh,0 db 'asdfghjkl;',0,0,0,0 db 'zxcvbnm,./',0,0,0 db ' ',0,0,0,0,0,0,0,0,0,0,0,0,0 db '789-456+1230',0 data ends

main proc far …… lea bx, scatab disp_char proc near key_in: mov ah, 2 in al, 60h test al, 80h ;通码? jnz key_in push ax in al, 61h or al, 80h ;置应答位 out 61h, al and al, 7fh out 61h, al;复位应答位 pop ax cmp al, 01 jz exit ;按Esc退出 xlatb cmp al, 0 jz no_disp call disp_char no_disp: jmp key_in exit: …… main endp disp_char proc near mov ah, 2 mov dl, al int 21h ret disp_char endp 7 6 5 4 3 2 1 0 设备控制寄存器 61H 键盘

例:从键盘接收字符,同时对32字节的输入缓冲区进行 测试;如缓冲区已满,将键盘挂起,由打印机输出 一个提示信息 KBINT DISP MAIN KBD中断32次 BUFFER满 CALL IRET RET INTIP N RET PRINT TYP中断17次 IRET

例:从键盘接收字符,同时对32字节的输入缓冲区进行 测试;如缓冲区已满,将键盘挂起,由打印机输出 一个提示信息 程序包括以下几个部分: main 初始化部分 kbint 键盘中断处理程序 intip 初始化打印机 prtint 打印机中断处理程序 disp 用十六进制显示al中的内容

dseg segment addr dw ? ;缓冲区指针 count dw ? buffer db 20h dup (' ') prompt db 'please input:',0dh,0ah,'$' message db 'buffer overflow',0dh,0ah save_ip9 dw ? save_cs9 dw ? save_ipf dw ? save_csf dw ? dseg ends main proc far ……  mov addr, offset buffer mov count, 0

mov al, 09 ;键盘 mov ah, 35h int 21h  mov save_ip9, bx mov save_cs9, es mov dx, offset kbint push ds mov ax, seg kbint mov ds, ax mov al, 09 mov ah, 25h int 21h pop ds in al, 21h and al, 0fdh out 21h, al mov al, 0fh ;打印机 mov ah, 35h int 21h   mov save_ipf, bx mov save_csf, es mov dx, offset prtint push ds mov ax, seg prtint mov ds, ax mov al, 0fh mov ah, 25h int 21h pop ds mov ah, 9 lea dx, prompt

sti mov di, 8000h dly: mov si, 9000h dly1: dec si jnz dly1 dec di jnz dly  mov ah, 2 mov dl, '$' int 21h cli push ds mov dx, save_ip9 mov ax, save_cs9 mov ds, ax mov al, 09 mov ah, 25h pop ds push ds mov dx, save_ipf mov ax, save_csf mov ds, ax mov al, 0fh mov ah, 25h int 21h pop ds in al, 21h and al, 0fdh out 21h, al sti …… main endp

kbint proc near mov bx, addr mov [bx], al call disp push ax inc bx inc count mov addr, bx check: cmp count,32 jb ret1 ;判断是否溢出 in al, 21h or al, 02 ;屏蔽键盘中断 and al, 7fh out 21h,al ;允许打印机中断 call intip ret1: cli mov al, 20h out 20h,al ;结束键盘中断   pop bx pop ax   iret kbint endp kbint proc near push ax push bx in al, 60h in al, 61h mov ah, al or al, 80h out 61h, al ;送键盘应答信号 xchg ah, al ;复位键盘 pop ax   test al, 80h jnz ret1 ;通码时处理 通码:(60h)7=0 断码:(60h)7=1

intip proc near push ax push bx push dx cli mov bx, offset message mov addr, bx mov dx, 378h mov al, 0dh out dx, al  ;输出回车 mov dx, 37ah mov al, 1dh out dx, al  ;送选通信号 jmp $+2 ;展宽选通信号   mov al, 1ch out dx, al pop dx pop bx pop ax  ret intip endp

prtint proc near push ax push bx push dx  mov bx, addr mov al, [bx] mov dx, 378h out dx, al mov dx, 37ah mov al, 1dh jmp $+2 mov al, 1ch pop ax inc bx mov addr, bx cmp al, 0ah jnz ret2 in al, 21h or al, 80h out 21h, al ;屏蔽打印机中断 ret2: mov al, 20h out 20h, al  ;结束打印机中断 pop dx pop bx pop ax  iret prtint endp

disp proc near ;显示扫描码 push ax push cx push dx mov ch, 2 mov cl, 4 nextb: rol al, cl mov dl, al and dl, 0fh or dl, 30h cmp dl, 3ah jl dispit add dl, 7 dispit: mov ah, 2 int 21h pop ax dec ch jnz nextb mov ah, 2 mov dl, ',' int 21h   pop dx pop cx pop ax   ret disp endp

第八章作业 Page 313 8.2 8.5 8.6