美文网首页想法简友广场
汇编每天1分钟 (3) | 增加对内存的认识

汇编每天1分钟 (3) | 增加对内存的认识

作者: GTR车头 | 来源:发表于2020-06-21 16:45 被阅读0次

内存是计算机中重要的部件之一,它是外存与CPU进行沟通的桥梁。

计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。

内存按功能划算可以分为RAM内存和ROM内存:

RAM内存,也叫主存,它允许CPU读取、写入数据,且断电后数据会清空;

ROM内存只允许CPU读取数据,且断电后数据不会被清空。

我们接下来可以带着几个问题去了解内存:

1、CPU是如何找到内存里的数据、指令的?

程序运行时的数据以及指令大部分都存放在内存,每个数据、指令都有自己的内存地址,CPU通过地址线查找到内存地址,最后去处理这些数据、指令。

我们第二篇文章讲到,可以想象内存是一个临时的仓库,仓库存放一些物品,每个物品都有自己的编号,这个编号就相当于内存地址,工作人员可以根据编号查找库存。

图1-1

2、内存地址(编号)具体是什么形式的,它长什么样?

我们先下载两个辅助工具

下载DOSBox:DOSBox官网

debug、edit、link、masm等等(masm汇编开发工具

首先我们下载安卓masm汇编开发工具,把它解压到目录,我们假定它解压目录是/Users/sv/Study/masm5

sv@MacBook-Pro masm5 % pwd
/Users/sv/Study/masm5

然后,我们下载dosbox,安装打开:


图1-2

接着,我们挂载下masm解压目录,并执行debug d命令,如图1-3:


图1-3

我们提取两行来解释:

图1-4 图1-5

如图1-5所示,内存地址图中由16进制表示(逢16进1,详细见第一篇文章),第一个00数据对应的内存地址为073F:0100,第二个00对应的内存地址为073F:0101,直到073F:010F第一行结束,第二行从073F:0110开始,以此类推。

3、为什么内存地址是073F:0100这种格式,而不是单独用0100来表示?

8086型号的CPU内部的地址总线只有16根,也就是只能访问到64KB(2^16B)的地址,但是为了能访问到更大的内存,8086外部地址总线采用了20根线,那么问题来了,内部16位,怎样才能产生外部的20位的地址呢?

其具体做法就是将其中的一个16位地址(被称为段地址)的值先乘以16,然后再加上另外一个16位地址(被称为偏移量或偏移地址),就得到一个20位的地址(被称为物理地址)了。

物理地址 = 段地址×16 + 偏移地址

以073F:0100为例:

073F表示段地址,0100为偏移地址。

073FH × 16 + 0100H = 073F0H + 0100H = 074F0H

最终得出073F:0100真实的物理地址为 074F0H

相关文章

网友评论

    本文标题:汇编每天1分钟 (3) | 增加对内存的认识

    本文链接:https://www.haomeiwen.com/subject/hhcaxktx.html