第9章I/O程序设计 9.1工/0操作 9.2直接传送方式 9.3中断传送方式 9.4DMA传送方式 9.5文件I/0
第9章 I/O程序设计 9.1 I/O操作 9.2 直接传送方式 9.3 中断传送方式 9.4 DMA传送方式 9.5 文件I/O
9.1I/0操作 CPU与外设之间的信息交换,是通过接口 电路中的I/O端口进行的。 CPU通过N/OU指令可以对端口进行读、 写操作
9.1 I/O操作 ◼ CPU与外设之间的信息交换,是通过接口 电路中的I/O端口进行的。 ◼ CPU通过IN/OUT指令可以对端口进行读、 写操作
9.1.1I0端口及其分配 计算机由CPU、内存储器和外部设备组成 ■内存与CP可直接进行数据交换 ■外设与CP通过I/0接口电路来连接 输入/输出是相对于CPU而言 输入操作:输入设备把信息送入接口,由CPU从接 口电路中取得接口中的信息。 ■输出操作:CPU将信息传送给接口电路,再由接口 电路传送到外设
9.1.1 I/O端口及其分配 计算机由CPU、内存储器和外部设备组成 ◼ 内存与CPU可直接进行数据交换 ◼ 外设与CPU通过I/O接口电路来连接 ◼ 输入/输出是相对于CPU而言 ◼ 输入操作:输入设备把信息送入接口,由CPU从接 口电路中取得接口中的信息。 ◼ 输出操作:CPU将信息传送给接口电路,再由接口 电路传送到外设
I/0接口包含3种类型的信息: (1)来自外设的数据或要送往外设的数据,分 别保存在数据输入寄存器和数据输出寄存器中; (2)用来存放外设或者I/0接口部件本身的状态, 保存在状态寄存器中; (3)用来存放CPU发出的命令,以便控制外设和 接口的动作,保存在控制寄存器中
I/O接口包含3种类型的信息: (1)来自外设的数据或要送往外设的数据,分 别保存在数据输入寄存器和数据输出寄存器中; (2)用来存放外设或者I/O接口部件本身的状态, 保存在状态寄存器中; (3)用来存放CPU发出的命令,以便控制外设和 接口的动作,保存在控制寄存器中
端口和端口地址 端口:Ⅰ/0接口电路中能被CPU直接访问 的寄存器称为端口 端口地址:端口的地址 CPU访问I/O端口的方式: 统一编址方式(存储器映射方式) 独立编址方式(I/O映射方式)
端口和端口地址 ◼ 端口:I/O接口电路中能被CPU直接访问 的寄存器称为端口 ◼ 端口地址:端口的地址 ◼ CPU访问I/O端口的方式: ◼ 统一编址方式(存储器映射方式 ) ◼ 独立编址方式(I/O映射方式 )
统一编址和独立编址 ■统一编址 端口地址与存储器地址统一编址 从存储空间中划出一部分地址空间分配给I/0设备 CPU不需要使用专门的I0指令来访问I/0端口 个地址要么是内存单元,要么是I/0端口 ■独立编址 Ⅰ/0端口地址与存储器地址分别进行独立的编址 ■内存地址空间和I/0地址空间相互独立 CPU必须使用专门的I/0指令来访问I/O端口 ■内存操作指令使用内存地址,I/0指令使用I/O地址
统一编址和独立编址 ◼ 统一编址 ◼ 端口地址与存储器地址统一编址 ◼ 从存储空间中划出一部分地址空间分配给I/O设备 ◼ CPU不需要使用专门的I/O指令来访问I/O端口 ◼ 一个地址要么是内存单元,要么是I/O端口 ◼ 独立编址 ◼ I/O端口地址与存储器地址分别进行独立的编址 ◼ 内存地址空间和I/O地址空间相互独立 ◼ CPU必须使用专门的I/O指令来访问I/O端口 ◼ 内存操作指令使用内存地址,I/O指令使用I/O地址
9.1.21/0指令 I/0指令包括: IN指令 ■OUT指令 ■INS指令 ■OUTS指令
9.1.2 I/O指令 I/O指令包括: ◼ IN指令 ◼ OUT指令 ◼ INS指令 ◼ OUTS指令
1.IN指令 格式:IN{AL|AX|EAX},{端口地址|DX} 功能:将I/0端口中的信息读入到累加器中 累加器为AL时,从指定端口中读出1个字节送给AL; ■累加器为AX时,从指定端口中读出1个字节送给AL 从下一端口地址中读出1个字节送给AH。 累加器为EAX时,连续读出从指定地址开始的4个端 口中的内容,分别送给AL,AH和EAX的第2316位 EAX的第3124位。 当端口号大于等于256时,先把端口号放到DX寄存 器中。当端口号小于256时,在IN指令中直接给出 端口号
1.IN指令 格式:IN {AL∣AX∣EAX},{端口地址∣DX} 功能:将I/O端口中的信息读入到累加器中。 ◼ 累加器为AL时,从指定端口中读出1个字节送给AL; ◼ 累加器为AX时,从指定端口中读出1个字节送给AL, 从下一端口地址中读出1个字节送给AH。 ◼ 累加器为EAX时,连续读出从指定地址开始的4个端 口中的内容,分别送给AL, AH和EAX的第23~16位、 EAX的第31~24位。 ◼ 当端口号大于等于256时,先把端口号放到DX寄存 器中。当端口号小于256时,在IN指令中直接给出 端口号
IN指令举例 例1:从端口地址为61H的端口上读取一个字节 AL, 61H 例2:从端口地址为379H的端口上读取一个字节 MOV DX. 379H IN AL. DX 例3:从端口地址为OE00OH,OEOO1H的端口上读 取一个字 MOV DX. OEOOOH AX. DX
IN指令举例 例1:从端口地址为61H的端口上读取一个字节 IN AL, 61H 例2:从端口地址为379H的端口上读取一个字节 MOV DX, 379H IN AL, DX 例3:从端口地址为0E000H,0E001H的端口上读 取一个字 MOV DX, 0E000H IN AX, DX
2.OUT指令 格式:OUT{端口地址|DX},{AL|AX|EAⅩ 功能:将累加器中的信息输出到I/0端口 累加器为A时,AL中的内容输出到指定端口中; 累加器为AX时,AL中的内容输出到指定端口中,AH 中的内容输出到下一端口中 累加器为EAX时,AL,AH,EAX的2316位、EAX的 31^24位的内容输出到从指定地址开始的4个端口中 当端口号大于等于256时,必须先把端口号放到DX 寄存器中。当端口号小于256时,在OUT指令中可以 直接给出端口号
2.OUT指令 格式:OUT {端口地址∣DX},{AL∣AX∣EAX} 功能:将累加器中的信息输出到I/O端口。 ◼ 累加器为AL时,AL中的内容输出到指定端口中; ◼ 累加器为AX时,AL中的内容输出到指定端口中,AH 中的内容输出到下一端口中; ◼ 累加器为EAX时,AL, AH, EAX的23~16位、EAX的 31~24位的内容输出到从指定地址开始的4个端口中。 ◼ 当端口号大于等于256时,必须先把端口号放到DX 寄存器中。当端口号小于256时,在OUT指令中可以 直接给出端口号