- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
总结IBMPC 80x86机常用寻址方式
总结 80x86机常用寻址方式
上学期学了汇编和计算机组成原理,虽然学的时候很痛苦,但最后发现还是有些心得,否则也无法在最后1、2天的复习里抓住关键,考到不错的成绩了。感觉这些基础的东西虽然看似很遥远很古老很没用,但实际上还是很能说明问题的,对理解很多东西也很有帮助,再加上这次要学计算机接口与应用,需要以上两门课的知识综合,于是打算好好复习一下这些东西~~经过一个寒假,好多都记不清了,呵呵!
一、先归纳一下80x86机器的常用寄存器
32 高8位 16位名称 低8位 说明 EAX AH AX AL 累加器 EBX BH BX BL 基址变址 ECX CH CX CL 计数 EDX DH DX DL 数据 ESP SP 堆栈指针 EBP BP 基址指针 EDI DI 目的变址 ESI SI 源变址 EIP IP 指令指针 EFLAGS FLAGS 标志 数据寄存器:AX,BX,CX,DX
变址寄存器:SP,BP,DI,SI
专用寄存器:IP,SP,FLAGS
段寄存器:CS,DS,ES,SS CS 代码段 DS 数据段 ES 附加段 SS 堆栈段 桔红色:段寄存器(16位) 深蓝色:通用寄存器(16位)
浅灰色:专用寄存器(16/32位) 红色/深红色:32位部分
二、通用寄存器
AX,BX,CX,DX是数据寄存器,除了通用,还有一些专门的意义:
AX常用于加、乘、除等运算,另外所有IO指令也用此寄存器传送信息;
BX在计算存储器地址时,也常用作基址寄存器
CX一个很重要的用途是作为计数器,如在移位、循环和串处理中用作默认(自动)计数器,控制多次操作的执行次数
至于DX,在作字长运算时常把DX和AX合在一起表示一个双字(32位)数,DX为高16位。此外,某些IO操作中,DX可存放IO端口地址
SP与BP常与堆栈段寄存器SS联用确定堆栈段中某单元的地址:
SP可用于指示段顶的偏移地址(注:画图时,一般把栈顶看作向下增加的,入栈时SP减小,出栈时增加)
BP可作为堆栈区的一个基地址
SI与DI一般与DS联用,用以确定数据段中某一单元的地址
三、专用寄存器
IP为指令指针寄存器,用来存放代码段中的当前指令偏移地址。运行时它始终指向下一条指令的首地址,它可与CS联用确定代码段中当前下一条指令的地址
SP用来栈顶偏移地址
FLAGS:标志寄存器,其中重要的标志位意义如下:
条件码:OF(溢出),SF(符号),ZF(置零),CF(进位),AF(辅助进位),PF(奇偶)。其中,PF的定义为:当结果中1的个数为偶数是置一;
方向标志:DF=1时,每次操作后使得SI和DI减小,这样就能让串处理从高地址往低地址方向进行;若DF=0则反之;
系统标志位:可用于I/O、屏蔽中断、程序调试、任务切换和系统工作方式的控制。一般程序不用关心这些标志。主要包括TF(陷阱标志)、IF(中断标志)、IOPL(IO特权级)
三、段寄存器
每个段寄存器可确定一个段的起始地址,而这些段各有用图:
CS规定代码段首地址;代码段中存放当前运行的程序(指令代码)
DS规定数据段首地址;数据段中存放当前程序所用的数据,另外,如果用了串处理指令,则其源操作数也放在此段中
ES规定附加段首地址;附加段是一个辅助的数据区,也是串处理指令的目的操作数存放区
SS规定堆栈段首地址;堆栈段定义了堆栈所在区域,是专门为堆栈数据结构开辟的一个特殊存储区
值得注意的是,在寻址时,段地址都需要进行16-20位的扩展(80x86的实模式寻址)。详见下面关于存储器和寻址的介绍。
四、存储器与内存地址
按现在的定义,存储器就是内存,所以这里就是说一下80x86的内存分配及地址管理方式(很原始,呵呵,不过现在实际应用的先进方法都是以此为基础的)
8086、80286都是16位机器,386及其后续机型都是32位。而8086的地址总线为20位(直观上就是有20条点线作为地址总线),为什么呢?主要是为了扩展可用内存最大值。如果是16位地址线,那就一一对应了,方便是方便,不过却只能表示2^16=65536(即64KB)的内存,就算按当时的标准,也太小了!于是简单有效的该进方案就是增加了地址线位数,而对实际16位地址进行变换(再加上偏移地址)来对应到20位物理地址。可以看到,后续机型也是按类似的思路做的,比如286机型增加到了24位地址总线,386、486及Pentium机为32位,P2和P3为36位
存储器中以字节(8位)为单位存储信息。因此一个字(16位)需要占用2个存储单元,双子(32位)需要4个单元,具体表现形式在下面有说明
机器字长为16位时,可表示0000H~FFFFH共65536
原创力文档


文档评论(0)