我正在实现一个自定义的16位cpu(在Verilog中)。如果我需要实现溢出标志来处理签名比较,那么我会遇到麻烦。签名比较中需要溢出标志吗?
在我目前的执行情况,我只检查零的结果和标志位来确定结果的比较:
when comparing x to y the ALU calculates: x - y (2's compl)
If the sign bit is set and the result is not zero y > x
If the sign bit is not set and the result is not zero x > y
我不使用溢出标志来确定结果的比较。我已经为x和y尝试了许多不同的值,并且它们都是正确的。
可以签名比较是否实现没有溢出标志?如果不是,你能否给我x和y的值,以这种方式给出错误的结果?
你试过了什么样的数字? – EOF
@EOF f.e. 0xa000(-24k)和0xb000(-20k)。和0xf000,0xff00,0x8000,0x7000,0x8400,0x0f00,0x1700,0xf000 ... – ErwinM
的大多数组合您是否尝试过'INT_MIN'('0x8000')和'1'('0x1')? 'INT_MIN - 1'将溢出并创建'INT_MAX'('0x7FFF'),它非零且没有符号位设置,根据您的表,它会指示INT_MIN> 1。 – EOF