返回介绍

6.2 用有限大的区域来代表一个待运算的数据

发布于 2024-12-15 23:01:45 字数 1908 浏览 0 评论 0 收藏 0

冯•诺依曼体系的计算机,是以控制器、运算器和存储器为核心的,分别映射我们此前讨论的计算(范式)、算和数这三个方面。因此,如同我们对“算数”的理解一样 1存储器的结构以及它在计算系统中的抽象 ,也直接限制了计算及其逻辑。对于这个“抽象”,我们简单地说就是:顺序地址存储。

除了 Bit、Byte、Word、DWord 等与位宽直接相关的、具有数学或物理传输含义的类型——它们显然是顺序表示的值——之外,我们常见的在计算机中用的信息/数据有哪几种形式呢?布尔值算一种,它表示开关、正误等判断,是我们执行逻辑的一个基础;数值算一种,作为数学运算的对象,与我们计算系统的本质设定有关;字符(以及字符串)算是一种,因为它是我们程序员或用户可以正常理解的东西。这三类数据,构成了 计算系统 向(可用的) 计算机 发展的主要条件 2 。而这三种数据中,除了布尔值可以由计算系统的最小存储单元(bit)来表示之外,其他两种都必然面临“如何存储”的问题。

对于这个问题,“顺序地址存储”的核心思想是:设运算器可以通过一个(数值标识的) 地址 ,从存储中获得一个(有限大小的) 区域 ,则该区域可以表示为一个待运算的 数据 。以 Intel 系统的个人计算机(PC,Personal Computer)中,x86 芯片(CPU,运算器)为例 3

  • 芯片通过寄存器来读这个地址的值,因此寄存器可以表示的数值大小,决定了地址值的大小;
  • 同上,因为芯片也使用寄存器存储计算所需数据,因此上述区域(连续可读取的位数)的大小也是由寄存器可以表示的数值大小来决定的。

那么,首先,待运算的 数据的大小 就被转义成了 区域的大小 ,进而变成了运算器与存储器之间的 位宽 问题。所以 32 位的机器上一个(能直接参与 CPU 运算的)值的大小,就是 232,如果要理解为“有符号整型数”则是±231,因为符号用掉了一个位(bit)。同样,我们要运算浮点数的话,也要把它“挤”在这 32 位中去表示,例如常用的 IEEE 754 浮点数表示法 4 。再者,我们要表示字符的话,也是通过对 32 位的组合序列做出定义,将它们一一表示为我们的书写字符,例如 ASCII 字符集、GB2312 字符集,以及 UTF8、UTF32 字符集等。

接下来,可能表示的 地址 ,也被转义为上述的位宽问题。因为地址是数值标识的 5 ,所以它表达的是一个连续空间中的位置(可以想象为数轴上有限区间的点)。根据上述的原则,以 32 位的 CPU 为例,该“顺序地址存储”方案:

  • 可以找到的最后的数据的位置索引就是 232
  • 可以从该位置(以及其他任意位置上)读取的最大可能值是一个无符号的 32 位整型数(DWORD) 6

所以跳开我们熟悉的 x86 芯片去做软件开发的时候(例如单片机),我们常常需要问:寻址空间有多大,基本数据单元是多大。如果没有这样的信息,就无法通过某种语言编程去控制它,因为连一个基本的、与计算机交流的环境都搭建不起来。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文