1

我从这本书开始学习汇编语言:Introduction to 80x86 Assembly Language and Computer Architecture

这是从Representing Data in a Computer

我们已经研究了两种表示数字的方案-

  1. 通过使用二进制整数(通常以十六进制表示)或
  2. 通过使用 ASCII 码。

但是,这些方法有两个问题:

我不明白这些问题。

1:可用于表示数字的位数是有限的,并且

我没有得到这个。他在说什么?

2:不清楚如何表示负数。

美好的

要解决上面提到的第一个表示问题,您可以简单地包含减号的代码。例如,四个字符 -817 的 ASCII 码是 2D(表示减号)、38、31 和 37。

我认为它的second representation problem. 不过好吧,我明白了。

为了解决第一个问题,您总是可以同意使用固定数量的字节,也许在左边用 ASCII 代码填充零或空格。

我不知道他想说什么。ASCII codes for zeros or spaces.??

或者,您可以使用可变数量的字节,但同意该数字以数字的最后一个 ASCII 码结尾,即以非数字结尾的字符串。

我一句话也没说。

我不知道为什么。但我无法理解他想说什么。任何人都可以解释这一点。(例子会很棒)

4

5 回答 5

1

哇。我没有读过这本书,但如果你的摘录是准确的,我不后悔我错过了它。

数字的二进制表示受到用于表示数字的位数的限制。不过,您可以定义使用大量或可变位数的表示。您将在左侧填充二进制零(或负数的二进制补码表示中的零)。

数字的 ASCII 表示可以按照书中的描述来完成。ASCII 的问题在于处理数字更难:加法相当简单,但想象一下除法会是什么样子。

于 2010-01-01T13:07:41.250 回答
1

我明白你为什么遇到麻烦了。我建议你再找一本书。这是非常非常难以解释的。

“可用于表示数字的位数是有限的”

一个二进制数有多少位?32?那是一个极限。

“我不知道他想说什么。零或空格的 ASCII 码。”

0x20 中空格的 ASCII 码。零的 ASCII 码是 0x30

http://www.asciitable.com/

“为了解决第一个问题,你总是可以同意使用固定数量的字节,也许在左边用 ASCII 码填充零或空格。”

没有多大意义。第一个问题是限制。假设它是第二个问题,它是这样完成的:

0x30 0x30 0x37 == 7。固定长度为 3,在左侧用 ASCII 零填充。这是数字的标准 COBOL 表示形式——在左侧用前导零填充的字符串。(COBOL 通常使用尾随符号字符)。

“或者,您可以使用可变数量的字节,但同意该数字以数字的最后一个 ASCII 码结尾,即以非数字终止字符串。”

数字 1,234,456,890,123(相当大的数字)可能是

0x20 0x31 0x32 0x33 0x34 0x34 0x35 0x36 0x38 0x39 0x30 0x31 0x32 0x33 0x00

它有一个领先的空间,使它成为积极的。它以非数字 (0x00) 结尾。

于 2010-01-01T13:09:51.683 回答
1

不是这样的答案,只是一些您可能想忽略的建议。阅读有关 IEEE 754(浮点数表示)和 BCD(二进制编码的十进制 - 与您的 ASCII 不同,而是另一种类似方法)的 Wikipedia 文章来补充您的阅读。这些将阐明问题和一些解决方案。

于 2010-01-01T13:10:58.093 回答
1

他指的是在内存中存储整数的两种不同方法。他提出了两种方法:

  1. 将数字存储在计算机内部使用的基数中
  2. 将数字存储为基数 10(人类使用的基数)。

显然第一种对性能更好,但您所有的问题似乎都与第二种存储数字的形式有关,这是一种非常不寻常的计算机使用方法(但在人类可读的源文件中并不罕见)。

忽略方法1,只考虑方法2,他进一步将其分为两个子类别:固定宽度和可变宽度。在固定宽度中,您可以选择对大小进行一些限制,例如 10 位,如果小于则用零填充。在这个系统中,12345 将被表示为一个 ASCII 字符串:

0000012345

对于可变长度系统,您可以选择一些分隔符,例如分号。这允许您存储任何大小的整数:

12345;

计算机通常不会在内部以这种形式存储数字。现代处理器支持的所有整数运算都需要使用计算机的默认基数存储数字。如果您愿意,您可以将其视为二进制或十六进制,但实际上这些只是表示数据的更人性化的方式,以便我们更容易思考它。通常,现代计算机对较大的数据块进行操作,例如一次 32 位。

于 2010-01-01T13:12:43.183 回答
0

要了解计算机如何处理数据,我们必须首先了解计算机如何表示数据。为此,有必要了解一些关键概念: Number Base Decimal 在十进制系统(以 10 为底)中,我们会写数字 11。二进制 在八进制系统(以 2 为底)中,外星人会写 1011。八进制 在二进制系统中(以 8 为基数)计算机将使用 13。十六进制 在十六进制系统(以 16 为基数)中,数字将是 B!

于 2010-01-01T15:24:02.963 回答