- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
从实模式到保护模式第13到16章笔记汇编
8.2 用户程序的结构
8.2.1 分段、段的汇编地址和段内汇编地址
处理器的工作模式是将内存分成逻辑上的段,指令的获取和数据的访问一律按“段地址:偏移地址”的方式进行。
NASM编译器使用汇编指令“SECTION”或者“SEGMENT”来定义段。它的一般格式是
SECTION段名称
SEGMENT段名称
align子句
理论上,如果不考虑段的对齐方式,那么段data1的汇编地址是0,段data2的汇编地址是1,段data3的汇编地址是2。
段的汇编地址其实就是段内第一个元素(数据、指令)的汇编地址。
在段data1中声明和初始化的0x55位于汇编地址0。
编译器将0为段data2的汇编地址,并在两个段之间填充15字节的0x00
段data3的汇编地址就是0十进制的32)。段data3只有1字节
8.2.2 用户程序头部
用户程序实际上定义了7个段,分别是第7行定义的段header、第27行定义的段code_1、第163行定义的段code_2、第173行定义的段data_1、第194行定义的段data_2、第201行定义的段stack和第208行定义的段trail。
第7行:
SECTION header vstart=0
用户程序头部起码要包含以下信息。
① 用户程序的尺寸,即以字节为单位的大小。
② 应用程序的入口点,包括段地址和偏移地址。
第11、12行,依次声明并初始化了入口点的偏移地址和段地址。
代码段code_1是在代码清单8-2的第27行定义的:
SECTION code_1 align=16 vstart=0
③ 段重定位表。
8.3 加载程序(器)的工作流程
8.3.1 初始化和决定加载位置
第6行,加载器程序的一开始声明了一个常数(const):
app_lba_start equ 100
常数是用伪指令equ声明的,它的意思是“等于”。本语句的意思是,用标号app_lba_start来代表数值100,
app_lba_start equ 500
用equ声明的数值不占用任何汇编地址,也不在运行时占用任何内存位置。它仅仅代表一个数值,就这么简单。
加载用户程序需要确定一个内存物理地址,这是在代码清单8-1第151行用伪指令dd声的,并初始化为0x10000的。和前面一样,是用32位的单元来容纳一个20位的地址:
phy_base dd 0x10000
8.3.2 准备加载用户程序
第9行:
SECTION mbr align=16 vstart=0x7c00
第12~14行,用于初始化堆栈段寄存器SS和堆栈指针SP。之后,堆栈的段地址是0x0000,段的长度是64KB,堆栈指针将在段内0xFFFF和0x0000之间变化。
第16、17行,用于取得一个地址,用户程序将要从这个地址处开始加载。
这两条指令中都使用了段超越前缀“cs:”。这是允许的,意味着在访问内存单元时,使用CS
的内容作为段基址。之所以没有使用DS和ES,是因为它们另有安排。
第18~21行,用于将该物理地址变成16位的段地址,并传送到DS和
ES寄存器。
8.3.3 外围设备及其接口
外围设备分成两种,一种是输入设备;另一种是输出设备
输入设备和输出设备统称输入输出(Input/Output,I/O)设备。
① 不可能将所有的I/O接口直接和处理器相连,设备那么多,还有些设备现在没有发明出来,将来一定会有。你怎么办?
总线技术。
② 每个设备的I/O接口都抢着和处理器说话,不发生冲突都难。你怎么办?
使用输入输出控制设备集中器(I/O Controller Hub,ICH)芯片
8.3.4 I/O端口和端口访问
外围设备和处理器之间的通信是通过相应的I/O接口进行的。
处理器是通过端口(Port)来和外围设备打交道的。端口就是寄存器,类似于处理器内部的寄存器。不同之处仅仅在于,这些叫做端口的寄存器位于I/O接口电路中。
端口是处理器和外围设备通过I/O接口交流的窗口,每一个I/O接口都可能拥有好几个端口,
分别用于不同的目的。比如,连接硬盘的PATA/SATA接口就有几个端口,分别是命令端口、状态端口、参数端口。
8.3.5 通过硬盘控制器端口读扇区数据
从硬盘读写数据,最经典的方式是向硬盘控制器分别发送磁头号、柱面号和扇区号,这称为CHS模式。从硬盘上读逻辑扇区过程:
第1步,设置要读取的扇区数量。
第2步,设置起始LBA扇区号。
第3步,向端口0x1f7写入0x20,请求硬盘读。
第4步,等待读写操作完成。
第5步,连续取出数据。
8.3.6 过程调用
处理器支持一种叫过程调用的指令
您可能关注的文档
最近下载
- 《电商生鲜配送发展中的问题及其对策—以盒马鲜生为例》16000字.docx VIP
- 2024高二地理期末复习选必1知识点清单 .pdf VIP
- 生鲜电商的发展问题及对策—以盒马鲜生为例.pdf VIP
- 生鲜电商的发展问题及对策——以盒马鲜生为例.docx VIP
- 田字格word模板(3)最好.doc VIP
- 2024学年九年级上学期第一次月考数学试题及参考答案 .pdf VIP
- 新零售背景下生鲜企业的发展研究——以盒马鲜生为例.docx VIP
- 连锁零售企业物流配送发展现状、问题及对策研究——以盒马鲜生为例.docx VIP
- 桥架多少钱一米?安装大概多少钱?桥架国标厚度是多少?.docx VIP
- 第八章海洋肽类教材.ppt VIP
文档评论(0)