第八章输入与输出程序设计 端口数量: 在 IBMPC中,1M空间的低16位地址线有效,因此这个ⅣO空间允许设置 64K(65536)个8位端口或32K(32768个16位端口。 PC机的部分端口地址(16进制 00—0F DMA芯片8237A 0-21 中断控制器8259A 40-43 时钟/定时器 6063 可编程序外圈接口芯片(PPI)8255A 200-20F 游戏适配器 32032F 硬磁盘控制器 378-37A 并行接口打印机适配器 3B0-3BF 单色显示和并行打印机适配器 3DO-3DF 彩色/图形适配器 3F03F7 软磁盘控删器 3F8--3FE 异步通讯适配器( Primary) 2F8--2FE 异步通讯适配器( Alternate)
第八章第一章输入与输出程序设计 基础知识 端口数量: 在IBM PC中, 1M空间的低16位地址线有效,因此这个I/O空间允许设置 64K (65536) 个8位端口或32K(32768)个16位端口。 PC机的部分端口地址(16进制)
第八章输入与输出程序设计 IO指令 PC机的I/O指令IN和OUT,这两条指令既可以传送字节也可以传送字,并 且都有直接端口寻址和间接端口寻址两种方式。如下所示: IN AL, PORT (AL)+( PORT) IN AX, PORT (AX)+(PORT+I: PORT IN AL, DX (AL)←((DX》) IN AX. DX (AK)+((Dx)1:(DX)) OUT PORT, AL (PORT)+(AL) OUT PORT, AX (PORT+11 PORT)+(AX) OUT DX. AL ((DX)+(AL) OUT DX.AX ((DX)+1:(DX)+(AX) 直接端口寻址方式:端口地址PORT是一个8位的立即数,其范围是0-255 间接寻址方式:端口地址在DX中,其范围为0-65535。 另外要注意的是,ⅣO指令中使用的寄存器必须是AL或AX
第八章第一章输入与输出程序设计 基础知识 一、 I/O指令 PC机的I/O指令IN和OUT,这两条指令既可以传送字节也可以传送字,并 且都有直接端口寻址和间接端口寻址两种方式。如下所示: 直接端口寻址方式 :端口地址PORT是一个8位的立即数,其范围是0一255。 间接寻址方式 :端口地址在DX中,其范围为0一65535 。 另外要注意的是,I/O指令中使用的寄存器必须是AL或AX
第八章输入与输出程序设计 用IN指令可以从一个数据寄存器输入数据或从状态寄存器输入接口和外没的状态。 例如下面两条指令能把一个字从端口地址0028和0029传送到存储器的 DATA WORD单元中。 N AX, 28H MOV DATA WORD, AX 例测试某状态寄存器端口地址为27H的第2位是否为1,若为1,则转移到 ERROR进 行处理。 N AL, 27H TEST AL, 00000100B JNZ ERROR OUT指令用来输出数据或给一个指定的I/O端口传送命令信息。 例某接口的命令寄存器端口地址为126 h MOv DX,126H 的第7位控制成组数据传送。 AL, DX 注意:DOS功能调用或BIOS例行程序, 其例行程序本身也是用ⅣN和OUT指令ORAL,80H 与外部设备进行数据交换的。 OUT DX.AL
第八章第一章输入与输出程序设计 基础知识 用IN指令可以从一个数据寄存器输入数据或从状态寄存器输入接口和外没的状态。 例如 下面两条指令能把一个字从端口地址0028和0029传送到存储器的 DATA_WORD单元中。 例 测试某状态寄存器(端口地址为27H)的第2位是否为1,若为1,则转移到ERROR进 行处理。 OUT指令用来输出数据或给一个指定的I/O端口传送命令信息。 例 某接口的命令寄存器(端口地址为126H) 的第7位控制成组数据传送。 注意:DOS功能调用或BIOS例行程序, 其例行程序本身也是用IN和OUT指令 与外部设备进行数据交换的
第八章输入与输出程序设计 IO直接数据传输举例 例 SOUND程序(发声程序) 基本原理: 程序通过I/O指令使设备控制寄存器(I/O端口地址为6H的第1位交替为0和 而端口6H的第1位和扬声器的脉冲门相连,当第1位由0变为1,延迟一会又由0变为1时, 脉冲门就先打开后关闭,产生了一个脉冲电流。这个脉冲电流被放大后送到扬声器使 之发出了声音。61H端口的第0位和一个振荡器(2号定时器)相连,现在不用振荡器产生 声音,所以把第0位置零。 3210 端口6H 控制其它外部设备 2号定时器门控 门敵大器 设备控制寄存器
第八章第一章输入与输出程序设计 基础知识 二、 I/O直接数据传输举例 例 SOUND程序(发声程序) 基本原理: 程序通过I/O指令使设备控制寄存器(I/O端口地址为61H)的第1位交替为0和l, 而端口6lH的第1位和扬声器的脉冲门相连,当第1位由0变为1,延迟一会又由0变为1时, 脉冲门就先打开后关闭,产生了一个脉冲电流。这个脉冲电流被放大后送到扬声器使 之发出了声音。61H端口的第0位和一个振荡器(2号定时器)相连,现在不用振荡器产生 声音,所以把第0位置零
第八章输入与输出程序设讣 程序: soundprogram segment assume cs: soundprogram main proc far start: mov bx. 0f350h mov dx. 2300h n 1, 61h mov ah, al and al,lb;关断定时器通道2的门控 sound: xor al,2;触发61H端口第1位 out 61h. al mov CX,dx;(dx)=控制脉宽的计数值 wait: loop waitI;延时循环 dec bx;(bx)=脉冲持续的时间 jnz sound mov al, ah out6h,al;恢复61H端口 mov ax 4c00h int 21h main endp soundprogram ends end start
第八章第一章输入与输出程序设计 基础知识 程序: 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