博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汇编语言(学习笔记----寄存器CPU互作原理)
阅读量:5120 次
发布时间:2019-06-13

本文共 1894 字,大约阅读时间需要 6 分钟。

一、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、通用寄存器逻辑结构:

             

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

          数据:2000

       寄存器AX中的存储:

            

     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位的地址

     

六、由段地址引发的讨论

  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、观察下面的地址,读者有什么发现?

           

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

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

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

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

转载于:https://www.cnblogs.com/haoyuanyuan/p/3224348.html

你可能感兴趣的文章
除去内容中的空格与换行
查看>>
jQuery on(),live(),trigger()
查看>>
卡尔曼滤波的原理说明
查看>>
对Kalman(卡尔曼)滤波器的理解@@zz
查看>>
局部敏感哈希(Locality-Sensitive Hashing, LSH)
查看>>
Python2.7 urlparse
查看>>
sencha touch在华为emotion ui 2.0自带浏览器中圆角溢出的bug
查看>>
[WinAPI] API 2 [MessageBox API][消息框API]
查看>>
BZOJ 1264 动态规划 + 树状数组
查看>>
[BZOJ5248] 2018九省联考 D1T1 一双木棋 | 博弈论 状压DP
查看>>
super 小记
查看>>
C语言实现<读取>和<写入> *.ini文件(转)
查看>>
【架构】Linux的架构(architecture)
查看>>
从解决Cocos2dx-2.x arm64 Crash 来看C的奇技淫巧
查看>>
ASM 图解
查看>>
uva 10721 - Bar Codes(dp)
查看>>
推介一个学习JAVA的系列教程-狗鱼IT教程
查看>>
Python 字典与集合
查看>>
php头函数和浏览器缓存
查看>>
java基础—面向对象
查看>>