跳转到内容

x86 汇编/固有数据类型

来自维基教科书,开放的书籍,开放的世界

这部分的 x86 汇编 书籍是一个存根。您可以通过扩展此部分来提供帮助。


严格来说,汇编语言没有像高级编程语言那样的预定义数据类型。任何通用寄存器都可以保存任何两个或四个字节的序列,无论这些字节代表数字、字母还是其他数据。同样,没有为内存块分配具体的类型 - 您可以为它们分配任何您喜欢的值。

也就是说,人们可以在汇编语言中将数据分成两类:整数和浮点数。虽然您可以将浮点值加载到寄存器中并将其视为整数,但结果将是不可预测的,因此最好将它们分开。

整数表示一个整数,可以是正数或负数(在计算机中,零被视为正数)。在 8086 架构下,它最初以 8 位和 16 位大小出现,用于最基本的操作。后来,从 80386 开始,数据总线扩展到支持 32 位操作,从而允许对该大小的整数进行操作。x86 架构下的最新系统支持 64 位指令;但是,这需要 64 位操作系统才能获得最佳效果。

计算机使用二进制补码来存储负数。最高有效位指示符号,置位表示负号。对于正数,其余位以通常的方式存储值。如果存储的是负数,则其余位存储与最大值的差值。这允许轻松地利用溢出期间发生的效应来进行操作。但是,您可以将值视为无符号值。一些汇编指令在符号位方面表现略有不同;因此,有符号整数和无符号整数之间存在细微区别。

浮点数

[编辑 | 编辑源代码]

浮点数是实数的(有限)子集。它们通常包含小数点之前之后的数字,例如 3.14159。与整数不同,在整数中小数点被理解为在所有数字之后,在浮点数中,小数点可以浮动到数字序列中的任何位置。

最初,浮点数不是主处理器的一部分,需要使用模拟软件。然而,有一些浮点协处理器允许对这种数据类型进行操作,并且从 486DX 开始,它们直接与 CPU 集成在一起。

因此,浮点操作不一定与所有处理器兼容 - 如果您需要执行这种类型的算术运算,您可能需要使用软件库作为备用代码路径。

现代处理器都使用 IEEE 754 标准,该标准在维基教科书浮点数中进行了广泛的解释。请记住,不能表示为两个的相对较短的幂(包括负幂)之和的数字始终是近似的。

华夏公益教科书