新闻资讯
看你所看,想你所想

段寄存器

段寄存李首与装土林福器是因为对内存的分段来自管理而设置的。计算机需要对内存分段希从呢流助万全,以分配给不同的程序使用(类似于硬盘分页)。在描述内存分段时,需要有如下段的信息:1.段的大小;2.段的起始地址;3.段的管理属性(禁止写入/禁止执行/系统专用等)360百科。需要用8个字节(64位)存储这些信息,但段寄存器只有16位,因此段寄存器中只能存储段号(segment selector,也译作"段选择符"),再由段号映射到存在内存中的GDT(global (segment) descriptor table,全局段号记录表),读取段的信息。

16位CPU有四个16位段寄存器,所以,其程序可同时访问四个不同含义的段。

8086CP蒸多缩火面曾丰沿U有20根地址线,最大可寻址内存空间为1MB。而808护成经站识百汉6的寄存器只有16位,指令指针(IP)和变址寄存器(SI、DI)也是16位的。用16位的地址寻址1MB空间是不可能的。所以就要五事度接优称把内存分段,也就是把1MB空间分为2^4,即16个段,每段不超过64KB(2^16,16位数据线就可以寻址)。在8086中设置4个16位的段寄存器,用于管理4种段:C密形行太S是代码段,DS是数据段,SS是堆栈段,ES是附加段。把内存分段后,每一个段就有一个段基址,段寄存器保存的就是这个段基址的高16位,这个16位的地址左移四位(后面加上4个0)就可构成20位的段基址。

  • 中文名 段寄存器
  • 外文名 Segment Register
  • 个    数 16位CPU有四个16位段寄存器
  • 隶    属 寄存器
  • 领    域 汇编语言

产生起

  段寄存器的产生源于Intel 8086 CPU体再斗冲触系结构中数据总线与地址总线的宽度不一致。数据总线的宽度,也即是ALU(算数逻辑粒乐松毛被单元)的宽度,平星变灯常说一个CPU是"来自16位"或者"32位"指的就是希院医宁损这个。8086CPU的数据总线是16位。

  地址总线的宽度不一定要与ALU的宽度相同。因360百科为ALU的宽度是固定的,它受限于当时的工艺水平,当时只能制造出16位的ALU;但地址总线不一样,它可以设计得更宽。地址总线的宽度如果与ALU相同当然是不错的办法,这样C求害汽切斗越苗仍全确PU的结构比较均衡,寻址可以在单个指令周期内完成,效率最高物介机解院妒宣政刻约稳;而且从软件的解决来看,一个变量地址的长度可以用整型或者长整型来表示会比较方便。但是,地址总线的宽度还要受制于需求,因为地址总线的宽度决定了系统可寻址的范季都乙久往夫相吧围,即可以支持多少内存。如果地址总线太窄的话,可寻址范围会很小。如果地址总线设计为16位的话,可寻址空间是2^16=64KB,这在当时被认为是不够的;I害吧叶苗肥ntel最终决定要让8086的地址空间为1M,也就是20位地址前我占总线。地址总线宽度大于数据总线会带来一些麻烦,关每ALU无法在单个指令周期里况不老慢植阶完成对地址数据的运算。有一些容易想到的可行的办法,比如定树香航义一个新的寄存器专门用于存放地址的高4位,但这样增加了计算的复杂性,程序员要增加翻粒之叫抓标象任秋成倍的汇编代码来操作地址数据而且无法保持兼容性。

  Intel想到了一个折中的办法:把内存分段,并设计了4个段寄存器,CS,DS,ES和SS,分别用于指令、数据、其它和堆栈。把内存分为很多段,每一段有一个段基址,当然段基址也是一个20位的内存地址。不过段寄存器仍然是16位的,它的内容代表了段基址的高16位,这个16位的地址后面再加上4个0就构成20位的段基址。而原来的16位地址只是段内的偏移使爱量。这样,一个完整的物理内存地址就由两部分组成,高16位的段基址和低16位的段内偏移量,当然它们有12位是重叠的,它们两部分相加在一起,才构成完整的物理地址。

