【汇编】内存的读写与地址空间、寄存器及数据存储

简介: 【汇编】内存的读写与地址空间、寄存器及数据存储

前言


计算机体系结构中,内存的读写操作是一项关键任务,涉及到程序的执行、数据的存储和处理。同时,理解地址空间的概念对于编写有效的程序至关重要。本文将探讨汇编语言中的内存读写过程以及地址空间的概念,帮助读者更深入地理解计算机内部的运作机制。


一、CPU对存储器的读写


1.1 cpu对存储器的读写如何进行?

CPU要想进行数据的读写,必须和外部器件进行三类信息的交互:

存储单元的地址

(地址信息)

器件的选择,读或写命令

(控制信息)

读或写的数据

(数据信息)


1.2 演示

机器码: 101000000000001100000000

16进制:A00300

汇编指令:MOV AL,[3]

含义:从3号单元读取数据送入寄存器AL

750e001842f44ed1b0633172014c3750.png

首先,要读取的地址信息先进入内存找到对应的数据存储单元。找到了3,里面的数据为08

接下来,控制器发出读质量。3号单元的08顺着数据线给了我们存放数据的器件


二、内存地址空间


什么是内存地址空间

CPU地址总线宽度为N,寻址空间为2NB

8086CPU的地址总线宽度为20,那么可

以寻址1MB个内存单元,其内存地址空

间为1MB。

从CPU角度看地址空间分配:

5beab2dddc0a4742839d5e9e1b6c0fee.png

a6f15e950bfb46cd9bd80b1ef514a016.png


三、将各类存储器看作一个逻辑存储器——统一编址


所有的物理存储器被看作一个由若干存储

单元组成的逻辑存储器;

每个物理存储器在这个逻辑存储器中占有

一个地址段,即一段地址空间;

CPU在这段地址空间中读写数据,实际上

就是在相对应的物理存储器中读写数据。

7d07a2df6dba4cd99338f5c7a1aeac9b.png

内存地址空间的分配方案

a8a7add308c1434c8b1086b415dd0faa.png


三、CPU的组成


运算器进行信息处理;

寄存器进行信息存储;

控制器协调各种器件

进行工作;

内部总线实现CPU内

各个器件之间的联系。

54b72cad330c4936a99ad9c821304566.png


寄存器是CPU内部的信息存储单元

8086CPU有14个寄存器:

通用寄存器:AX、BX、CX、DX

变址寄存器:SI、DI

指针寄存器:SP、BP

指令指针寄存器: IP

段寄存器:CS、SS、DS、ES

标志寄存器:PSW

共性

8086CPU所有的寄存器都是16位的,

可以存放两个字节

0c6c63d0ffe64c4588f3487963695806.png

通用寄存器–AX为例

一个16位寄存器存储一个16位的数据

最大值?

2^16-1

即是所有位都写1

773f78fc71a6443fac36d8f9284bb059.png

例:在AX中存储18D

18D

— 12H

— 10010B

69cc8dc8ba59466bab041521692895ce.png

再例:在AX中存储20000D

20000D

— 4E20H

— 0100111000100000B

9ebb106802044e3ab6f1a7fa59ac7468.png

“横看成岭侧成峰“

问题

8086上一代CPU中的寄存器都是8位的,如何保证程序的兼容性?

方案

通用寄存器均可以分为两个独立的

8位寄存器使用

如下面这样:

fc529c7d930a4875bc7cbc563f43365a.png

细化

AX可以分为AH和AL

BX可以分为BH和BL

CX可以分为CH和CL

DX可以分为DH和DL


四、“字”在寄存器中的存储


4.1 “字”是什么东西?

当我们谈论计算机存储中的“字”,它其实就是一种计量单位,用来描述在计算机中处理的数据大小。一个字通常由一串二进制数字组成,它可以是8位(一个字节)、16位、32位或者64位长,具体取决于计算机体系结构。


寄存器是计算机内部的小而快速的存储空间,就像大脑中的速记本。这里的“字”是指寄存器可以一次性处理的数据单元大小。比如,一个16位的寄存器可以存储或处理16位长的数据,而一个32位的寄存器可以处理更长的数据。


在寄存器中,字按照其长度被存储和处理。就像小抽屉里能容纳的物品大小不同一样,不同长度的字在寄存器中占据的空间也不同。这些“抽屉”以二进制形式存储数据,所以一个8位的寄存器可以容纳8个二进制位,而16位寄存器则能容纳16个,以此类推。计算机通过这些位来存储和处理数字、字符、图像或者指令等各种信息。


4.2 在8086中

8086是16位CPU

8086的字长(word size)为16bit

一个字(word)可以存在一个16位寄存器中

这个字的高位字节存在这个寄存器的高8位寄存器

这个字的低位字节存在这个寄存器的低8位寄存器

652c9b0452ef4282b39358e675593fbf.png


总结


内存的读写与地址空间是计算机体系结构中的核心概念。通过汇编语言,程序可以直接操作内存,实现对数据的灵活控制。地址空间的概念则为程序提供了一个有序的内存结构,使得不同部分的数据有序地存储在内存中。深入理解这些概念,有助于程序员编写出更高效、可靠的程序,充分利用计算机的内存资源。在今后的学习和开发过程中,对于内存和地址空间的理解将发挥重要作用。

相关文章
|
3月前
|
存储
【数据存储:揭开内存中数据存储的神秘面纱】(下)
【数据存储:揭开内存中数据存储的神秘面纱】
|
3月前
|
存储 小程序 编译器
【数据存储:揭开内存中数据存储的神秘面纱】(上)
【数据存储:揭开内存中数据存储的神秘面纱】
|
3月前
|
Linux
linux内存不足,调整swap空间
linux内存不足,调整swap空间
34 0
|
3月前
|
存储 缓存 Unix
内存学习(一):物理地址空间内存概述
内存学习(一):物理地址空间内存概述
38 0
|
1月前
|
存储 算法 Java
【Java】Java的内存空间
【Java】Java的内存空间
22 2
|
1月前
|
Python
Python中如何判断两个对象的内存地址是否一致?
Python中如何判断两个对象的内存地址是否一致?
18 0
|
1月前
|
存储 C语言
【C语言】深入理解取地址符&:与内存地址的联系
【C语言】深入理解取地址符&:与内存地址的联系
113 0
|
1月前
|
Java Python
|
3月前
|
搜索推荐 Linux
内存学习(二):物理地址空间虚拟地址空间布局
内存学习(二):物理地址空间虚拟地址空间布局
88 0
|
1月前
|
存储 JSON 监控
Higress Controller**不是将配置信息推送到Istio的内存存储里面的**。
【2月更文挑战第30天】Higress Controller**不是将配置信息推送到Istio的内存存储里面的**。
14 1