剑圣能打到什么段位:I/O编址与访问

来源:百度文库 编辑:中财网 时间:2024/05/08 07:50:55
一. I/O端口
1. I/O接口:CPU与I/O设备间的硬件连接和软件控制的总称。
    I/O端口:指接口电路中能被CPU直接访问的寄存器。
2. I/O端口地址:对接口中寄存器(端口)的编码。
    1)一个接口可以有多个端口,如数据口、状态口、控制口等,又称数据寄存器、状态寄存器、控制(命令)寄存器。
    2)对于端口的操作,端口可以只读、只写或可读可写。
    3)端口地址的个数与接口中寄存器的个数不一定相等。可以一个寄存器拥有一个端口地址,也可以若干个寄存器拥有一个端口地址。
    4)一个端口可以写入或读出多种信息。例如,写入某端口时,是命令字,而读出该端口时,读出的是状态。也可以在写入时,以某些特征位不同而区分出写入的是什么信息。
    5)接口中的命令口、状态口和数据口均为I/O端口。   
3. I/O操作:指对I/O端口的操作,即所谓CPU访问I/O设备,是指CPU访问I/O接口中的寄存器即端口。
    CPU通过I/O端口地址区分不同的接口。  


二. I/O端口编址方法

1.I/O统一编址
    这种编址的出发点是把每一个端口视为一个存储单元,并赋予相应的存储器地址。
优点:
1)指令系统中不设置专用的I/O指令,用功能很强的访存指令来访问I/O端口,通过地址来区分访问的是存储器还是I/O端口。
2)外设数目或I/O寄存器数几乎不受限制。
3)微机的读写控制逻辑较为简单。

缺点:
1)I/O端口占用部分主存空间,可用主存空间减小;
2)访存指令较长,执行速度较慢;
3)I/O端口地址译码电路复杂,译码时间较长。


2.I/O独立编址
    这种编址方式是将I/O端口单独编址而不是和存储空间合在一起。处理器对I/O端口和存储器的不同寻址是通过不同的读/写控制信号MEMR#,MEMW#来实现的。采用这种编址方式,CPU访问I/O端口必须采专专用I/O指令,所以也叫专用I/O指令方式。
优点:
1)I/O端口地址不占用存储器地址空间;
2)I/O端口数量不多,占用地址线少,地址译码简单,速度较快;
3)使用专用I/O命令(IN/OUT),指令短,执行速度快,可读性强。

缺点:
1)专用I/O指令增加指令系统复杂性,且I/O指令类型少,程序设计灵活性较差;
2)要求处理器提供MEMR/MEMW和IOR/IOW两组控制信号,增加了控制逻辑的复杂性。

三. PC系列微机I/O端口访问

1.  I/O端口地址空间
     I/O端口地址空间:64K(A0-A15)个8位端口空间。
     I/O端口地址信号:由地址线信号和IOW/IOR信号线组成。
2.  I/O端口地址寻址方式
     I/O端口支持直接寻址和间接寻址方式。
     OUT  60H,AL;直接寻址,端口地址为8 位(0~255)
     IN     AL,21H
     OUT  DX,34H;间接寻址,端口地址为16 位(0~65535)
     IN     AX,DX  ;端口为16位的数据
3.  I/O端口与累加器间I/O指令
     格式:IN、OUT。
4.  I/O端口与存储器间I/O指令
     格式:INSB(W、D)、OUTSB(W、D)。
     参数:用DX指定I/O端口地址,输入/输出时的目的/源RAM地址用ES:DI(EDI)/DS:SI(ESI)指定。
     结果:通过前缀REP连续传送。
     例:
        MOV    DX,Port
        LES     DI,Buffer_in
        INSB;将DX所指向的端口地址内的数据输入到由ES:  DI所指向的内存单元,传送一个8位的数据
        INSW;同上,传送一个16位的数据
     例:
        MOV  DX,Port
        LDS  SI,Buffer_out
        OUTSB;将由DS:SI所指向的内存单元内的数据输出到DX所指向的端口地址,传送一个8位的数据
        OUTSW;同上,传送一个16位的数据
5.  I/O端口与存储器端口访问的区别
     命令类型:IN/OUT与MOV
     控制信号线:IOW/IOR与MEMW/MEMR
     地址信号线:A0-A15与A0-A31



四. IA-32的I/O保护

I/O保护在保护模式下有效,在实地址模式下无效。
1.   I/O特权级IOPL保护
      保护通过比较当前任务的特权级CPL和标志寄存器的IOPL字段实现的。
      即:若CPL≤IOPL,可执行IN、OUT、INS、OUTS、CLI、STI等敏感指令(对IOPL敏感);否则不行。
      每个任务都有自己的IOPL,0级特权的过程可通过POPF和IRET指令修改任务的IOPL。

2.   I/O允许位映象保护
      I/O允许位映象用来修正IOPL对I/O敏感指令的影响,允许低特权的程序访问某些I/O端口。
      (1)I/O允许位映象是一个位向量,每位对应一个端口的操作权限(0表示允许)。
      (2)在保护模式下,当CPU遇到一条对I/O敏感指令时,它首先检测CPL ≤ IOPL是否成立,若成立,则可以执行I/O操作,否则CPU检查该端口的I/O允许位映象:为0可以执行I/O操作,否则不行。
      (3)在V86模式下,当CPU遇到一条I/O指令时, CPU检查I/O允许位映象,而不考虑IOPL。
      (4)操作系统可通过改变任务TSS中的I/O允许映象来为某任务分配端口。