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

    2017-04-14 11:04:00
    段地址存放在段寄存器中,8086CPU有4个段寄存器:CS, DS, SS,ES。 .CS和IP CS和IP寄存器,指示了CPU当前要读取指令地址。CS为段寄存器,IP为指令指针寄存器。 在8086CPU中,设CS内容为M,IP中内容为N,8086CPU...

    .段寄存器

    8086CPU在访问内存时是要由相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址。段地址存放在段寄存器中,8086CPU有4个段寄存器:CS, DS, SS,ES。

    .CS和IP

    CS和IP寄存器,指示了CPU当前要读取指令的地址。CS为段寄存器,IP为指令指针寄存器。

    在8086CPU中,设CS内容为M,IP中内容为N,8086CPU将从M*16+N单元开始,读取一条指令并执行。也可以这样描述,任意时刻,CPU将CS:IP指向的内容当做指令执行。

    8086CPU的工作过程可以简要描述如下:

    .修改CS,IP的指令

    8086CPU大部分寄存器的值,都可以用mov开修改,比如通用寄存器ax bx cx dx等,mov指令被称为传送指令。但是mov指令不能修改CS,IP的值,8086没有为mov提供这个功能,但是提供了另外的的指令来改变他们的值,能够改变CS,IP的内容指令被系统称为转移指令。先介绍一个最简单可以修改CS,IP的指令:jmp指令。

    若想同时修改CS,IP的内容,可用形如:jmp 段地址:偏移地址     的指令来完成。

    eg:

    jmp 2AE3:3,执行后:CS=2AE3H,IP=0003H,CPU将从2AE33H处读取指令。

    jmp 段地址:偏移地址  指令的功能为:用指令中给出的段地址修改CS,偏移地址修改IP。

    如想要仅仅修改IP的内容,可用“jmp 某一合法寄存器”的指令完成。

    eg:

    jmp  ax,指令执行前:ax=1000H,CS=2000H,IP=0003H

          指令执行后:ax=1000H,CS=1000H,IP=1000H

    jmp 某一合法寄存器   指令的功能为:用寄存器中的值修改IP

    jmp  ax,在含义上如同mov IP,ax一样,虽然mov IP,ax这样的指令是错误的,但是用汇编语言来形容汇编语言能更好帮助理解和记忆。

     

     

    如果看了内存机器码和对应汇编指令不能得到上面的分析结果,回看P33页。

    .代码段

    我们将长度为N(N<=64KB)的一组代码,存在一组地址连续、起始地址为16的倍数的内存单元中,我们可以说这段内存是用来存放代码的,从而定义了一个代码段。为什么N<=64KB,段寄存器和偏移指针决定了指令在哪里执行,因为IP是16位的寄存器,所以最大寻址2的16次方即64KB。你可能会说,不是还有CS*16+IP吗,那不是该远远大于64KB的呀,可是寻址能力指的是在首地址确定后,能够偏移多少地址,所以偏移最多16位,等于64KB。

     

    转载于:https://www.cnblogs.com/yangguang-it/p/6707795.html

    展开全文
  • 将一个寄存器的内容送入到另一个寄存器。 2.8086CPU不支持将数据直接放入到段寄存器中。 3.执行指令时,8086CPU自动获取ds中的数据为内存单元。 4.mov指令中的[]说明操作对象是一个内存单元。[]中的数表示偏移地址。...

    汇编语言-- 段寄存器DS[Address]初识

    一、前提
    1.汇编语言中mov指令可以完成两种传送 :1).将数据直接送入寄存器中。2).将一个寄存器的内容送入到另一个寄存器。
    2.8086CPU不支持将数据直接放入到段寄存器中。
    3.执行指令时,8086CPU自动获取ds中的数据为内存单元。
    4.mov指令中的[]说明操作对象是一个内存单元。[]中的数表示偏移地址,段地址默认放在ds中。
    5.定位一个内存单元的地址需要段地址和偏移地址。
    二、问题
    请实现将10000H地址中的数据存入到a1中。
    三、解答
    mov bx,1000H //这里相当于是做一个中转,将1000H送入到一般的寄存器中,因为上述前提2。
    mov ds, bx //将1000H作为数据传送到ds中。1000H是数据,相当于ds的段地址。思考前提3
    mov al,[0] //得到偏移地址为0(思考4)和段地址(思考3),完成传送

    四、扩展
    1.如何将al中的数据送入到内存单元10000H中。
    答:mov bx,1000H mov ds, bx mov [0],al
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 8086段寄存器

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

    8086的访问内存的时候:物理地址=段地址×16+偏移地址,这个段地址由段寄存器来提供。8086有4个段地址寄存器,分别是CS,DS,ES,SS。其中CS是最为关键的,因为CS:IP指示了CPU需要读取的地址。IP是指令指针寄存器,在这里就作为偏移地址。也就是说:在8086CPU中,任意时刻,CPU都会把CS:IP指向的内容当作指令来执行。每读取一次之后,IP中的值会自动增加(增加的长度就是所读取到的指令的长度),以便CPU读取下一个指令。


    8086在上电或者复位的时候,CS被设置为0xFFFFH,IP被设置为0x0000H。也就是说CPU此时执行的是0xFFFF0H内存处的指令。


    在冯诺依曼结构的计算机中是指令和数据是一起存放的,因此8086上述的方式就解决了这个问题。CS:IP所指向的一定是指令,不会是数据。


    8086提供了修改CS:IP的指令,它们被称之为转移指令,例如JMP指令。一个同时修改CS:IP的内容的指令如下:

    JMP 0x07c0:0x0000,执行之后CS=0x7c00,IP=0x0000。此时CPU将去0x7c00处读取指令。

    当然,如果仅仅只修改IP的内容,那么可以使用JMP 某一合法寄存器,例如:

    MOV AX,1234H
    JMP AX
    

    执行上面的指令之后,IP的值就会被修改为1234。这两条指令其实就相当于:MOV IP,AX。当然8086并没有提供MOV可以修改CS和IP的功能,也就不存在MOV IP,AX这样的指令了。


    需要注意的是8086是小端模式,也就是说数据的高位对应高地址,数据的低位对应低地址。例如下图所示的在内存中分布的数据。

    假设20000(4E20H)在Intel的8086的计算机上,在内存中应该是低地址0存放20H,高地址1存放4E。由于8086一次性能处理16位数据,也就是两个字节,我们通常称之为1个字,故:1字=2字节。


    前文我们说过,CS:IP给出的地址一定是指令地址,那么数据的地址呢?在8086PC中,DS段寄存器通常用来存放要访问的数据的段地址。下面是一个例子:

    MOV AX,1000H
    MOV DS,AX
    MOV BX,[0]     ;[]表示内存一个单元,其中的0表示偏移地址。
    

    这三条指令执行完以后,DS=1000H,BX取到了1000:0000地址处的数据。8086在执行最后一条指令的时候会自动去取DS中保持的段地址。

     

     

    展开全文
  • 内核学习之段寄存器

    2014-05-22 16:37:53
    关于段寄存器的介绍大部分只是介绍其分类和在寻址中的应用,很少提到段寄存器如何去寻址的。这几天一直在纠结着方面的内容,今天算是大体明白了吧! 还是首先提一下段寄存器的作用和分类。在8086模式下,对内存的...

    内核学习之段寄存器

    关于段寄存器的介绍大部分只是介绍其分类和在寻址中的应用,很少提到段寄存器如何去寻址的。这几天一直在纠结着方面的内容,今天算是大体明白了吧!

    还是首先提一下段寄存器的作用和分类。在8086模式下,对内存的访问由段基址和段内偏移共同组成的。段寄存器存放的即各个分段的段基址。并指示了4个正在使用的逻辑段,包括代码段寄存器CS、堆栈段寄存器SS、数据段寄存器DS和附加段数据寄存器ES。代码段寄存器CS存放正在执行的代码的段基址,堆栈寄存器SS存放的是当前堆栈的段基址,数据段寄存器DS存放的是当前数据段的段基址,ES为附加数据段的段基址。

    深入了解段寄存器,我们首先介绍另一个概念GDT(全局描述符表),在计算机刚刚启动的时候首先运行在real mode(实模式)下,在实模式下计算机用20位寻址(包括bios和内存寻址)。20位可以寻址1M的空间,这20位的地址由16位的段基址和16位的段内偏移构成。物理地址=左移4位的段地址+偏移地址。也即是段内偏移寻址空间为00000H~ffff0H.

    为了提高cpu的寻址空间,在保护模式下32位的CPU可以寻址32空间,即最大为4G空间。在保护模式下内存管理方式有两种,段模式和页模式,在此只考虑分段模式。在32位的系统中,段基址和段内偏移都用32位,因此,每个段的大小最大可为4G。也可易知想要描述一个段必须使用64位去描述。但是intel为了向后兼容段寄存器的大小仍是16bit,所以在此使用一个数组存放64位的段描述符,而将寄存器中的值作为下标索引间接引用。这个描述符表就是GDT

    保护模式下的段寄存器结构如下

     

    段选择器的16位具体作用是,index用于索引GDT表,T1用于区分GDTLDT表,RPL用于区分优先级。

    GDT的索引中,每个GDT在内存中都有一个特定的地址,在创建GDT之后,会将GDT的地址赋给一个叫GDTR的寄存器,该寄存器中存放的值就是GDT的入口。以后再调用GDT的时候就可以直接引用该寄存器。上文中段寄存器的index就是在GDT的索引的段基址的偏移量。由此可见GDT中段基址的个数最多为2的13次方个。另外,GDTR+index就是索引的段在GDT中的位置。在获取了段基址之后加上逻辑地址的offset,就可以得到物理地址,每个系统只有一个唯一的GDT表。与之对应的为LDTLDT为局部变量表。每个引用程序都有一个LDTGDT可以看成LDT的一级索引。

    在GDT和LDT中存放的是段描述符,段描述符为64位,这其中记录了段基地址和段限长等方面的内容。


    除了内存的段管理机制,还有分页管理机制。具体内容还有待进一步学习。

     

    展开全文
  • 8086CPU的段寄存器

    千次阅读 2010-09-26 23:27:00
    8086CPU的段寄存器有4个,包括:CS,DS,SS,ES。CS而CS是提供代码段的段地址(code segment),而偏移地址是由IP寄存器提供。在8086CPU中,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从内存M x 16 + N...
  • 8086CS段寄存器(IP)

    千次阅读 2020-02-02 11:06:09
    8086共有四个段寄存器,分别为CS,DS,SS,ES CS为代码段寄存器,还有个与CS息息相关的寄存器叫IP,为指令指针寄存器。 在8086PC机中,设CS中的内容为M,IP的内容为N,8086CPU将从M*16+N单元开始,读取一条指令并...
  • 0.12 cs、ds这类sreg段寄存器,位宽是多少 CPU中存在段寄存器是因为其内存是分段访问,这是设计之初决定,属于基因里东西。前面已经介绍过了内存分段访问方法,这里不再赘述。 CPU内部的段寄存器(Segm...
  • 段寄存器(8086CPU)和代码段

    千次阅读 2014-04-28 22:30:29
    8086CPU有4个段寄存器:CS、DS、SS、ES。当8086CPU访问内存时,由这4个段寄存器提供内存单元段地址。 CS和IP是8086中最关键寄存器,他们指示了CPU当前要读取指令地址。CS是代码段寄存器,IP为指令指针...
  • cs是值cpu执行当前指令的段地址,ds是数据开始的段地址。通俗来讲,CS是告诉CPU,去哪个位置找内容当成指令去执行,DS是告诉CPU,去哪个位置找内容当成数据被使用,用它们扩展名便可以知晓区别:datastring=ds ...
  • 汇编寄存器(cs,ds区别

    千次阅读 2013-05-04 15:47:05
    cs(code segment)是代码段寄存器,放代码段的段地址他里面的内容和ip里面的内容和起来就可以找到当前执行的指令, ds(data segment)是数据段段寄存器 放数据段的段地址,根据段地址*16d+偏移量就可以得到物理...
  • 将一个寄存器的内容送入另一个寄存器 也可以使用mov指令将一个内存单元中的内容送入一个寄存器中。从哪一个内存单元送到哪一个寄存器中呢?在指令中必须指明。寄存器寄存器名来指明,内存单元则需用内存单元的...
  • CPU中的寄存器

    2021-04-05 20:59:58
    6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1、数据寄存器 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器时间。32位CPU...
  • 04 寄存器 内存访问

    2021-05-31 14:48:52
    内存中字的存储 任何两个连续的内存组成一个字单元 字单元= 2b=16bit DS和[address] CPU要读取一个内存单元的时候,...8086CPU不支持将数据直接送入段寄存器的操作,ds是一个段寄存器。可以直接送入通用寄存器。 数据
  • 8068寄存器学习笔记-BX 寄存器

    千次阅读 2019-04-03 12:36:16
    通常和段寄存器配合使用才能确认物理地址。 这里假设: 1.DS=1000H 2 内存1005的内容是1 MOV BX,5H MOV AH,11H MOV AH,[BX] 如无特别说明默认使用DS作为段地址。 这里AH = 1H(就是1005内存中保存的值) ...
  • 8086CPU寄存器介绍

    2014-11-03 00:52:25
    PS:感觉其实前边通用寄存器里边已经把一些段寄存器的一些东西介绍过了,所以感觉这里的东西没有上一篇内容多。。 段寄存器(CS,IP,SS,SP,DS,ES) 由于段寄存器总是和其他一些像指针寄存器,变址...
  • 寄存器指令MOV ADD SUB

    2020-09-16 15:50:04
    1、不可以直接mov到段寄存器 将内存中的东西送入寄存器? MOV BX 1000H MOV DS,BX MOV AL,[0] ...先mov到通用寄存器,再从...2、将一个寄存器的内容送到另一个寄存器MOV AX,BX 3、以及现在使用的将一个内存单元的...
  • 1、通过前一篇章的学习,知道CS和IP寄存器的内容合成的物理地址指向的是执行指令的地址。而访问内存也需要知道内存的地址,内存地址也是由地址和偏移地址组成,8086CPU中默认存放内存地址地址的寄存器是DS寄存器...
  • 汇编中寄存器加[]意思

    千次阅读 多人点赞 2018-05-15 21:27:17
    也就是说,与AL中内容相加的加数,不是SI寄存器的内容,而是以SI的内容作为地址指针的内存操作数.假设SI的内容是1234H,这条加法指令,不是将1234H加到AL里(也加不了,数据类型不对),而是以1234H作为地址,从内存的数据...
  • 80x86寄存器

    2016-08-28 09:17:41
    注意】本文使用到的汇编指令的语法是Intel汇编语法,除此之外的内容与汇编语法无关   【80x86寄存器】   32位CPU所含有的寄存器有:... ・6个[16位(段选择符)+隐藏部分(描述符缓冲)]段寄存器(ES、CS、SS、DS、FS
  • 在本章中,我们从访问内存角度继续学习了几个寄存器。...CPU要读写一个内存单元时候,必须先给出这个内存单元地址,在8086PC中,内存地址由地址和偏移地址组成。8086CPU中有一个DS寄存器,通常用来存...
  • CPU中的寄存器

    2011-08-15 11:33:21
    MOV,表示将某某内容赋值给某某寄存器,如果MOV AX,[0]表示将0这个偏移地址数据传输到AX中,地址从ds中取值。 JMP,有两种方式:JMP 1000:0000H 表示直接跳到CS=1000H,IP=0000H地址去;JMP BX或者JMP1000H...
  • 寄存器相对寻址方式

    千次阅读 2016-08-27 10:35:54
    操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或... 若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器DS;    若有效地址用BP来指定,则其缺省的段寄存器为SS。   指令中给出8位/16位偏移
  • IA-32寄存器

    2018-01-27 11:13:25
    在学习栈帧之前补充一点关于IA-32寄存器的内容: 寄存器共有四类: 1.通用寄存器:用于传送和暂存数据,也可用于参与算术逻辑运算,并保存运算结果。IA-32中八个通用寄存器都是32位,用来保存常量和地址等。如下图...
  • 使用mov指令可以完成两种传送:1、将数据直接送入寄存器;...8086CPU不支持将数据直接送入段寄存器的操作,ds是一个段寄存器,所以 mov ds,1000h这条指令是非法的。 mov指令的几种形式: mo...
  • 寄存器(内存访问)

    2018-05-10 17:20:00
    一、DS和[address]  CPU要读写一个内存单元时候,必须先给出这个内存单元地址,在8086PC中内存地址有段地址和偏移地址组成。DS(数据寄存器)中通常存放要访问...注意:由于ds是一个段寄存器,8086CPU不支持将数...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 293
精华内容 117
关键字:

ds段寄存器的内容