2

从《装配艺术》一书中,我复制了这句话:

在二进制补码系统中,数字的 HO 位是符号位。如果HO位为零,则为正数;如果 HO 位为 1,则该数为负数。例子:

对于 16 位数字:

8000h为负,因为 HO 位为 1。

100h为正,因为 HO 位为零。

7FFFh是积极的。

0FFFFh是负数。

0FFFh是积极的。

我不明白最后两个例子。如果将这两个示例转换为二进制,则会得到0000 1111 1111 1111 1111第一个和0000 1111 1111 1111第二个。为什么前者为负,后者为正?在我看来,两者的最高位都是 0,因此两者都应该是正数。

4

4 回答 4

4

在 0FFFFH 上以 0 开头的原因是为了给汇编器/编译器一个提示,即 F 是数字的一部分。并不是所有的汇编程序都需要这个。

所以负数实际上是FFFFh,所以1111 1111 1111 1111,那么是负数。

computer-programming-forum.com/46-asm/1b99282efbac3bcf.htm

于 2013-03-26T17:18:38.860 回答
1

文字说:16位数字。因此,您需要查看右侧的第 16 位。在 0FFFF 中,这将是一个 1。至于前导零,它的符号提示该值是一个数字,而不是一个单词(即不是一个变量)。

如果您建立一个有效数字只能以数字开头的约定,则解析器(包括汇编器)可以更轻松地解析数字文字。一些人类也是如此。你知道,DEADBEEF 是一个有效的十六进制数字。

于 2013-03-26T17:26:25.050 回答
1

你能解释一下为什么 0FFFF 有 5 位数字吗?和FFFF一样吗

这是不一样的。汇编器会将普通的 FFFFh 解释为符号。你会得到一个编译错误,因为它找不到任何名为“FFFFh”的符号。将 0 放在它前面可确保汇编器将其解释为数字。

于 2013-03-26T17:29:51.803 回答
0

如果数字应该是 16 位,则第 16 位作为符号位。首先,

0FFFFh

第 16 位是 1

0000 1111 1111 1111 1111

在第二个例子中,

0FFFh

第 16 位是 0

0000 1111 1111 1111

第 16 位为 0,虽然多于 16 位,但二进制只考虑前 16 位。所以,第一个是负数,第二个是正数

于 2013-03-26T17:18:49.590 回答