据记载,“INC”,“DEC”和“MUL”指令应该用于无符号整数,但仍然有两个第一个指令影响溢出和符号标志,“MUL”影响溢出标志,这是处理有符号数时使用的标志这个文档没有意义,为什么呢?
答案 0 :(得分:4)
我不确定您认为inc
和dec
应限制为无符号整数的地方。请指出相关文档。
通常,8086处理器对签名/未签名操作没有不同的指令。处理器内置了关于如何在“签名”世界中查看操作结果的知识,但这几乎就是它。这已经贯彻到x86处理器设计的最新版本。
使用仅使用无符号值的inc
指令没有多大意义,因为增加有符号值会非常昂贵(您必须使用add
或添加1)的adc
指令,或者在执行inc
(或dec
)后检查溢出是非常昂贵的。
答案 1 :(得分:2)
假设我们在这里讨论x86,Wikipedia page on the overflow flag表示它是由所有算术运算设置的。您指的是哪种文件,否则会提示?
答案 2 :(得分:-1)
这是它的工作原理:
考虑两个字节值0x65和0x31。它们都是无符号值,无论您是从有符号还是无符号的角度来看它们。
然后你添加它们:
0x65 + 0x31变为0x96,从无符号的角度来看很好(总和适合一个字节,因此没有设置进位标志)。但是,从签名视图中添加两个正数导致负数,因此设置了溢出和符号标志。实际上,对于所有带符号的数字,如果最高有效位由于操作而改变,则设置溢出标志,否则它被清除。
通过为unsigned和signed add设置适用的标志,你可以看到cpu为每条指令执行两次操作。之后,由编译器(或汇编程序员)决定是否使用无符号条件分支(使用标志零和进位)或带符号的条件分支(使用标志零,符号和溢出)。
那有什么意义呢?
关键在于,如果没有以这种方式完成,处理器将需要一组用于签名操作的指令(这只会影响零,符号和溢出标志),另一组用于无符号操作(影响零和进位)