接口芯片中也有自己接口卡的寄存器。Cpu通过不同的端口号找到特定设备的寄存器。问题有两个:
1. CPU怎么把端口号映射为物理地址,地址总线的电瓶信号怎么和端口绑定的。
a) 例如地址总线的第20位为1,其余位为0. Cpu 怎么知道这个地址信号就是外部接口的地址? 也就是说,外部接口怎么把自己的端口号和地址总线对应起来?然后cpu怎么知道这种对应关系?对应关系存在什么地方?
Cpu访问内存和访问端口,总线上的信息
访问内存:
mov ax, ds:[8] ;(ds)=0
1) cpu通过地址线将地址8发出;
2) cpu控制器发出内存读命令,选中存储器芯片,并通知它,将要从中读取数据;
3) 存储器将8号单元的数据通过数据线送入cpu的寄存器中。
访问端口
in al, 60h ; 从60h号端口读入一个字节
1) cpu通过地址线将地址信息60h发出;
2) cpu通过控制线发出端口读命令,选中端口所在的芯片,并通知它,将要从中读取数据;
3) 端口所在的芯片将60h端口中的数据通过数据线送入CPU。
命令mov,告诉cpu从内存读取数据
命令in告诉cpu从端口读取数据。
Cmos中的70h存放要读取的单元号,8号单元存放着当前的月份信息,BCD码格式(4个2进制表示一个10进制)
71h是数据端口,70h是地址端口
;从cmos中读取当前的月份
;BCD码
assume cs: code
code segment
start:
moval,0
moval,8h
out70h,al
moval,0
;in71h,al
inal,71h
;movax,0x4c00h
;int21
movax,4c00h
int21h
code ends
end start