汇编-14.0-端口
各种存储器和CPU的地址线、数据线、控制线相连。CPU在操控它们的时候,把它们当作内存来对待。
把它们总的看作由若干存储单元组成的逻辑存储器,这个逻辑存储器称为内存地址空间。
在PC机中,和CPU通过总线相连的芯片除各种存储器外,还有以下3种芯片:
(1).各种接口卡(比如,网卡、显卡)上的接口芯片,它们控制接口卡进行工作;
(2).主板上的接口芯片,CPU通过它们对部分外设进行访问;
(3).其他芯片,用来存储相关的系统信息,或进行相关的输入输出处理。
在这些芯片中,都有一组可以由CPU读写的寄存器。这些寄存器,它们在物理上可能处于不同的芯片中,
但是它们在以下两点上相同。
(1).都和CPU的总线相连,这种连接是通过它们所在的芯片进行的;
(2).CPU对它们进行读或写的时候都通过控制线向它们所在的芯片发出端口读写命令。
从CPU的角度,将这些寄存器都当作端口,对它们进行统一的编址,从而建立了一个统一的端口地址空间。每个端口在地址空间中都有一个地址。
CPU直接读写以下3个地方的数据:
(1).CPU内部的寄存器;
(2).内存单元;
(3).端口。
1.端口的读写
在访问端口的时候,CPU通过端口地址来定位端口,因为端口所在的芯片和CPU通过总线相连,
所以,端口地址和内存地址一样,通过地址总线来传送。在PC系统中,CPU最多可以定位64KB个
不同的端口。则端口地址的范围为0~65535.
对于端口的读写不能用mov、push、pop等内存读写指令。端口的读写指令只有两个:in和out,
分别用于从端口读取数据和往端口写入数据。
(1).访问内存:
mov ax,ds:[8] ;假设执行前(ds)=0
执行时与总线操作:
(1).CPU通过地址线将地址信息8发出;
(2).CPU通过控制线发出内存读命令,选中存储芯片,并通知它,将要从中读取的数据;
(3).存储器将8号单元中的数据通过数据线送入CPU.
(2).访问端口:
in al,60h ;从60h号端口读入一个字节
执行时与总线操作:
(1).CPU通过地址线将地址信息60h发出;
(2).CPU通过控制线发出端口读命令,选中端口所在的芯片,并通知它,将要从中读取数据;
(3).端口所在芯片将60h端口的数据通过数据线输入CPU.
注意:在in和out指令中,只能使用ax或al来存放从端口中读取的数据或要发送到端口中的数据.
访问8位端口时用al,访问16位时用ax.
2.shl和shr指令
shl和shr是逻辑移位指令.
shl是逻辑左移指令:
(1).将一个寄存器或内存单元中的数据向左移位;
(2).将最后移出的一位写入CF中;
(3).最低位用0补充.
如果移动位数大于1时,必须将移动位数放在cl中.
mov al,01010001b
mov cl,3
shl al,cl