区分正负二进制数

时间:2016-09-28 21:48:23

标签: assembly binary

所以,我是汇编编程的新手,以及"两个补码"的概念。负数的表示,我有点困惑。

在我阅读关于集会主题的书中(以及我所咨询过的每一个在线资源),我们解释说你可以通过观察它来判断一个数字是否为负数。最重要的一点;如果该位为1,则为负(有符号),否则为正(无符号)。但是,这对我没有意义。

为了说明我的困惑,想象一下255的无符号表示:11111111 这是一个正的无符号值,但它的最高位是设置的。根据我正在阅读的两个补充规则,这应该使这个数字为负数而不是正数,但是可以使用最高有效位设置这样的无符号值(如果你不能&# 39;为此,无符号的8位整数只能表示数字0-127)。那么这是如何工作的呢?如何判断一个数字是否已签名,或者仅使用最高有效位设置无符号?并且,可能更重要的是,计算机如何区分?我只是错过了一些东西吗?

1 个答案:

答案 0 :(得分:1)

它是对值执行的操作,它定义是有符号还是无符号,而不是值本身。 例如,如果执行muldiv,则该值将被视为无符号,最高有效位是数字的一部分(因此允许对数字0到255执行操作),但imulidiv将最重要的位视为符号(允许数字从-128到127)。

条件跳转相同

cmp al, 0x81
jb some_label_1    ; unsigned comparison
jl some_label_2    ; signed comparison