自主学习之路

7-4 汇编学习笔记(3)

2019-07-05  本文已影响5人  Edingburgh

2)准备加载用户程序

我们将主引导扇区程序定义成一个段

SECTION mbr align = 16 vstart = 0x7c00

这一部分不是很清楚,等过一段时间再看看

3) 外围设备及其接口

加载器的下一个工作是从硬盘读取用户程序,即访问其他硬件。

所有和计算机相连的设备分两种,输入设备和输出设备。

输入设备:

每个设备的大概工作方式:

需要与处理器沟通的设备都需要一个I/O接口。
I/O接口可以是一个电路板,也可以是一块小芯片。其本质是一个典型的变换器或说是一个翻译器。

可能会遇到两个麻烦的问题:

1,问题采用总线技术。说有外围设备包括处理器都连接到这排电线。 称为 Bus。

2.问题是使用输入输出控制设备集中器芯片 ICH。

ICH内集成了一些常规的外围设备接口,如USB,PATA,SATA 老式总线接口(IPC),时钟等。 另外还提供对PCI或者PCI Experss 总线的支持,该总线向外延伸,连接着主板的若干扩展槽,即插槽。

除局部总线和PCI Express总线,USB金额口就可能有很多同类型设备,故涉及线路复用和仲裁问题,他们也有自己的总线体系,称为通信总线或设备总线。

4) I/O端口和端口访问

一句话,处理器通过端口来和外围设备打交道,本质上,端口就是一些寄存器,处理器内部的寄存器。不同在于,这些叫端口的寄存器位于I/O接口电路中。

每个I/O接口都有还几个端口,分别有不同的目的。
例如连接硬盘的PATA/SATA接口就有好几个端口,分别为:

每个端口都有自己的数据宽度。早期的系统端口可以是 8位的 16位的,现在会是32位的。到底是8位还是16位,这是设备和I/O接口制造者的自由。

端口再不同的计算机系统有不同的实现方式。在一些计算机系统中,端口号是映射到内存地址空间的。蔽日 0x00000
0xE0000是真实的物理内存地址,而0xE00010xFFFFF是从很多I/O接口哪里映射过来的。当访问这部分地址,实际是访问I/O接口。

而另一些是独立编址的,不和内存发生关系。这里只讨论独立编址。

端口的访问

不能使用mov类似的指令,取而代之的是in和out
in指令是从端口读:

in al,dx

in ax,dx

即,in指令的目的操作数必须是 寄存器AL或AX,当访问8位端口,使用寄存器AL;16位,使用AX。in指令的源操作数应当是寄存去DX。

out指令即通过端口向外围设备发送数
其目的caozs可以是8位立即数或寄存器DX,源操作数必须是寄存器AL或AX。

out 0x37,al ;写0x37端口(这是一个8位端口)
out 0xf5,ax ;写0xf5
端口(16位端口)
out dx,al
out dx,ax

in和out都不影响任何标志位

上一篇 下一篇

猜你喜欢

热点阅读