- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IA32
10.1 IA-32架构的基本执行环境
10.1.1 寄存器的扩展
在16位处理器内,有8个通用寄存器AX、BX、CX、DX、SI、DI、BP和SP,其中,前4个还可以拆分成两个独立的8位寄存器来用,即AH、AL、BH、BL、CH、CL、DH和DL。
为了在汇编语言程序中使用经过扩展(Extend)的寄存器,需要给它们命名,它们的名字
分别是EAX、EBX、ECX、EDX、ESI、EDI、ESP和EBP。可以在程序中使用这些寄存器,
即使是在实模式下:
mov eax,0xf0000005
mov ecx,eax
add edx,ecx
但是,就像以上指令所示的那样,指令的源操作数和目的操作数必须具有相同的长度,个别特
殊用途的指令除外。因此,像这样的搭配是不允许的,在程序编译时,编译器会报告错误:
mov eax,cx ;错误的汇编语言指令
如果目的操作数是32位寄存器,源操作数是立即数,那么,立即数被视为32位的:
mov eax,0xf5 ;EAX←0x000000f5
32位通用寄存器的高16位是不可独立使用的,但低16位保持同16位处理器的兼容性。因此,
在任何时候它们都可以照往常一样使用:
mov ah,0x02
mov al,0x03
add ax,si
可以在32位处理器上运行16位处理器上的软件。但是,它并不是16位处理器的简单增强。
事实上,32位处理器有自己的32位工作模式,在本书中,32位模式特指32位保护模式。在这种
模式下,可以完全、充分地发挥处理器的性能。同时,在这种模式下,处理器可以使用它全部的32
根地址线,能够访问4GB内存。
10.1.2 基本的工作模式
8086具有16位的段寄存器、指令指针寄存器和通用寄存器(CS、SS、DS、ES、IP、AX、
BX、CX、DX、SI、DI、BP、SP),因此,我们称它为16位的处理器。尽管它可以访问1MB
的内存,但是只能分段进行,而且由于只能使用16位的段内偏移量,故段的长度最大只能是
64KB。8086只有一种工作模式,即实模式。当然,这个名称是后来才提出来的。
10.1.3 线性地址
为IA-32处理器编程,访问内存时,需要在程序中给出段地址和偏移量,因为分段是IA-32
架构的基本特征之一。传统上,段地址和偏移地址称为逻辑地址,偏移地址叫做有效地址
(Effective Address,EA),在指令中给出有效地址的方式叫做寻址方式(Addressing Mode)。
10.2 现代处理器的结构和特点
10.2.1 流水线
处理器的每一次更新换代,都会增加若干新特性,这是很自然的。同时我们也会发现,老
软件在新的处理器上跑得更快。这里面的原因很简单,处理器的设计者总是在想尽办法加快指
令的执行。
10.2.2 高速缓存
影响处理器速度的另一个因素是存储器。从处理器内部向外看,它们分别是寄存器、内存和硬
盘。当然,现在有的计算机已经用上了固态磁盘。
10.2.3 乱序执行
为了实现流水线技术,需要将指令拆分成更小的可独立执行部分,即拆分成微操作(Micro-Operations),简写为μops。
10.2.5 分支目标预测
流水线并不是百分之百完美的解决方案。实际上,有很多潜在的因素会使得流水线不能达到最
佳的效率。一个典型的情况是,如果遇到一条转移指令,则后面那些已经进入流水线的指令就都无
效了。换句话说,我们必须清空(Flush)流水线,从要转移到的目标位置处重新取指令放入流水线。
10.3.1 32位处理器的寻址方式
在16位处理器上,指令中的操作数可以是8位或者16位的寄存器、指向8位或者16位实际
操作数的16位内存地址,以及8位或16位的立即数。
第十一章 进入保护模式
NASM编译
情景描述
使用NASM编译一段程序,并可以在裸机上运行。
实现功能
在开机后显示Hello, OS world!
流程
初始化寄存器
调用BIOS int 10h,显示字符串
进入死循环
代码及注释
%define _BOOT_DEBUG_
%ifdef _BOOT_DEBUG_
org 0100h
%else
org 07c00h
%endif
;告诉编译器加载到0100处生成,这样方便生成com文件。
;或者告诉编译器加载到7c00处生成,这样方便
mov ax,cs ;将当前段地址放入ax,可以不要
mov ds,ax ;将当前段地址放入数据寄存器,可以不要
mov es,ax ;将当前段地址放入extra寄存器,可以不要
call DispStr ;调
您可能关注的文档
- 10.江南古民居(优秀).ppt
- 什么是地理信息系统讲述.ppt
- 什么是微型课讲述.ppt
- 什么是文案策划讲述.ppt
- 108张珍藏精美的PPT背景图片 超值.ppt
- 什么是结构洞讲述.ppt
- 10招预防妇科炎症.pptx
- 10月6日更新2016广西公需科目《专业技术人员创新与创业建设能力》400题.doc
- 什么是档案,如何管理PPT讲述.ppt
- 什么是心理健康讲述.ppt
- 七章货物的保险.pptx
- 三章国际间接投资.pptx
- 人性假设理论.pptx
- 外研高一英语必修三ModuleIntroduction汇总市公开课获奖课件省名师示范课获奖课件.pptx
- 月相成因优质获奖课件.pptx
- 小学二年级语文课件《狐假虎威》省名师优质课赛课获奖课件市赛课一等奖课件.pptx
- 养羊业概况专题知识讲座.pptx
- 微生物的实验室培养市公开课获奖课件省名师示范课获奖课件.pptx
- 人教版六年级下册式与方程整理与复习市公开课获奖课件省名师示范课获奖课件.pptx
- 必威体育精装版高中精品语文教学:第二单元-第7课-诗三首:涉江采芙蓉、-短歌行、归园田居市公开课获奖课件省名师.pptx
文档评论(0)