第8章 硬盘和显卡的访问与控制(1)
创始人
2024-06-03 19:11:38
0

第8章 硬盘和显卡的访问与控制

本章把主引导扇区改造成一个程序加载器,功能是加载用户程序,并执行该程序(将处理器的控制权交给该程序)

8.2 用户程序的结构

分段、段的汇编地址和段内汇编地址

NASM编译器使用汇编指令“SECTION”或者“SEGMENT”来定义段。段只用来分隔程序中的不同内容
Intel要求端在内存中起始物理地址起码是16字节对齐的。物理地址必须能被16整除
段内对齐也有要求,用“align=”

在这里插入图片描述

每个段的汇编地址是相对于整个程序开头(0)的。

为了方便取得该段的汇编地址,可以用section.段名称.start

段定义语句包含vstart=0子句时,标号的汇编地址要从它所在段的开头计算,而且从0开始计算。(即相对于当前段开始计算地址)

用户程序头部[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里插入图片描述

用户程序头部起码要包含以下信息:
1. 用户程序的尺寸
加载器需要根据这一信息决定读取多少个逻辑扇区
8行,program_end标号表示长度,在编译阶段,将代表的汇编地址填写在这里
在这里插入图片描述

2. 应用程序的入口点,包括段地址和偏移地址。
11、12行,依次声明并初始化偏移地址和短地址。偏移地址取自代码段code_1标号“start”,段地址用表达式section.code_1.start得到
段地址是用伪指令dd声明的,是32位地址,它仅仅是编译阶段确定的汇编地址,在用户加载到内存后,需要根据加载的实际位置重新计算(浮动)。
3. 段重定位表
程序加载到内存后,每个段的地址必须重新确定。段的重定位是加载器的工作,它需要知道每个段在用户程序内的位置。需要一张段重定位表
声明并初始化段的重定位表的项目数,段重定位表在两个标号之间
即`(header_end - code_1_segment)/4`在编辑阶段计算,面是实际的段重定位表,每个表项用dd声明并初始化为1个双字

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

初始化和决定加载位置

加载器要加载一个程序,并使之开始执行,需要决定两件事。第一,从哪个物理内存地址开始加载用户程序;第二,用户程序位于硬盘上的什么位置,它的起始逻辑扇区号是多少。

​ 8-1,6行,加载器程序的一开始声明了一个常数app_lba_start equ 100其作用类似于C语言中的#define A 100。和其他伪指令db、dw、dd不同,用equ声明的数值不占用任何汇编地址,也不在运行时占用任何内存位置。

phy_base dd 0x10000 ;用户程序被加载的物理起始地址,也可用其他位置。

在这里插入图片描述

准备加载用户程序

主引导扇区定义成一个段,vstar=0x7c00
8-1,12-14行,用于初始化栈段寄存器SS和栈指针SP。
16,17行,起始地址是双字单元,在16位处理器上,只能用两个寄存器存放。

在这里插入图片描述

外围设备及其接口

输入输出控制设备集中器(ICH)芯片,该芯片的作用是连接不同的总线,并协调各个I/O接口对处理器的访问。
在这里插入图片描述

处理器通过局部总线连接到ICH内部的处理接口电路。然后,在ICH内部,又通过总线与各个I/O接口相连。

I/O端口和端口访问

具体地说,处理器是通过端口(Port)和外围设备打交道。本质上,端口就是一些寄存器,端口的寄存器位于I/O接口电路中。

端口有的是端口号映射到内存地址空间的,有的是独立编制的,不和内存发生关系。在独立编制中,处理器的地址既连接内存,也连接每一个I/O接口。有一个特殊的引脚M/IO#。当处理器访问I/O端口,那么M/IO#引脚呈高电平,和内存相关的电路就会打开;如果访问I/O端口,那么M/IO#引脚呈低平,内存电路被禁止。

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

通过硬盘控制器端口读扇区数据

硬盘读写的基本单位是扇区,主机和硬盘之间的数据交换是成块的,硬盘是典型的块设备。

以LBA28为例来访问硬盘(28个比特来表示逻辑扇区号,可以管理128GB的硬盘)
个人计算机上的主硬盘控制器被分配了8位端口,从0x1f0到0x1f7。假设现在要从硬盘上读逻辑扇区。

  1. 设置要读取的扇区数量,这个数量写到0x1f2端口。这是个8位端口,每次智能读写255个扇区
mov dx,0x1f2
mox al,0x01
out dx,al
  1. 设置起始LBA扇区号。扇区读写是连续的,因此只需要给出第一个扇区的编号。28位扇区号要分成4段,分别写入端口0x1f3(07位),0x1f4(815位),0x1f5(16~23)和0x1f6(最后四位)。假设读写其实逻辑扇区号为0x02,可编写代码:
mov dx,0x1f3
mov al,0x02
out dx,al
inc dx
mov al,0x00
out dx,al
inc dx
out dx,al
inc dx
mov al,0xe0
out dx,al

在现行体系下,每个PATA/SATA接口允许挂接两块硬盘,分别是主盘和从盘。

请添加图片描述

0x1f6的低4位用于存放24到27位,第4位用于指示硬盘号,0表示主盘,1表示从盘。高3位是“111”,表示LBA模式

  1. 向端口0x1f7写入0x20,请求硬盘读
mov dx,0x1f7
mov al,0x20
out dx,al
  1. 等待读写操作完成。端口0x1f7既是命令端口,又是状态端口。

在这里插入图片描述

在它内部操作期间,它将0x1f7端口的第7位置1,。一旦硬盘系统准备就绪,它将此位清零,同时第3位置1,表明已经准备好,请求主机发送或者接收数据

   mov dx,0x1f7
.waits:in al,dxand al,0x88  ;10001000 表明我们想保留第7位和第3位,其他无关的清零cmp al,0x08 jnz .waits
  1. 连续取出数据。0x1f0是硬盘接口的数据端口,而且是16位得到端口。一旦硬盘控制器空闲,且准备就绪,就可以连续从这个端口写入或者读取数据。
    从硬盘读一个扇区:
	mov cx,256      ;总共要读取的字数mov dx,0x1f0
.readw:in ax,dxmov [bx],axadd bx,2loop .readw

0x1f1端口是错误寄存器,包含硬盘驱动器最后一次执行命令后的状态(错误原因)

相关内容

热门资讯

安卓系统用的华为应用,探索智能... 你知道吗?在安卓系统里,华为的应用可是个宝库呢!它们不仅功能强大,而且使用起来超级方便。今天,就让我...
安卓变ios系统魅蓝 你知道吗?最近有个朋友突然告诉我,他要把自己的安卓手机换成iOS系统,而且还是魅蓝品牌的!这可真是让...
幻书启世录安卓系统,安卓世界中... 亲爱的读者们,你是否曾在某个夜晚,被一本神奇的书所吸引,仿佛它拥有着穿越时空的力量?今天,我要带你走...
电脑安装安卓系统进不去,安卓系... 电脑安装安卓系统后竟然进不去,这可真是让人头疼的问题啊!你是不是也遇到了这种情况,心里直呼“怎么办怎...
用键盘切换控制安卓系统,畅享安... 你有没有想过,用键盘来控制你的安卓手机?是的,你没听错,就是那个我们每天敲敲打打的小玩意儿——键盘。...
小米安卓镜像系统在哪,小米安卓... 你有没有想过,你的小米手机里有一个隐藏的宝藏——安卓镜像系统?没错,就是那个可以让你的手机瞬间变身成...
安卓手机下载排班系统,高效排班... 你有没有想过,每天忙碌的工作中,有没有什么好帮手能帮你轻松管理时间呢?今天,就让我来给你介绍一个超级...
桌面组件如何弄安卓系统,桌面组... 亲爱的桌面爱好者们,你是否曾梦想过将安卓系统搬到你的电脑桌面上?想象那些流畅的动画、丰富的应用,还有...
安卓13系统介绍视频,新功能与... 亲爱的读者们,你是否对安卓13系统充满好奇?想要一探究竟,却又苦于没有足够的时间去研究?别担心,今天...
车机安卓7.1系统,功能升级与... 你有没有发现,现在的车机系统越来越智能了?尤其是那些搭载了安卓7.1系统的车机,简直就像是个贴心的智...
安卓系统下如何读pdf,And... 你有没有遇到过这种情况:手机里存了一大堆PDF文件,可是怎么也找不到一个能顺畅阅读的工具?别急,今天...
安卓系统全国通用的吗,畅享智能... 你有没有想过,为什么你的手机里装的是安卓系统呢?安卓系统,这个名字听起来是不是有点神秘?今天,就让我...
假苹果手机8安卓系统,颠覆传统... 你有没有想过,如果苹果手机突然变成了安卓系统,会是怎样的景象呢?想象那熟悉的苹果外观,却运行着安卓的...
安卓12.0系统vivo有吗,... 你有没有听说最近安卓系统又升级啦?没错,就是那个让手机焕然一新的安卓12.0系统!那么,咱们国内的手...
核心芯片和安卓系统,探索核心芯... 你知道吗?在科技的世界里,有一对“黄金搭档”正悄悄改变着我们的生活。他们就是——核心芯片和安卓系统。...
如何调安卓系统屏幕颜色,安卓系... 亲爱的手机控们,你是否曾觉得安卓系统的屏幕颜色不够个性,或者是因为长时间盯着屏幕而感到眼睛疲劳?别担...
旧台式电脑安装安卓系统,轻松安... 你那台旧台式电脑是不是已经服役多年,性能逐渐力不从心,却又不忍心让它退役呢?别急,今天就来教你怎么给...
美国要求关闭安卓系统,科技霸权... 美国要求关闭安卓系统:一场技术革新还是政治博弈?在数字化时代,智能手机已经成为我们生活中不可或缺的一...
安卓系统日记本 你有没有发现,手机里的安卓系统日记本,简直就是记录生活点滴的宝藏库呢?想象每天忙碌的生活中,有没有那...
安卓手机广告最少的系统,探索安... 你有没有发现,用安卓手机的时候,广告总是无处不在,让人烦得要命?不过别急,今天我要给你揭秘一个秘密—...