2010-01-01 29 views
0

我开始从书上学习汇编语言:介绍80x86汇编语言与计算机体系结构关于计算机号码表示的几个问题?

这是从Representing Data in a Computer

我们已经看了两个方案,以 代表numbers-

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

然而,这些方法有两个 问题:

我不明白这些问题。

1:位可用于表示一个数的数量是有限的,

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

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

精细

为了解决上面提到的第一表示 问题,你可以简单地 包括负 符号的代码。例如,对于四个字符-817的ASCII码 是2D (为负),38,31,和37。

我认为其second representation problem。但是,我知道了。

为了解决第一个问题,你可以随时 同意使用固定数量的 个字节,或许填充左侧 与零或空格ASCII码。

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

或者,你可以使用一个 可变字节数,但同意 这个数字与上次 ASCII码的数字结束,也就是说, 与 非数字终止字符串。

我没有得到一个单词。

我不知道为什么。但我不明白他想说什么。有没有人可以解释这一点。(例子会很棒)

+1

而不是试图清除在这本书通道,我建议你在二进制补码阅读了雾。它是最重要的数字表示,尤其是汇编(不仅用于算术,还用于相对跳转或寄存器相对存储器访问中的偏移量)。 – starblue 2010-01-02 08:18:48

回答

1

哇。我没有看过这本书,但是如果你的摘录是准确的,我并不抱歉,我错过了它。

数字的二进制表示受限于用于表示数字的位数。不过,您可以定义一个使用大量或可变数量位的表示。你会在左边填充二进制零(或者用负数的二进制补码表示)。

数字的ASCII表示可以按照书中的描述来完成。 ASCII的问题在于操纵数字更困难:添加相当简单,但想象一下分区的样子。

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)结尾。

+0

可用于表示数字的位数是'不受限制的'。数字7可以表示为111(3比特)或0111(4比特)或00111(5比特),依此类推。 您的发言'多少位二进制数? 32?'32?你从哪里得到这个限制? – Alice 2010-01-01 13:24:28

+0

'0x32空间的ASCII码。零代码的ASCII码是0x30'。我的问题不是“什么是ascii代码的空间和零,我可以查找ascii表 - - - 作者说:”要解决第一个问题,你总是可以同意使用固定数量的字节,也许填充左边的ASCII代码为零或空格。“嗯,当你同意固定的字节数时,你怎么能用”ASCII码“填充左边?你能用2个字节填充”ASCII码“ ? – Alice 2010-01-01 13:30:46

+0

@爱丽丝:可用于表示数字的位数总是受限制的*,因为计算机是有限的。唯一的问题是限制是固定的硬编码限制,还是仅依赖于可用的计算机资源。 – 2010-01-01 13:32:08

1

不是这样的答案,只是你可能想忽略的一些建议。在IEEE 754(浮点数字表示)和BCD(二进制编码的十进制 - 与您的ASCII不同,但是另一种类似的方法)的维基百科文章之间补充您的阅读。这些将会给他们带来问题和解决方案。

1

他指的是两种不同的方式来在内存中存储一​​个整数。他建议了两种方法:

  1. 存储在计算机内部使用
  2. 存储作为基体10(基人类使用)的数量的基的数量。

很明显,第一是获得更好的性能,但是你所有的问题似乎都与存储号码的第二种形式是对计算机的使用(但不寻常的人类可读的源文件,看到一个非常不寻常的方法)。

忽略方法1和仅考虑方法2中,他进一步分成两个子类这样的:固定的宽度和变化的宽度。在固定宽度中,您可以选择一些大小限制,例如10位数字,如果较少则填充零。有了这个系统12345将表示为ASCII字符串:

0000

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

12345; 

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

0

要了解计算机如何处理数据,我们首先要了解计算机如何表示数据。要做到这一点,有必要了解一些关键概念: 编号基数 十进制在十进制系统(基数10)中,我们将编写数字11. 二进制在八进制系统(基数2)中,外星人将编写1011. 八进制在二元系统(基数为8)计算机将使用13 十六进制在十六进制系统(基部16)的数量将是B!