从书,装配艺术,我复制这句话:
在二元补语系统中,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,因此两者都应该是正的 .
4 回答
所以负数实际上是FFFFh,所以1111 1111 1111 1111,那么就是负数 .
computer-programming-forum.com/46-asm/1b99282efbac3bcf.htm
文字说: 16-bit 数字 . 所以你需要从右边看第16位 . 在0FFFF中,这将是1.对于前导零,它的符号提示该值是数字,而不是单词(即不是变量) .
如果 Build 有效数字只能以数字开头的约定,则解析器(包括汇编程序)可以更轻松地解析数字文字 . 一些人也是如此 . 你知道DEADBEEF是一个有效的十六进制数 .
它不一样 . 简单的FFFFh将被汇编程序解释为符号 . 并且您将收到编译错误,因为它找不到任何名为"FFFFh"的符号 . 在它前面放置一个0可确保汇编程序将其解释为数字 .
如果数字应为16位,则将第16位作为符号位 . 在第一,
第16位是1
在第二个例子中,
第16位是0
第16位为0,虽然有16位以上,但二进制只考虑前16位 . 所以,第一个是负面的,第二个是正面的