32位汇编 段寄存器 cs ds ss es的用处是什么?

作者&投稿:裘儿 (若有异议请与网页底部的电邮联系)
汇编语言中32位CPU多出的两个FS、GS段寄存器,全称是什么啊??~

FS、GS 是从 80386 开始增加的,没有全称,取名就是按字母序排在 CS、DS、ES 之后的。
而 CS、DS、ES、SS 是有全称的:
CS (Code Segment) 代码段
DS (Data Segment) 数据段
ES (Extra Segment) 附加段
SS (Stack Segment) 栈段

cs: 代码段寄存器,是 code segment 的缩写;
ds:数据段寄存器,是 data segment 的缩写;
ss:堆栈段寄存器, 是 stack segment 的缩写;
es:附加段寄存器,是 extra segment 的缩写;
想知道他们怎么用,就必须了解他们的用途。
他们和其他寄存器如何合作,寄存器寻址和存储器寻址如何完成?单说这几个段寄存器,不涉及其他寄存器,是不能真正了解掌握他们的。
寄存器是中央处理器内的组成部份。
寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。
寄存器是内存阶层中的最顶端,也是系统获得操作资料的最快速途径。寄存器通常都是以他们可以保存的位元数量来估量,举例来说,一个 “8 位元寄存器”或 “32 位元寄存器”。寄存器现在都以寄存器档案的方式来实作,但是他们也可能使用单独的正反器、高速的核心内存、薄膜内存以及在数种机器上的其他方式来实作出来。
寄存器通常都用来意指由一个指令之输出或输入可以直接索引到的暂存器群组。更适当的是称他们为 “架构寄存器”。
例如,x86 指令及定义八个 32 位元寄存器的集合,但一个实作 x86 指令集的 CPU 可以包含比八个更多的寄存器。
寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。

实模式的段是为了读取更多的内存,保护模式的段是主要为了保护数据,防止恶意篡改,这几个寄存器都指向GDT或者LDT,32位用这几个寄存器是为了保护程序、系统还有数据,特权级什么的需要基于他们,他们把各个程序严格的分开,不允许低权级访问高权级,有效保护了系统内核,一定程度上防止了数据溢出(有不对的地方希望大佬指出)

基本上是这样的,但要详细讨论这个问题。会是件较复炸的问题。
一般,系统初始化的早期阶段,仍然是运行在是模式下的,所以... ...
单单以开启了分页管理的保护模式环境为例,这些段寄存器用作选择子!

还有si,di,bp,sp。三十二位的系统寄存器都是32位,就是这样


东区19539141259: 汇编语言中32位CPU多出的两个FS、GS段寄存器,全称是什么啊?? -
钭固当归: FS、GS 是从 80386 开始增加的,没有全称,取名就是按字母序排在 CS、DS、ES 之后的. 而 CS、DS、ES、SS 是有全称的: CS (Code Segment) 代码段 DS (Data Segment) 数据段 ES (Extra Segment) 附加段 SS (Stack Segment) 栈段

东区19539141259: 汇编语言的CS是什么意思 -
钭固当归: 汇编语言cs:是代码段寄存器,ds是数据段寄存器.段代码CS:存放当前正在运行的程序代码所在段的段基值,表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移值则由IP提供.cs:[ip]一起决定了下一条指令的地址,在调用的时候,CALL指令将保存返回地址,调用结束时,RET指令将恢复返回地址. 如果是段内跳转,则只需要修改IP,如果是远跳转,则需CS和IP同时修改和恢复. CS 代码段,或代码选择器.同IP寄存器(稍后介绍)一同指向当前正在执行的那个地址.处理器执行时从这个寄存器指向的段(实模式)或内存(保护模式)中获取指令.除了跳转或其他分支指令之外,无法修改这个寄存器的内容.

东区19539141259: 请问一下汇编语言中cs和ds有啥区别?貌似前者是用来放指令的段地址,后者是数据的段地址? -
钭固当归: cs 代码段地址,联合ip作为cpu指向当前正在执行的那条指令所使用,你一般不能随意修改它 ss 堆栈段地址 联合sp定义一个堆栈,一旦你确定了堆栈地址,ss也不能随便改变了 ds 数据段地址 定义一个数据段 如果你是新手的话,有需要的时候,你可以用ds和es,随着更加深入的学习你会了解具体怎么用的.

东区19539141259: 什么是段寄存器 -
钭固当归: 在汇编语言源程序中可以定义多个段,每个段都要与一个段寄存器建立一种对应关系.建立这种对应关系的说明语句格式如下: ASSUME 段寄存器名:段名[, 段寄存器名:段名, ……] 其中:段寄存器是CS、DS、ES、SS、FS和GS,段名...

东区19539141259: DS寄存器与CS寄存器有什么区别? -
钭固当归: cs是值cpu执行的当前指令的段地址,ds是数据开始的段地址.通俗来讲,CS是告诉CPU,去哪个位置找内容当成指令去执行,DS是告诉CPU,去哪个位置找内容当成数据被使用CPU要执行CS中的指令 指令用到的数据可能就存放在DS中.你可以把数据放到CS中 但是CPU并不把它当成数据来使用,你也可以把指令放到DS中,但是CPU根本不去DS里读指令.

东区19539141259: 在80x86实模式下,哪些寄存器可以用来指示存储器地址? -
钭固当归: 除段寄存器cs,ds,es,ss外,还有bx,si,di,bp可指示存储器地址,其对应的32位寄存器如ebx等也行 可在debug下尝试,输入mov ax,[bx]是对的,将bx换成si,di,bp都对,换成其他的报错

东区19539141259: win32汇编中段寄存器还有什么用处?
钭固当归: 32位保护模式下,段寄存器就是个选择器,选择一个描述符

东区19539141259: 汇编语言里的SEG DEST REG SRC什么意思,详细解释下 -
钭固当归: SEG表示段寄存器通用符号.REG表示通用寄存器组.SRC表示源操作数.DST表示目的操作数. 16位寄存器组包括:4个数据寄存器(AX、BX、CX和DX)、2个变址和指针寄存器(SI和DI) 2个指针寄存器(SP和BP)、4个段寄存器(...

东区19539141259: 既然寄存器英文名叫Register,那CS,DS,ES,SS为什么都叫“S”而不叫“R”呢? -
钭固当归: cs、ds、es、ss都是段寄存器 s=segment 之所以不用r,是因为这些特殊寄存器都不是作为一般的通用寄存器使用的,比如你不能把一次计算的临时结果像存ax,dx等等一样存在这些特殊的寄存器里.16位dos汇编中这些segment代表各自段的起始地址,在程序开始时手工指定,通常用来加上偏移地址进行寻址;而32位的汇编里这些段寄存器里保存的是段描述符所在的地址,由系统自动决定它们的值,不再能被手动写入,所以已经不具备寄存器的基本特点了.

东区19539141259: 新人求解惑!关于cs与ds的问题!先谢谢了! -
钭固当归: 那天匆忙答复,只是希望大家多来讨论讨论一下. 楼主的意思讨论 cs*16+IP ,然后又有ds*16加偏移地址.一般来说取指令CS只能和IP.在一般情况下,如果有效地址在SI,DI和BX中,则以DS段寄存器之内容为段值. 涉及栈操作SS+偏移SP,...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网