为什么有些CPU有不同的指令来执行带符号和未签名的操作? [英] Why do some CPUs have different instructions to do signed and unsigned operations?

查看:13
本文介绍了为什么有些CPU有不同的指令来执行带符号和未签名的操作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我们有以下二进制数及其表示法:

| bin | unsigned | signed   |
|:---:|----------|----------|
| 110 | 6        | -2       |
| 111 | 7        | -1       |
现在不管是否有符号,111 + 110 = 1101 现在我可以将结果1101解释为有符号或无符号,即:

| bin  | unsigned | signed   |
|:----:|----------|----------|
| 1101 | 13       | -3       |

哪个与小数运算匹配:

6+7 = 13
-1-2 = -3
signed additionunsigned addition之间没有差别。那么,为什么CPU会有不同的电路/指令来进行这种操作呢?

推荐答案

因为2的补码加/减与无符号加/减是相同的二进制运算。但对于比较(以及除法和加法乘法)来说,将MSB解释为符号位或不将其解释为符号位很重要。

有些CPU只有一条cmp指令来设置所有标志,然后让分支指令检查特定的标志条件(谓词)。其他没有标志/条件代码的CPU(如MIPS和RISC-V)在其比较进入寄存器指令中需要谓词。

x86/ARM上的SIMD比较指令也是比较到寄存器中的指令,不设置多个不同的标志,因此它们也将谓词作为比较指令的一部分(如cmpps接受带有谓词的紧跟字节,或者对于整数有pcmpgtd/pcmpeqd。)

这篇关于为什么有些CPU有不同的指令来执行带符号和未签名的操作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