zoukankan      html  css  js  c++  java
  • 段寄存器

    .段寄存器

    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/aademeng/category/1042475.html
    python中重要的模块--asyncio 转载
    await这个关键词以及asyncio.wait asyncio.gather
    async get_event_loop
    麦克米伦7000
    [GO]errorr接口的使用
    [GO]断言
    [GO]空接口
    [GO]接口的转换
    [GO]接口的嵌用继承
  • 原文地址:https://www.cnblogs.com/yangguang-it/p/6707795.html
Copyright © 2011-2022 走看看