【发布时间】:2014-04-13 07:43:36
【问题描述】:
这组指令会跳转吗? 我主要关心的是 CMP 表达式。 CMP 是否只处理无符号数字?如果是这样,它会跳跃,因为零标志会被设置。否则它不会跳跃,因为数字特别不同。
mov ax, -127d
cmp ax, 128d
je Target
【问题讨论】:
这组指令会跳转吗? 我主要关心的是 CMP 表达式。 CMP 是否只处理无符号数字?如果是这样,它会跳跃,因为零标志会被设置。否则它不会跳跃,因为数字特别不同。
mov ax, -127d
cmp ax, 128d
je Target
【问题讨论】:
平等是无符号的。
-127 = FF81 = 65409
128 = 0080 = 128
不相等的数字在有符号和无符号解释中都是不相等的。这直接源于减法对于有符号和无符号的过程是相同的这一事实 - 因为它是相同的过程,所以对于相同的输入,它不能导致一种解释为 0 而另一种解释为非 0。
【讨论】:
cmp 实际上同时处理有符号和无符号算术。在cmp 执行溢出后,进位、符号和零标志都将被适当地设置:这些标志的任何解释都取决于后续的条件指令。
例如jz/jnz 对符号不敏感,ja/jb 表示无符号比较,jl/jg 表示有符号比较。有关条件代码的(广泛)详细信息,请参阅 x86 手册。
【讨论】: