精华内容
下载资源
问答
  • 段寄存器

    千次阅读 2021-01-15 12:46:20
    一、段寄存器有哪些 ? 段寄存器有ES、CS、SS、DS、FS、GS、LDTR、TR共8个。 通常我们用汇编读写某一个地址时,如下: Mov dword ptr ds:[0x123846],eax 这时我们把eax 的值往地址去写,写的地址是: ds.base +...

    一、段寄存器有哪些 ?

    段寄存器有ESCSSSDSFSGSLDTRTR8个。

    ES:扩展段。在串操作时(比如cmovs)目标操作数的基址是ES,源操作数是DS

    CS:代码段,配合EIP使用。

    SS: 堆栈段,凡是基址是EBPESP的,段前缀就是SS

    DS:数据段,默认的都是DS

    FSGS80386 之后定义的。

    段寄存器结构:

    段寄存器的大小是 96 位

    段寄存器结构可以抽象成以下结构

    struct Segment

    {

      WORD Selector;  //16位段选择子,可见部分.  使用OD 或者X64dbg看段寄存器只会显示16位的段选择子可见部分.当读段寄存器(如mov ax,CS)的时候,只会返回这16位。或者push seg 操作针对的都是这16位。如果目标操作数是32位(如mov eax ,CS),则将16位零扩展成32位赋给目标操作数。但是写的时候,就会涉及到96位

      WORD Attribute; //16位表示的段属性, 表示了当前段寄存器是可读的可写的还是可执行的

      DWORD Base;     //32位表示的基址,表示段从哪里开始

      DWORD limit;    //32位表示,表示的是基址的长度. base + limit 可以确定一个段的大小

    }

    在x86下.我们可以看如下寄存器表示图.

    寄存器名称

    段选择子(Select)

    段属性(Attributes)

    段基址(Base)

    段长(Limit)

    ES(附加扩展段)

    0x0023

    可读,可写

    0x00000000

    0xFFFFFFFF

    CS(代码段)

    0x001B

    可读,可写

    0x00000000

    0xFFFFFFFF

    SS(堆栈段)

    0x0023

    可读,可写

    0x00000000

    0xFFFFFFFF

    DS(数据段)

    0x0023

    可读,可写

    0x00000000

    0xFFFFFFFF

    FS(分段机制)

    0x003B

    可读,可写

    0x7FFDF000

    0xFFF

    GS

    未使用

    未使用

    未使用

    未使用

     

    二、段寄存器读写

    可以使用MOV指令对段寄存器进行读写。

    读操作时,可以读到段寄存器的段选择子部分的16位。例如 mov ax,es 指令会把es寄存器的段选择子读到ax。

    写操作时,会写入96位,其中源操作数的16位写入到段寄存器的段选择子部分,另外80位会根据段选择子从GDT表(全局描述表)中获取。因此,

    1 .mov ax,cs

    2. mov ds,ax

    实际上是把cs完整的复制给了ds。

    三、段属性探测

    CS代码段属性探测

    int Var = 0;

    int main()

    {  

        __asm   

        {      

            mov ax,cs      

            mov ds,ax       

            mov dword ptr ds:[Var],eax         ;等价于 mov dword ptr cs:[Var],eax  

        }

    }

    将CS赋值到AX中. AX赋值给DS. 此时DS就代表CS了. 如果以把eax之给 CS.则会出现错误.

    说明权限确实是不可写.

    其它代码段段属性探测

    int Var = 0; int main()

    {   

        __asm   

        {       

            mov ax,ss

            mov ds,ax       

            mov dword ptr ds:[Var],eax   

        }

    }

    段基地址探测

    通常我们用汇编读写某一个地址时,如下:
    Mov dword ptr ds:[0x123846],eax
    这时我们把eax 的值往地址去写,写的地址是:
    ds.base + 0x123456

    int main()

    {

        __asm

        {

            mov ax,fs

            mov gs,ax

            mov eax,gs:[0]

        }

    }

    段长探测

    在段地址探测中,访问有效地址等价于段.base + 偏移地址

    int main()

    {

        __asm

        {

            mov ax, fs

            mov gs, ax

            mov eax, gs: [0]  //fs.base + 0 读取

            mov eax,gs:[0x1000]//fs.base + 0x1000

            mov eax, dword ptr ds : [eax + 0xFFF] ;

           // mov eax,gs:[0x1000] //fs.base + 0x1000 读取

        

        }

    }

    展开全文
  • 32位的处理器运行在保护模式下时,除了先前的4个段寄存器,还引入了两个新的段寄存器FS/GS,这些寄存器都是16比特位宽。64位模式下的段寄存器有特殊性,后面有一节介绍。 IA-32处理器中的段寄存器(C...

    Segment Registers

    本节主要讲述Intel处理器中的段寄存器,用于支持处理器的段式存储器管理机制。16位的8086/Intel286处理器有4个段寄存器CS/DS/SS/ES。32位的处理器运行在保护模式下时,除了先前的4个段寄存器,还引入了两个新的段寄存器FS/GS,这些寄存器都是16比特位宽。64位模式下的段寄存器有特殊性,后面有一节介绍。

    IA-32处理器中的段寄存器(CS/DS/ES/SS/FS/GS)用于保存16位宽的段选择符(segment selector)。要访问存储器中的特定段,对应的段选择符必须要加载到正确的段寄存器中。

    当设计应用程序代码时,程序员通常使用汇编器的指示符和符号(directives and symbols)来创建段选择符。汇编器和其他的工具软件会根据这些指示符和符号生成真正的段选择符值。如果是设计系统程序代码,程序员则可以直接创建段选择符(以后有专题介绍)。

    段寄存器如何被使用主要取决于操作系统/管理软件采用的存储器管理模型的类型。

    当使用平坦(未分段的)存储器模型时,段寄存器加载的段选择符指向重叠的段,在线性地址空间中,每个段的起始地址都是0(参看下图)。这些重叠的段构成了程序可见的线性地址空间。通常,会定义两个重叠的段:一个是代码段,另一个是数据/栈段。CS寄存器指向代码段;其他的所有段寄存器指向数据/栈段。

     

    当使用分段存储器模型时,每个段寄存器通常会加载不同的段选择符,这样段寄存器指向线性地址空间中不同的段(参看下图)。任何时候,程序可以同时访问线性地址空间中最多6个段。如果要访问的段没有段寄存器指向,程序必须先将段对应的段选择符加载到某个段寄存器之后,才可以访问段中的数据。

    每个段寄存器都关联下列三种存储类型(即段类型)之一:代码段,数据段,栈段。例如,CS段寄存器包含代码段的段选择符,代码段保存正在执行的指令。处理器从代码段读取指令时,使用有CS寄存器中的段选择符与EIP寄存器联合构成的逻辑地址。EIP保存要执行的下一条指令在代码段中的偏移量。CS寄存器不能有应用程序显式地的加载。相反,可以通过某些指令或处理器内部操作隐式地加载。这些指令/内部操作,例如过程调用,中断处理,或者任务切换,用于改变程序的执行流,从而导致更新CS寄存器。

    DS/ES/FS/GS这四个寄存器指向四个数据段。多个数据段的存在允许高效地且安全地访问不同的数据结构类型。例如,可以创建如下的四个数据段:第一个数据段保存当前程序模块的数据结构,第二个数据段保存更高级别程序模块导出的数据,第三个数据段保存动态创建的数据结构,最后一个数据段保存另一个程序共享出来的数据。要想访问更多的数据段,应用程序必须按需将数据段对应的段选择符加载到DS/ES/FS/GS寄存器中的其中一个当中。

    SS寄存器包含栈段的段选择符,这里栈段用于存储程序/任务/当前正在执行的处理器程序的栈帧。所有的栈操作都使用SS栈段寄存器来定位栈段。与CS代码段寄存器不同,SS寄存器可以显式地加载,这样就允许应用程序建立多个栈段,并在这些段间切换。

    Segment Registers in 64-Bit Mode

    在64位模式下:处理器把CS/DS/ES/SS的段基都当作0,忽略与之关联的段描述符中的段基地址。这样就为代码/数据/栈创建了平坦的地址空间。但是FS/GS段寄存器是例外。在计算线性地址时,这两个段寄存器可能被用作额外的基址寄存器(当寻址局部数据或寻址某些操作系统数据结构时)。

    尽管分段机制被禁用了,但是段寄存器加载操作可能导致处理器执行段访问辅助。在这些辅助行为中,启用了分段机制的处理器依然会对被加载的值执行绝大多数的传统检查(即使这些检查对64位模式不起作用)。这样的检查是必要的,因为在64位模式下加载的段寄存器可能被运行在兼容模式的应用程序使用。

    在64位模式下,禁用CS/DS/ES/SS/FS/GS的段限长检查。

    展开全文
  • 段寄存器通常有CS DS SS ES,80386后引入了2个额外的段寄存器FS与GS。 大量的书籍上,都描述了段寄存器是16位的,这是一种非常不严谨的说法! 这些段寄存器除了有16位的可见部分,还有不可见的隐藏部分,称为描述符...

    段寄存器通常有CS DS SS ES,80386后引入了2个额外的段寄存器FSGS

    大量的书籍上,都描述了段寄存器是16位的,这是一种非常不严谨的说法!

    这些段寄存器除了有16位的可见部分,还有不可见的隐藏部分,称为描述符缓存“descriptor cache”隐藏寄存器“shadow register”[1]。当一个段选择符(segment selector)装入段寄存器的可见部分,处理器同时也把该段描述符的其它数据装入到段寄存器的隐藏部分,这包括段开始的基地址、段长度、访问控制信息等。这些信息缓存到段寄存器中,避免了处理器在转址(translate address)时花费额外的总线周期从段选择符表中读入数据。处理器指令中可以明示使用哪些段寄存器,这将替换掉默认使用的段寄存器。 ————维基百科

    通常我们看到的段寄存器只有16位,这16位本质只是一个段选择子,更多的段描述信息需要通过该选择子在GDT全局描述符表中找到对应的描述符表项进而读取段的全部信息。
    在这里插入图片描述

    段寄存器中16位2字节段选择子的结构如下:
    在这里插入图片描述
    在这里插入图片描述

    GDT表中64位8字节段描述符结构:
    在这里插入图片描述

    对于一个段寄存器描述的一个段,该段具有段属性Attribute段基址Base以及段限长Limit,段寄存器中能看到的16位段选择子就是为了能够查找上述三个属性。

    在这里插入图片描述

    下面进行三个属性的基本探测,能够证明他们确实存在,而且当进行段寄存器赋值的时候,不止是简单的16位段选择子的改变,同时也涉及段属性、段基址以及段限长的改变。

    Attribute

    #include <iostream>
    
    using namespace std;
    
    int result;
    int main()
    {
    	__asm
    	{
    		mov ax, cs //cs是可读 可执行 但是不可写
    		mov ds, ax 
    		mov dword ptr ds:[result], eax 
    	}
    	cout << result << endl;
    	return 0;
    }
    

    Base

    #include <iostream>
    
    using namespace std;
    
    int result;
    int main()
    {
    	__asm
    	{
    		mov ax, fs // 如果换成ss就是读取0地址处导致程序运行失败,fs寄存器的段基础不是0,所以能够进行读取
    		push gs // 保存gs的值
    		mov gs, ax 
    		mov eax, gs:[0]
    		mov dword ptr ds:[result], eax
    		pop gs // 恢复gs的值
    	}
    	cout << result << endl;
    	return 0;
    }
    

    Limit

    #include <iostream>
    
    using namespace std;
    
    int result;
    int main()
    {
    	__asm
    	{
    		mov ax, fs // 如果换成ss就是读取0地址处导致程序运行失败,fs寄存器的段基础不是0,所以能够进行读取
    		push gs // 保存gs的值
    		mov gs, ax 
    		mov eax, gs:[0xffc] // fs段限长为0xfff
    		mov dword ptr ds:[result], eax
    		pop gs // 恢复gs的值
    	}
    	cout << result << endl;
    	return 0;
    }
    

    从段描述符的结构中,我们看到描述段限长Limit 低4字节0-15位以及高字节16-19位,但是Base Address被分为了三段低4字节16-31位、高4字节0-7位以及高4字节24-31位,这是由于历史原因,因intelCPU也是一步步发展过来的,为了能够向下兼容,所以出现了这种破碎的场景;剩下的部分都是段的描述属性了。

    接下来详细介绍段描述符的各个部分属性!

    展开全文
  • 段寄存器,段描述符和段选择子

    千次阅读 2021-02-09 23:18:08
    读一个段寄存器只读16位,写一个段寄存器写96位 Struct SegMent{ WORD Selector;//16位selector WORD Attribute;//16位的Attribute WORD Base;//32位的Base DWORD Limit //32位的Limit }; 可以通过MOV指令对...

    前奏

    X86 CPU的3个模式:实模式,保护模式和虚拟8086模式

    保护模式有什么特点?
    段的机制
    页的机制

    学习保护模式有什么用?
    真正理解内核是如何运作的

    段寄存器

    段寄存器:
    ES CS SS DS FS GS LDTR TR共8个

    读一个段寄存器只读16位,写一个段寄存器写96位

    Struct SegMent{
    WORD	Selector段选择子;//16位selector
    WORD	Attribute;//16位的Attribute
    WORD	Base;//32位的Base
    DWORD	Limit	//32位的Limit
    }

    在这里插入图片描述
    XP环境下:

    段寄存器SelectorAttributeBaseLimit
    ES0023可读,可写00xFFFFFFFF
    CS001B可读,可执行00xFFFFFFFF
    SS0023可读,可写00xFFFFFFFF
    DS0023可读,可写00xFFFFFFFF
    FS003B可读,可写0x7FFDE0000xFFF
    GS----

    可执行:当前这个段修饰的地址可以赋值给eip
    注意:
    加粗数据在不同环境下,数值可能不一样。

    验证环节:

    探测Attribute:

    __asm {
    
    		mov ax,ss	//ss段寄存器可写,cs段寄存器不可写
    		mov ds,ax
    		mov dword ptr ds:[var],eax
    	}
    	printf("你死了");
    

    在这里插入图片描述

    __asm {
    
    		mov ax,cs	//ss段寄存器可写,cs段寄存器不可写
    		mov ds,ax
    		mov dword ptr ds:[var],eax
    	}
    	printf("你死了");
    

    在这里插入图片描述
    验证Attribute的确存在

    探测Base:

    __asm {
    
    		mov ax, ds	
    		mov gs, ax
    		mov eax,gs:[0]	
    	}
    

    在这里插入图片描述

    	__asm {
    
    		mov ax, ds	
    		mov gs, ax
    		mov dword ptr ds : [var] , eax
    	}
    

    在这里插入图片描述
    验证Base的确存在

    探测Limit:

    __asm{
    		mov ax,fs
    		mov gs,ax
    	    mov eax ,gs:[0x1000]	//0x7FFDF000+0x1000	fs的limit的0xFFF
    	    mov dword ptr ds:[var],eax
    	}
    

    在这里插入图片描述

    	__asm{
    		mov ax,fs
    		mov gs,ax
    		mov	eax, dword ptr cs:[0x7FFDF000 + 0x1000]
    	    mov dword ptr ds:[var],eax
    	}
    

    在这里插入图片描述
    验证Limit的确存在

    可以通过MOV指令对寄存器进行读写(LDTR和TR除外)

    段描述符和段选择子

    GDT(全部描述符表) LDT(局部描述符表)
    Windows里面并没有使用LDT,使用的都是GDT

    GDTR(48位寄存器,表中存放了GDT表 的起始地址(32位),外加存放GDT表的大小(16位))
    当我们执行类似MOV DS,AX指令时,CPU会查表,根据AX的值来决定查找GDT还是LDT,查找表的什么位置,查出多少数据。

    r gdtr
    

    利用winDbg可以查看GDT 的地址

    r gdtl
    

    利用winDbg可以查看GDT 表的大小

    dd 地址
    

    查看此地址开始以double word 为一组的数据

    段描述符(8个字节为一组)
    在这里插入图片描述
    GDT表里面存储的元素称为段描述符,每个段描述符是8个字节

    dq 地址
    

    查看此地址开始以8个字节为一组的数据

    段选择子
    在这里插入图片描述
    RPL:请求特权级别

    TI:
    TI=0 查GDT表
    TI=1 查LDT表

    Index:(索引值)
    MOV DS,AX指令时,假如AX=1B,即001B
    拆分为0000 0000 0001 1011

    去掉TI和RPL值,后剩下Index值为11,即3,则查GDT表索引值为3 (GDT表中索引值从0开始,索引值为0处的段描述符为0)的段描述符

    加载段描述符至寄存器(dword 4个字节;fword 6个字节;qword 8个字节;):
    除了MOV指令,我们还可以使用LES,LSS,LDS,LFS,LGS指令修改寄存器

    CS不能通过上述的指令进行修改,CS为代码段,CS的改变会导致EIP的改变,要改CS,
    必须要保证CS与EIP一起改

    char buffer[6];
    __asm{
    les ecx,fword ptr ds:[buffer]//高2字节给es,低4个字节给ecx
    }
    

    注意:RPL<=DPL(在数值上)段权限检查

    P位(高四字节第15位)

    p=1短描述符有效

    p=0短描述符无效

    段描述符与段寄存器的对应关系

    在这里插入图片描述
    Attribute //16位 对应段描述符(高四字节) 第8位~第23位

    Base //32位 (高四字节)第24位 ~ 第31位 + (高四字节)第0位 ~ 第7位+(低四字节)第16位 ~ 第31位

    Limit //32位 (高四字节)第16位 ~ 第19位 +(低四字节)第0位 ~ 第15位 总共20位 最大值也就是FFFFF,此时分情况
    1.如果G位为0,那么Limit单位是字节,此时高位填0,即最大值也就是0x000fffff
    2.如果G位为1,那么Limit单位是4KB,4x1024=4096,4096代表有多少个,但是地址计算都是从0开始的,那么需要减1,即上限为4096-1=4095,刚好转为0xfff,如果此时Limit此时界限为1的话,那么此时为0x1FFF,则最大可以为0xffffffff

    总结:
    如果G为0的话,那么Limit为0x000FFFFF
    如果G为1的话,那么Limit为0xFFFFFFFF

    注意:
    FS对应的短描述符比较特殊,FS是与线程相关,查分后的值与段寄存器中的值不符合。
    在这里插入图片描述

    展开全文
  • 段地址和段寄存器

    千次阅读 2020-09-16 10:45:28
    1、8086外部提供了20位的地址总线,CPU内部只能提供16位地址 两个16位地址转换为20位 地址加法器合成物理地址的方法: ...CS、DS、SS、ES当8086要访问内存时,由这4个段寄存器提供内存单元的段地址 CS和IP是.
  • 什么是段寄存器,数据寄存器

    千次阅读 2020-04-01 12:18:19
    寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。 2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边...
  • 保护模式学习笔记(一)前言保护模式参考书籍:段寄存器段寄存器的结构段寄存器的读写段寄存器的属性探测Attribute:探测Base:探测Limit:GDT表与LDT表GDT表段描述符段描述符的属性```P位``````G位``````S位``````...
  • 通用寄存器寄存器和变量差不多,目的都是用于保存一些即将操作的数据 EAX(accumulator) 寄存器:扩展累加寄存器(一般在乘/除中会被主动调用),也可以用于其他用途 ECX(Count) 寄存器:循环计数器,多数...
  • [windows内核]段寄存器

    2020-05-16 15:25:54
    什么是段寄存器? 其实我们平常在OD调试中就可以看到,但是不会在意的,这里显示其实是段寄存器的一部分,称为段选择子,下面我们具体会讲。 还有就是我们平时在调试中经常会看到的汇编代码 这里其实我们真正写入...
  • 文章目录段寄存器属性简介GDT(全局描述符表) LDT(局部描述符表)段描述符段描述符的结构段描述符与段寄存器的对应关系P位G位S位type域DPLDB总结段选择子段选择子和段寄存器的对应关系段选择子的结构RPLTIIndex ...
  • 8086段寄存器

    千次阅读 2020-08-21 14:20:20
    8086的访问内存的时候:物理地址=段地址×16+偏移地址,这个段地址由段寄存器来提供。8086有4个段地址寄存器,分别是CS,DS,ES,SS。其中CS是最为关键的,因为CS:IP指示了CPU需要读取的地址。IP是指令指针寄存器,...
  • 段选择符 段寄存器

    万次阅读 2016-08-27 15:57:48
    而在80386以后的CPU中段值需要用8个字节(64位)存储这些信息,但段寄存器只有16位,因此在实模式下,段寄存器含有段值,为访问存储器形成物理地址时,处理器引用相应的某个段寄存器并将其值乘以16,形成20位的段基...
  • 一、通用寄存器 寄存器 编号(二进制) 编号(十进制) 64位 32位 16位 8位 累加寄存器 RAX EAX AX AL 000 0 计数寄存器 RCX ECX CX ...
  • 通用寄存器和段寄存器

    千次阅读 2016-01-18 08:45:25
    8086/8088通用寄存器的通用性表现在:  这些寄存器除了各自规定的专门用途外,他们均可以用于传送和暂存数据,可以保存算术逻辑运算中的操作数和运算结果;  8个通用寄存器的专门用途如下:  AX 字乘法,字除...
  • 汇编语言--段寄存器

    万次阅读 2020-09-08 21:53:12
    我们可以将一段内存定义为一个段,用一个段地址指示段,用偏移地址访问段内的单元,可以用分段的方式来管理内存。 ... 段寄存器:8086CPU有4个段寄存器:CS、DS、SS、ES,提供内存单元的段地址 ...
  • Intel 8086 CPU 段寄存器

    2019-09-21 19:16:38
    1. 段寄存器的产生 段寄存器的产生源于Intel 8086 CPU体系结构中数据总线和地址总线的宽度不一致。 数据总线的宽度,也即是ALU(算数逻辑单元)的宽度,平常说一个CPU是“16位”或者“32”位指的就是这个。 8086CPU的...
  • 汇编语言:寄存器相关概念初理解(通用寄存器、段寄存器、专用寄存器) 1.寄存器分类 一图抵千言: 2.详细介绍及注意事项 (1)AX BX CX DX被称为通用寄存器(可被分割为2个8位寄存器),存放数据的,数据寄存器(16...
  • 段寄存器和8种地址寻址方式

    千次阅读 2017-11-28 17:13:26
    ...段寄存器是因为对内存的分段管理而设置的。...1. 取命令:段寄存器CS指向存放程序的内存段,IP是用来存放下条待执行的指令在该段的偏移量,把它们合在一起可在该内存段内取到下次要执行的指令。
  • 2个变址和指针寄存器(SI和DI) 2个指针寄存器(SP和BP) ,32位CPU增加2个16位的段寄存器:FS和GS。 4个段寄存器(ES、CS、SS和DS) 1个指令指针寄存器(IP) 1个标志寄存器(Flags)一共14个寄存器,或者16个 16位CPU...
  • Windows核心编程_FS段寄存器

    千次阅读 2018-06-21 16:40:24
    Windows核心编程_FS段寄存器FS段寄存器Windows用来存储一些进程信息的,FS段的首地址是存储这些进程信息的首地址:在内核态FS指向GDT表的:0x30地址, 在用户态FS=0x3B也就是说当切换到用户态时,操作系统会把进程下...
  • GDT段寄存器详解

    千次阅读 2018-11-06 23:19:08
    )寻址时将段寄存器的值左移四位加上偏移地址,得到1MB空间内的地址。它是CPU启动的时候的模式,这就相当于一个超级快的8086。  寻址方式:DS(data segment)&lt;&lt;4 + IP(偏移量)(偏移地址/逻辑地址) =...
  • 8086的CS段寄存器(IP)

    千次阅读 2020-02-02 11:06:09
    8086共有四个段寄存器,分别为CS,DS,SS,ES CS为代码段寄存器,还有个与CS息息相关的寄存器叫IP,为指令指针寄存器。 在8086PC机中,设CS中的内容为M,IP的内容为N,8086CPU将从M*16+N单元开始,读取一条指令并...
  • 段寄存器 1:CS 2:DS 3:ES 4:FS 5:GS 6:SS
  • 默认段寄存器DSMOV EAX, [EBX+EBP] ;默认段寄存器DSMOV EBX, [EAX+100H] ;默认段寄存器DSMOV EBX, [EBP+EBX] ;默认段寄存器SSMOV [ESP+EDX*2], AX ;默认段寄存器SSMOV AX, [ESP] ;默认段寄存器SS 转载于:...
  • 段寄存器的引用

    2017-11-06 16:30:32
    段寄存器是因为对内存的分段管理而设置的。16位CPU有四个段寄存器,所以,其程序可同时访问四个不同含义的段。段寄存器及其偏移量的引用关系如图所示。 段寄存器CS指向存放程序的内存段,IP是用来存放下条待...
  • 段选择符和段寄存器

    千次阅读 2016-08-28 12:30:23
    这种寻址技术把内存空间分成一个或多个称为的线性区域,从而对内存中一个数据对象的寻址就需要使用一个的起始地址(即地址)和一个内偏移地址两部分构成。地址部分使用16位的选择符指定,其中14位可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 228,677
精华内容 91,470
关键字:

段寄存器