从书中装配艺术,我复制了这句话:
在二人补语系统中,H.O。一个数字位是一个符号位。如果H.O.位为零,数字为正;如果H.O.位是1,数字是负数。例子:
对于16位数字:
8000h
是否定的,因为H.O.比特就是一个。
100h
是肯定的,因为H.O.位为零。
7FFFh
是积极的。
0FFFFh
是否定的。
0FFFh
是积极的。
我不明白最后两个例子。如果将这两个示例转换为二进制,则第一个示例为0000 1111 1111 1111 1111
,第二个示例为0000 1111 1111 1111
。为什么前者为负,后者为正?在我看来,两者的最高位都是0,因此两者都应该是正数。
答案 0 :(得分:2)
0FFFFH上前导0的原因是给出 assember / compiler提示F是数字的一部分。不是全部 装配商需要这个。
所以负数实际上是FFFFh,所以1111 1111 1111 1111,那么就是负数。
答案 1 :(得分:1)
文字说明: 16位数字。所以你需要从右边看第16位。在0FFFF中,这将是1.对于前导零,它的符号提示该值是数字,而不是单词(即不是变量)。
如果建立一个有效数字只能以数字开头的约定,则解析器(包括汇编程序)可以更轻松地解析数字文字。一些人也是如此。 DEADBEEF是一个有效的十六进制数,你知道。
答案 2 :(得分:1)
你能解释为什么0FFFF有5位数吗?它与FFFF相同
不一样。简单的FFFFh将被汇编程序解释为符号。而且你会得到一个编译错误,因为它找不到任何名为“FFFFh”的符号。在它前面放置一个0可确保汇编程序将其解释为数字。
答案 3 :(得分:0)
如果数字应为16位,则将第16位作为符号位。在第一个,
地址0FFFFh
第16位是1,因为它是
0000 1111 1111 1111 1111
在第二个例子中,
0FFFH
第16位为0,因为它是
0000 1111 1111 1111
第16位为0,虽然有16位以上,但二进制只考虑前16位。所以,第一个是负面的,第二个是正面的