• 汇编语言(学习笔记----寄存器CPU互作原理)


    一、CPU概述

        1、一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。

        2、内部总线实现CPU内部各个器件之间的联系;外部总线实现Cpu和主板上其它器件的联系

    二、寄存器概述

        1、8086CPU有14个寄存器,它们名称为:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW

        2、8086CPU所有的寄存器都是16位的,可以存放两个字节,1个字

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

        4、通用寄存器逻辑结构:

                  1

        5、一个16位寄存器可以存储一个16位的数据

              数据:2000

           寄存器AX中的存储:

                 2-300x59

         6、8086上一代CPU中的寄存器都是8位的;为保证兼容性,这四个寄存器都可以分为两个独立的8位寄存器使用

                 AX可以分为AH 和 AL  高位  低位;

                 AH和AL寄存器都是可以独立使用的8位寄存器

    三、字在寄存器中的存储

         一个字可以存在一个16位寄存器中,这个字的高位字节和低位字节自然就存在这个寄存器的高8位寄存器和低8位寄存器中。  1word=2Byte=16bit

    四、几条汇编指令

    汇编指令

    控制CPU完成的操作

    用高级语言的语法描述

    mov  ax,18

    将18送入AX

    AX=18

    mov   ah,20

    将20送入AH

    AH=20

    add   ax,8

    将寄存器AX中的数值加8

    AX=AX+8

    mov  ax,bx

    将寄存器BX中的数据送入寄存器AX中

    AX=BX

    add   ax,bx

    将AX,BX中的内容相加,结果存在AX中

    AX=AX+BX

         汇编语言不分大小写!

    四、物理地址

         1、 CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间

         2、概括的讲,16位结构描述一个CPU具有以下几个方面特征:1>运算器一次最多可以处理16位的数据;2>寄存器的最大宽度为16位;3>寄存器和运算器之间的通路是16位

        3、8086有20位地址总线,可传送20位地址,寻址能力为1M;8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力却只有64k。

        4、地址加法器合成物理地址的方法:物理地址=段地址*16+偏移地址

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

        1、CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个偏移地址;

        2、段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;

        3、地址加法器将两个16位地址合并成一个20位的地址

          121

    六、由段地址引发的讨论

      1、一个数据的二进制形式左移1位,相当于该数据乘以2;

      2、一个数据的二进制形式左移N位,相当于该数据乘以2的N次方;

      3、地址加法器如何完成段地址*16的运算呢?  以二进制形式存放的段地址左移4位。

      4、一个数据的十六进制形式左移1位,相当于乘以16;一个数据的X进制形式左移1位,相当于乘以X

    七、段的概念:

          1、错误认识:内存被划分成一个一个的段,每一个段有一个段地址。

          2、其实:内存并没有分段,段的划分来自于CPU,由于8086CPU用“(段地址*16)+偏移地址=物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。

          3、再变成时可以根据需要,将若干地址连续的内存单元看作一个短,用段地址*16丁未断的起始地址(基础地址),用偏移地址定位段中的内存单元。

          4、数据在21F60H内存单元中,对于8086PC机的两种描述:a>数据存在内存2000:1F60单元中;b>数据存在内存的2000段中的1F60H单元中。

    八、需要注意两点:

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

         2>偏移地址为16位,16位地址的寻址能力为64KB,所以一个短的长度最大为64KB;

    九、内存单元地址:

        1、CPU访问内存单元时,必须向内存提供内存单元的物理地址;

        2、8086CPU在内部用段地址和偏移地址以为相加的方法形成最终的物理地址。

    十、思考两个问题:

        1、观察下面的地址,读者有什么发现?

                31

          结论:CPU可以用不同的段地址和偏移地址形成同一个物理地址

       2、如果给定一个段地址,仅通过变化偏移地址来进行寻址,最多可以定位多少内存单元?

          结论:偏移地址16位,变化范围为0~FFFFH,仅用偏移地址来寻址最多可寻64K个内存单元。

          比如:给定段地址1000H,用偏移地址寻址,CPU的寻址范围为1000H~1FFFFH

  • 相关阅读:
    网页中插入Flash动画(.swf)代码和常用参数设置
    关于UML中逻辑模型的工具的详细介绍
    简单CSS hack:区分IE6、IE7、IE8、Firefox、Opera
    mysql sock找不到
    简述nginx日志管理切割日志(亲测可行)
    Linux下使用rm删除文件,并排除指定文件(亲测可行)
    常驻内存以及如何避免内存泄漏
    TASK异步进程处理场景
    TCP长连接数据传输(同步方式)
    在智联上投了一个月的简历,很多都有意向,但是却没有通知我去
  • 原文地址:https://www.cnblogs.com/haoyuanyuan/p/3224348.html
Copyright © 2020-2023  润新知