统一编址和独立编址 ■统一编址 端口地址与存储器地址统一编址 从存储空间中划出一部分地址空间分配给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指令中可以 直接给出端口号