zoukankan      html  css  js  c++  java
  • 寄存器(CPU工作原理)

    1.通用寄存器

    8086CPU所有一共有14个寄存器分别是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW,所有的寄存器都是16位的,可以存放两个字节(一个字)。

    AX、BX、CX、DX通常用来存放一般性数据被称为通用寄存器。

    AX通用寄存器存储二进制方式为:

    为了保证兼容性,这四个寄存器都可以分为两个独立的8位寄存器使用。

    1)AX可以分为AH和AL,分别是高8位和低8位

    2)BX可以分为BH和BL

    3)CX可以分为CH和CL

    4)DX可以分为DH和DL

    那如何向下兼容8位寄存器呢?就是将AH全部填0,只用AL部分。

    AX的低8位(0~7位)构成了AL寄存器,高8位(8~15位)构成了AH寄存器。

    AH和AL寄存器是可以独立使用的8位寄存器。如何不能独立使用那么就不能兼容。

    2.几条简单的汇编指令

    汇编指令不分大小写

    下面是几条简单的汇编指令:

    这里需要注意的是,汇编的指令需要从后往前看,例如mov ax,18正确的顺序是将18送入ax中。

     两道例题:

    (1)

    mov ax,8226H

    mov bx,8226H

    add ax,bx

    结果ax中存放的数是044CH

    因为即使8226H+8226H=1044CH但是ax为16位寄存器,只能存放044CH,多出的1这里不做讲解。以后的博客中会说。

    (2)

    mov al,00C5H

    add al,93H

    那么结果al中存放的数据不是0158H而是0058H,因为这里用的是al寄存器,ax的低8位寄存器,所以高8位为0,至于多出的那个1这里先不做讲解。以后的博客中会说。

    8086CPU给出物理地址的方法:

    将16位的段地址和16位的偏移地址通过地址加法器给出20位的物理地址。

    3.地址加法器合成物理地址的方法

    物理地址=段地址*16=偏移地址

     段地址*16就是向左移一位,如果是二进制数则就是向左移四位

    虽然“段地址”这个名词中包含了“段”这个字,但是并不是说将内存分为一个个的段。

    两点需要注意:

    (1)段地址*16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;

    (2)偏移地址为16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB。

     

    从这个图中可以得出结论:CPU可以通过不同的段地址和偏移地址形成同一个物理地址。

    4.段寄存器

    段寄存器顾名思义就是提供段地址的寄存器,8086CPU有4个段寄存器,分别是CS、DS、SS、ES。

    CS和IP是8086CPU中最关键的寄存器,它们指示了CPU当前要读取指令的地址。

    CS为代码段寄存器,IP为指令指针寄存器(偏移地址寄存器)

    当8086CPU启动时或者复位时,CS=FFFFH,IP=0000H

    传送指令mov不能修改CS和IP寄存器里的值,但是8086CPU提供的一个转移指令jmp指令来修改CS与IP寄存器的值。

    5.DEBUG中常用指令

    R命令查看、改变CPU寄存器的内容;

    D命令查看内存中的内容;

    E命令改写内存中的内容;

    U命令将内存中的机器指令翻译成汇编指令;

    T命令执行一条机器指令;

    A命令以汇编指令的格式在内存中写入一条机器指令;

  • 相关阅读:
    IE设置cookie问题。
    正则表达式。
    Git和SVN区别
    点滴MarkDown~
    浏览器页面是否缩放问题。
    我理解的灰度发布。
    有衬线字体和无衬线字体
    移动开发规范
    Thunderbird 如何接收 Foxmail 发出的会议邀请。。
    移动端 CSS sprites 的 background-size 如何计算的。
  • 原文地址:https://www.cnblogs.com/gzs-monkey/p/8728916.html
Copyright © 2011-2022 走看看