x86学习小结

加载程序(器)的工作流程

1 初始化和决定加载位置

加载器要加载一个用户程序大致要做两件事情。第一件事是看内存中的什么地方是空闲的,加载器将用户程序加载到这个空闲的内存中;第二件事是用户程序位于硬盘中的什么位置,它的起始扇区号是多少。

nasm汇编知识
声明一个常数:
app_lab_start equ 100
常数是用equ声明的,它的意思是“等于”。用标号app_lab_start来代表数值100,之后要用到100的地方就可以使用app_lab_start。

加载用户程序需要确定一个内存物理地址。在书的配套程序中是这样写的:

phy_base dd 0x10000

这个内存物理地址不是必须是0x10000,可以使任意空闲的内存空间。但要求最低4位必须是0,换句话说,加载的起始地址是16字节对齐的,这样才能形成一个有效的段地址。

根据上面的语句我们就决定了用户程序的加载位置。


2 准备加载用户程序

和之前看的简单的主引导扇区程序不同,这里将主引导扇区程序定义成一个段。例:

SECTION mbr align=16 vstart=0x7c00

nasm汇编知识
NASM编译器定义一个段:

SECTION 段名称
或者
SECMENT 段名称

每个段要有自己的段名称,它的作用是引用一个段,可以使任意名字,但不要重复或容易混淆。


段声明语句,例:

SECTION code align=16 vstart=0

align=16,表示16字节对齐。
vstart=0,当引用段内的某个标号时,该标号的汇编地址是从它所处段的起始位置开始计算的,这一点十分重要。如果没有这条语句,标号的汇编地址则是从程序开头处开始计算的。

3 外围设备及其接口

加载器确定加载位置之后,就要从硬盘中读取用户程序。处理器要访问的不止是硬盘,还有各个硬件。
所有和计算机主机连接的设备,都围绕在主机周围,争着跟计算机说话,叫做外围设配。一般来说,这些设备分为两种,一种是输入设备,一种是输出设备。

每个设备都有自己的工作方式,不用的设备连接数量、传送的信号都不一样,这然处理器该如何是好?

这时就需要一个信号转换器和变速齿轮,这就是I/O接口。比如麦克风和扬声器余姚一个I/O接口,即声卡;显示器需要显卡;USB需要USB接口。

现在又出现了问题:
①有这么多的接口,不可能多有都和处理器连接,或者还有为发现的接口怎么办,我们怎么预留出接口?
②每个接口都要跟处理对话,处理器怎样避免冲突?

对于第一个问题,采用总线技术。
对于第二个问题,使用输入输出控制设备集中器(I/O Controller Hub,ICH)芯片。该芯片的作用是连接不同的总线,并协调各个I/O接口对处理器的访问。子个人计算机上,这块芯片就是所谓的南桥。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值