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

      寄存器可以分为:通用寄存器、指令指针IP、段寄存器等等。其主要功能是在计算时存储数据、代码。寄存器是在CPU内部,靠内部总线相连。前一篇文章中CPU和内存相连的地址线、数据线、控制线相对寄存器来说是在CPU的外部,靠外部总线相连。

    一、通用寄存器

      8086CPU的所有寄存器都是16位的,可以放两个字节。AX、BX、CX、DX这4个寄存器通常用来存放一般性数据,被称为通用寄存器。每个寄存器的大小都是16位,由于以前的寄存器是8位的,为了兼容,将寄存器拆分为两个可以独立使用的8位寄存器使用。AX可分为AH(高八位)和AL(低八位),同样BS分为BH和BL。

    在介绍其他寄存器之前先看几条汇编指令: ax原值:0000H   bx原值:0000H

    mov ax,4E20H  将4E20H送入寄存器ax中。       AX:4E20H  BX:0000H

    add ax,1406H   将1406H和AX的值相加放到ax中。   AX:6226H  BX:0000H

    mov bx,2000H  将2000H送入bx中。          AX:6226H  BX:2000H

    add ax,bx     将bx的值和ax的值相加,结果放到ax中    AX:8226H  BX:2000H

    mov bx,ax          将寄存器ax中的数据送入寄存器b。    AX:8226H  BX:8226H

    add ax,bx      将bx的值和ax的值相加,结果放到ax中   AX:044CH  BX:8226H

    在最后一步,ax和bx的值都为8226H,相加结果为1044CH,但ax为16位寄存器,最大值为FFFFH,已经超出范围。所以最高位的1不能保存在ax中,导致ax的数据位044CH。

     二、8086CPU给出物理地址的方法。

      8086CPU有20位地址总线,一次可以传送20位地址,达到1MB寻址能力。但是8086CPU的寄存器只有16位,在内部一次性处理、传输的地址为16位。如果加大内部的传输能力就会导致CPU外部地址线的浪费。

      因此8086采用内部两个16位地址合成的方法形成一个20位的物理地址。如第一个图。物理地址=段地址x16+偏移地址。这样CPU内部的寻址能力最大为FFFFH x 16 + FFFFH(1114095)大于1048576(2^20)。

    三、段寄存器

      8086CPU在方位内存时要由相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址。提供段地址的部件就是段地址寄存器。8086CPU中有4个段地址寄存器:CS(代码寄存器)、DS(数据寄存器)、SS(堆栈段寄存器)、ES(扩展段寄存器)。

      下图为CPU执行过程的流程图。

      

    mov指令不能用于设置CS、IP的值,原因很简单,因为8086CPU没有提供这样功能。但是提供了jmp指令。jmp 段地址:偏移地址。

  • 相关阅读:
    CKEDITOR最新版不能上传图片的解决
    Java Web开发之Servlet获取ckeditor内容
    『实践』Java Web开发之分页(ajax)
    Java开发之JSP行为
    [Wpf学习] 1.传说中的Main
    直接使用汇编编写 .NET Standard 库
    ASP.NET CORE 启动过程及源码解读
    使用EventBus + Redis发布订阅模式提升业务执行性能(下)
    Android 实现浏览器跳转APP应用,网页也可以跳转APP
    Python全栈(七)Flask框架之1.Flask简介与URL和视图介绍
  • 原文地址:https://www.cnblogs.com/MicroHeart/p/9001427.html
Copyright © 2011-2022 走看看