含义

  8086CPU有20根地址线,最大可寻址内存空间为1MB。而8086的寄存器只有16位,指令指针(IP)和变址限液括京联序种素向终温寄存器(SI、DI)也是16位的。用16位的地址寻址1MB空间是不可能的。所以就要把内存分段,也就是把1MB空间分为2^4,即16个段,每段不超过64KB(2^16,16位数据线就可以寻址)。在8086中设置4个16位的段寄存器,用于管黄范双迅春农货块脱你理4种段:CS是代码段,DS是数据段,SS是工配坏堆栈段,ES是附加段。把内存分段后,每一个段就有一个段基址至连李卫杀货李必手,段寄存器保存的就是这个段基址的高16位,这个16位的地址左移四位(后面加上4个0)就可构成20位的段基址。

  段寄存器CS指向存放程序的内存段,IP是用来存放下条待执行的指令在该段的偏移量,把它们合在一起可在该内存段内取到下次要执行的指令。

  段寄存器SS指向用于堆栈的内存段,SP是用来指向该堆栈的栈顶,把它们合在一起可访问栈顶单元。另外,当偏移量用到了指针寄存器BP,则其缺省的段寄存器也是SS,并且用BP可访问整个堆栈,不仅仅是只访问栈顶。

  段寄存器DS指向数据段,ES指向附加段,在存取操作数时,二者之一和一个偏移量合并就可得到存储单元的物理地址。该偏移量可以是具体数值、符号地址和指针寄存器的值等之一,具体情况将由指令的寻址方式来决定。

  通常,缺省的数据段寄存器是DS,只有一个例外,即:在进行串操作时,其目的地址的段寄存器规定为ES。当然,在一般指令中,我们还可以通过改变前缀中的"段取代"字段来改变操作数的段寄存器。

  "可选用的段寄存器"即是可以用强置说明这些段寄存器的值来作为其操作数地址的段地址。

​简介

  曲同动哥技寄存器(Register),是中央处理器内的其中组成部份。寄存器是有限存贮容量的高速存贮部件,脱孙给笑值板资执思它们可用来暂存指令、数据和地址。在中央处理器的控制来自部件中,包含的寄存器有指令寄存器(IR)和程序计数器。在中央处理器的算术及别初组得项色交倒逻辑部件中,包含的寄存器有累加器。

  在电脑架构里,处理器中的暂存器是少量且速度快的电脑存储器,借由提供快速共同地访问数值来加速电脑程序的运行:典型地说就是在已知时间点所作的之计算中间的数值。

  暂存器是存储器层次结构中的最顶端,也是系统操作数据的360百科最快速途径。暂存器通常都是以他们可以保存的比特数量来估量,举例来说,一个8位暂存器或32位暂存器。暂存器现在都以暂存器数组的方式来实现,但是他们也可能使用单独的正反器、高速的核准一真定罗抗罪司心存储器、薄膜存储器以粉预何类模船演及在数种机器上的其他方式来实现出来。

  这个名词通常都用来意指由一个指令之输出或输入可连有门了适术食举东以直接索引到的暂存器组群。更适当的是称他们为"架构暂存器"。例如,x86指令集定义八个32位暂存器的集合,但一个实现x86指令集的CPU可以包含比八个更多的暂存器。

组成

稳温官均  段寄存器:在8086系统中,访问存储器用雷兴的地址码由段地址和段内偏移地址两部分组成。段寄存器用来存放各分段的逻辑基值,并指示当前正在使用的4个逻辑段,包括代码段寄存器CS、夫构具静方汽氢假刘者附堆栈段寄存器SS、数据段寄存器DS和附加段数据寄存器源映回督南ES。

分类

代码段寄存器CS(Code Se信电阳期燃矿就搞加石活gment)

  存放当前正在运行的程序代码所在段的段双操教矛地举计基址,表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的段双偏移量则由IP提供县弦画识速技优

数据段寄存器DS(Data Segment)

  指出当前程序使用的数据所存放留业众家灯段的最低地址,即存放管才往数据段的段基址。

堆栈段寄存器SS(Stack Segment)

  指出当前堆栈的底部地址,即存放堆栈段的段基址。

附加段寄存器ES(E错策旧xtra Segment)

  指出当前程序使用附加数据段的段基址,该段是串操作指令中目的串所在的段。

转载请注明出处累积网 » 段寄存器

相关推荐

    声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:fendou3451@163.com