1、4位十六进制和8位十六进制表示的内存地址的区别。 比如经常可以看到有些书上写的内存地址0x0001,而其他书上写的内存地址就变成了0x00000001。 它们都代表编号为1的内存地址。为什么一个用4位十六进制表示,另一个用8位十六进制表示呢?
首先你要知道,内存地址只是一个数字,代表一个内存空间。 那么这个空间有多大呢? 原来,计算机中存储容量的基本单位是字节。 也就是说,一个内存地址代表一个字节(8bit)的存储空间。
例如,人们常说32位操作系统最高支持4GB内存空间,这意味着CPU只能寻址2的32次方(4GB)。 注意,这里的4GB是字节,而不是位。 也就是说有4G=41024M(Byte)=410241024Kb(Byte)=4102410241024Byte(8bit),也就是8bit单元的2的32次方。
因此,4位十六进制表示的内存地址和8位十六进制表示的内存地址实际上代表了一个8位的存储空间:
至于为什么有一种用4位十六进制表示内存地址,另一种用8位十六进制表示内存地址,那是根据不同的硬件环境而定的。 个人理解:有些CPU只能寻址16位(16条地址线)计算机中存储的最小单位是,所以用4位十六进制来表示地址就足够了。 有些CPU只能寻址32位(32条地址线),因此使用8位十六进制。
另请记住,210 = 1024
1G = 1024 M
1M = 1024 KB
1KB = 1024 B(Byte)
1Byte = 8 bit
2.了解记忆。
程序和数据通常存储在硬盘等存储设备上。 无论您打开还是关闭计算机,它们都将始终存在并且不会丢失。 硬盘可以存储很多东西,但传输数据的速度很慢。 因此,当需要运行程序或打开数据时,必须将数据从硬盘等内存转移到另一块容量较小但速度快得多的内存上,然后送到CPU执行处理。 中间的存储就是内存。
无论哪种存储,软盘、硬盘、光盘还是内存,它都有一个地址。 因为它们需要存储数据,所以必须按照一定的数据单元为其分配地址。 有了地址,程序就可以找到数据。 这很容易理解。 想想为什么你的家有门牌号。
要学习编程,必须对内存地址有透彻的了解。 我们编程中的每一行代码以及代码中使用的每个数据都需要在内存中拥有其映射地址。 当然,我们不需要知道内存是如何寻址的。 那是计算机系的另一门课程:操作系统。
内存地址:
计算机将所有信息数字化,因此它知道在内存中的哪个位置记录了数据或命令。
看下面的例子:
如果要求计算机在内存中记住“丁晓明”这个名字,则可以表示为:
第一行,每个格子代表一段内存,格子中的内容就是这一段记录的数据; 第二行每个格子中的数字就是对应内存的地址。
有人可能会奇怪:为什么“D”字(“小”、“明”字也是如此)占用了两个内存地址呢? 这是因为汉字不能停留在一个地址(位置),必须放置在两个连续的地址空间中。 那么,什么可以放在单独的内存地址中呢? 例如,可以使用英文字母,例如“A”,以及阿拉伯数字:例如“1”,并将它们放置在存储器地址中。 假设有一个字符串“ABC”,记录在内存中,可以表示为(这次我们假设是从内存地址2000H开始记住的):
现在我们问一些问题:
计算机记住单词“D”的内存地址是多少? 答案是:1000H。见上图
我们一直在说,在计算机中,所有信息都被数字化为二进制的0和1。 因此,“丁晓明”这个名字也应该是一个字符串:0001 0010 0111 0101……计算机中存储的最小单位是,但在中国图形研究所画出来的、计算机内存中记录的仍然是“丁晓明”三个字。
以下是解释。 我们只用一个“鼎”字来解释。 我们假设该字符串中的0001 0010 0111 0101对应于单词“D”,则有:
我们也画一下字母“A”的对应图片:
上两图中:
第一行分别是“D”和“A”,供人们阅读。
第二行是一串0和1,是计算机内存中实际存储的数据。
第三行是内存地址。 并非每个 0 和 1 占据的位置都被寻址。 相反,每八个地址只有一个地址。
关于第三行,你可以这样理解。 门牌号是分配给每个家庭的。 每个家庭都有客厅和卧室,但没有地址。
可见的:
‘叮’确实是由一串0和1组成的。 更准确地说,从图中可以看出‘D’是由16位0和1组成的。这16个数字分别存储在2个内存地址中。
‘A’也是如此,由8位0和1组成,占用1个内存地址。
总结:内存地址是内存中存储的数据的标识符,而不是数据本身。 通过内存地址可以找到内存中存储的数据。
什么是偏移?
汇编语言的定义是:
一个存储单元的实际地址与其所在段的段地址之间的距离称为段内偏移量,也称为“有效地址或偏移量”。 另外:内存单元的实际地址与其所在段的段地址之间的距离。 本质其实就是“实际地址与其所在段的段地址之间的距离”
更简单的来说,内存中存储数据的方式是:存储数据的“实际地址”=段首地址+偏移量,
你也可以这样理解:就像现实中我们的“家庭地址”=“小区地址”+“门牌号”
上面的“offset”就像“门牌号码”
其实就相当于C++中的指针,只是指出了确切的地址…
首先有一个地方是起点,然后距离起点有多远,这个距离就是偏移量。
最小距离为一字节。 。
暂无评论内容