《第五部分基本输入输出》由会员分享,可在线阅读,更多相关《第五部分基本输入输出(26页珍藏版)》请在金锄头文库上搜索。
1、第五部分 基本输入输出Assembly Language ProgrammingIN和OUT指令端口输入端口输入/ /输出输出 ININ OUTOUT两种寻址方式两种寻址方式 直接寻址直接寻址IN AL/AX, nIN AL/AX, nOUT n, AL/AXOUT n, AL/AX n n为端口地址,范围为为端口地址,范围为0-2550-255 间接寻址间接寻址IN AL/AX, DXIN AL/AX, DXOUT DX, AL/AXOUT DX, AL/AX DXDX为端口地址,范围为为端口地址,范围为0-640-64K K输入输出的控制方式I/OI/O设备设备与主机与主机( (CPUCP
2、U和存和存储储器器) )的通信是通的通信是通过过外外设设接口接口进进行行的,的,传传送控制、状送控制、状态态、数据三种不同的信息,、数据三种不同的信息,IN/OUTIN/OUT指指令令执执行行这这些操作。些操作。程序控制方式程序控制方式 CPUCPU利用指令反复利用指令反复查询查询I/OI/O的状的状态态,直到,直到I/OI/O准准备备好,才好,才进进行行输输入入/ /输输出。此出。此间间CPUCPU处处于循于循环环等待状等待状态态,未做有效的工作。,未做有效的工作。中断方式中断方式 CPUCPU在在执执行程序的同行程序的同时时兼兼顾对顾对I/OI/O设备设备的控制或数据的控制或数据传传送。当
3、送。当I/OI/O设备设备准准备备好(空好(空闲闲),由),由I/OI/O通知通知CPUCPU暂暂停正在运行的程序,停正在运行的程序,转转而而处处理理I/OI/O设备设备的的请请求,求,处处理完即返回主程序理完即返回主程序继续执继续执行。行。DMADMA方式方式 主要适用于高速主要适用于高速I/OI/O设备设备(如磁(如磁盘盘),),CPUCPU向向I/OI/O接口提供控制信接口提供控制信息(如数据息(如数据块块的首地址及字的首地址及字节节数),数),I/OI/O设备设备直接和存直接和存储储器器进进行成行成批数据的快速批数据的快速传传送。送。1 程序直接控制I/O方式外外设设接口由一接口由一组
4、组寄存器(数据寄存器寄存器(数据寄存器/ /状状态态寄存器寄存器/ /命令寄存器)命令寄存器)组组成,每个寄存器有一个端口地址成,每个寄存器有一个端口地址( (端口号端口号) ),IBM-PCIBM-PC机的机的I/OI/O地址空地址空间间可达可达6464K(0000FFFFH)K(0000FFFFH)。I/OI/O指令指令 例:例:测试测试某状某状态态寄存器(端口号寄存器(端口号2727H H)的第的第2 2位是否位是否为为1 1IN AL, 27HIN AL, 27HTEST AL, 00000100BTEST AL, 00000100BJNZ ERRORJNZ ERROR例例CPU要从要
5、从3个设备轮流输入数据,设备个设备轮流输入数据,设备1,2,3的状态寄存器的状态寄存器 端口号分别用端口号分别用STAT1,STAT2,STAT3表示,第表示,第5位是输入位是输入 准备位。准备位。INPUT: INPUT: IN AL, STAT1IN AL, STAT1 TEST AL, 20HTEST AL, 20H JZ DEV2 JZ DEV2 CALL FAR PTR CALL FAR PTR PROC1PROC1DEV2: DEV2: IN AL, STAT2IN AL, STAT2 TEST AL, 20HTEST AL, 20H JZ DEV3 JZ DEV3 CALL FA
6、R PTR CALL FAR PTR PROC2PROC2DEV3: DEV3: IN AL, STAT3IN AL, STAT3 TEST AL, 20HTEST AL, 20H JZ NO_INPUT JZ NO_INPUT CALL FAR PTR CALL FAR PTR PROC3PROC3NO_INPUT:NO_INPUT: 2 2 中断传送方式中断传送方式IBM-PC中中断断系系统统能能处处理理256种种类类型型的的中中断断,类类型型号号为为00FFH。中断向量表是各种中断处理程序的地址表。中断向量表是各种中断处理程序的地址表。中断操作的中断操作的5个步骤个步骤:(1) 取中断类
7、型号取中断类型号(2) 计算中断向量地址计算中断向量地址(3) 取中断向量,偏移地址送取中断向量,偏移地址送IP,段地址送段地址送CS(4) 转入中断处理程序转入中断处理程序(5) 中断返回到中断返回到INT指令的下一条指令指令的下一条指令例例:BIOS中断中断 INT 4AH 4AH 4 = 128H 4AH 4+2 = 12AH (128H) IP (12AH) CS软件中断 vs. 硬件中断中断源:引起中断的事件中断源:引起中断的事件外中断(硬中断):外设的外中断(硬中断):外设的I/O请求请求 可屏蔽中断可屏蔽中断 电源掉电电源掉电/奇偶错奇偶错 非屏蔽中断非屏蔽中断内中断(软中断):
8、内中断(软中断):INT指令指令/CPU错(除法错、溢出)错(除法错、溢出)硬件中断 触发的事件来源于硬件,例如I/O设备完成I/O操作 事件可发生在程序执行的任何时候 CPU在每条指令执行完毕,检查是否发生了硬件中断软件中断 触发的事件来源于程序中软件中断指令(也称为系统调用指令)通过运行软件中断指令,CPU处理中断中断处理程序和中断向量中断处理程序操作系统中处理特定中断的函数该函数以IRET返回,而非RET中断向量表由256个中断向量组成每个中断向量都是由4字节的相应的中断处理程序的入口地址组成较高2字节的地址对应中断处理程序的CS地址较低较低2 2字节的地址对应中断处理程序的字节的地址对
9、应中断处理程序的IPIP地址地址占用内存低端地址的1024字节的区域中断调用和返回 INT vs. IRETINT指令格式:INT INT interrupt_typeinterrupt_type 动作:标志寄存器入栈,然后标志寄存器入栈,然后TFTF和和I IF F清清0 0CS CS 和和 IP IP 依次入栈依次入栈根据根据interrupt_typeinterrupt_type设置设置CS:IP CS:IP 中断向量的地址中断向量的地址IRET指令格式:IRET 动作:将堆栈中保存的IP内容弹回到IP将堆栈中保存的CS内容弹回到CS将堆栈中保存的标志寄存器内容弹回到标志寄存器BIOS
10、vs. DOS系统调用BIOS功能调用是对DOS或者用户程序服务的基本I/O请求操作的服务.BIOS functions: INT 0 到 INT 1BHDOS system calls: INT 21H各种不同的系统调用功能是由AH指定的1 DOS 系统调用Assembly Language Programming字符的显示 INT 21H with 02H显示一个字符 INT 21H with 02H输入:AH: 09HDL: 显示的字符例:MOV AH, 02HMOV AH, 02HMOV DL, 53H ;SMOV DL, 53H ;SINT 21HINT 21H字符串的显示 INT
11、21H with 09H显示字符串 INT 21H 输入:AH: 09HDX: 串的起始地址偏移量该串的结束符号必须是 $例:MSG DBNAME?, $MOV AH, 09HLEA DX, MSGINT 21H键盘输入INT 21H with 0AH第1步:键盘输入参数表PARA_LIST PARA_LIST LABEL BYTELABEL BYTEMAX_LEN MAX_LEN DBDB2020ACT_LENACT_LENDB ?DB ?KB_DATAKB_DATADB 20 DUP( )DB 20 DUP( )第2步:功能设置MOV MOV AH, 0AHAH, 0AHLEA LEA D
12、X, PARA_LISTDX, PARA_LISTINT INT 21H21H14 06 W i l s o n 0D 总长度 实际长度 回车符号注意:最大长度加上回车符号不超过20最大长度实际长度数据缓冲区综合例子提示用户输入姓名,然后用户输入不超过20个字符.DATA;Define data segmentMSG DBNAME?, $ PARA_LIST LABEL BYTEMAX_LEN DB 20ACT_LENDB ?KB_DATADB 20 DUP( ).CODEMAINPROC FARMOV AX,data;Set address of dataMOV DS,AX; segment
13、 in DSMOV AH, 09HLEA DX, MSGINT 21HMOV AH, 0AHLEA DX, PARA_LISTINT 21HMOV AX,4C00H;End processingINT 21HMAINENDPEND MAIN控制字符的显示根据其ASCII码显示出来控制字控制字符符ASCIASCII I码码1616进进制数制数说明说明回车回车13130 0DHDH重新回到屏幕左边重新回到屏幕左边换行换行10100 0AHAH前进到下一行前进到下一行TABTAB09090909H H前一个前一个TABTAB位置位置CRCREQU 13EQU 13LFLFEQU 10EQU 10TA
14、BTABEQU 09EQU 09MSG MSG DB TAB, MESSAGE FROM SYS, CR, LF, $DB TAB, MESSAGE FROM SYS, CR, LF, $2 BIOS功能调用Assembly Language Programming屏幕的特征2525行,行,8080列列文本显示按文本显示按页页存储,编号从存储,编号从0 0到到7 7,页,页0 0默认。默认。2580 2580 4000 4000字节字节 每页每页4 4K K字节(字节(9696字节未用)字节未用),其中,其中2 2K K存字符,存字符,2 2K K存属性存属性各页的默认起始地址:各页的默认起始
15、地址:B800H, B900H, B800H, B900H, BA00HBA00H00H, 00H00H, 4FH0CH, 27/28H18H, 4FH视频显示区B800(0)H设置光标 INT 10H with 02H 光标的位置决定了输入、输出的位置设置光标 INT 10H 的 02H功能设置:AH: 02HBH: 页数DH: 行数 (between 0 and 24)DL: 列数(between 0 and 79)例movmov ah, 02h ah, 02hmov bhmov bh, 00h, 00hmov dxmov dx, 080Fh, 080Fhintint 10h 10h清屏
16、INT 10H with 06H清屏 INT 10H 的 06H 功能设置:AH: 06HAL: 滚动的线数, 00H代表全屏BH: 属性值(颜色、闪烁等)CX: 起始的 row:columnDX: 结束的 row:column另外一种清屏设置显示方式00H功能也能实现清屏的功能例:MOV AH, 00H MOV AH, 00H MOV AL, 03HMOV AL, 03H; ;设置彩色文本显示设置彩色文本显示INT 10HINT 10H3 中断处理程序的编写Assembly Language ProgrammingDOS功能调用(功能调用(21H)存取中断向量存取中断向量设置中断向量:设置中
17、断向量:AH=25HAL=中断类型号中断类型号DS:DX=中断向量中断向量INT 21H取中断向量:取中断向量:AH=35HAL=中断类型号中断类型号INT 21H返回时送返回时送ES:BX=中断向量中断向量设置设置CPU中断允许位中断允许位标志寄存器中的中的IF位位=1 允许中断允许中断 (STI 开中断)开中断) =0 禁止中断禁止中断 (CLI 关中断)关中断)中断程序的编写步骤:中断程序的编写步骤:主程序:主程序:(1) 设置中断向量设置中断向量 (2) 设置设置CPU中断允许位中断允许位 (3) 设置中断屏蔽位设置中断屏蔽位中断处理子程序:中断处理子程序: (1) 中断处理功能中断处理功能 (2) IRET中断返回中断返回P195 例10.4.1