【发布时间】:2015-04-10 11:31:06
【问题描述】:
我正在尝试做一个简单的数学计算。这是我的代码:
mov al, 128
sub al, -128
我需要知道子指令设置了哪些标志。我的计算是这样的。从sub 与+(- your number) 相同的想法开始。从 mov, al 128 开始,我们有这个:
这里是AL:
128 = 0x80 = 1000 0000b
第二步,得到-128,也就是128的第二补码,也就是说:
128 = 1000 0000b
-128 = 0111 1111b (1st complement) + 1 = 1000 0000b
所以...我们得到了相同的数字...现在我们必须将它们相加,因为这就是 sub 所做的,而不是真正的减法,而是与负数相加。
最终的结果是:
1000 0000b +
1000 0000b
----------
10000 0000b
这表明设置了以下标志:CF(有进位)、ZF(AL 中的 0)和 PF (从 d0 到 d3 的偶数个 1)。
如果我运行相同的代码,又是这样:
mov al, 128
sub al, -128
它只会设置ZF和PF,但没有CF。问题是为什么? 我做错了什么?
【问题讨论】:
标签: assembly binary cpu cpu-registers x86-16