提问人:Abdulkadir Arslan 提问时间:8/30/2022 最后编辑:Peter CordesAbdulkadir Arslan 更新时间:8/31/2022 访问量:227
为什么按位布尔和移位运算在 CPU 架构中称为逻辑运算?
Why are bitwise boolean and shift operations called logical operations in CPU architecture?
问:
这张图片来自《计算机组织与设计》一书:
如您所见,左侧列被标记为“逻辑操作”,但显示的操作都是按位的。传统上,和 称为逻辑运算符,而 和 称为按位运算符。&&
||
&
|
他们用以下句子介绍表格:
因此,操作被添加到 编程语言和指令集架构,以简化其他 事物,将位打包和解包成文字。这些指令称为 逻辑运算。图 2.8 显示了 C、Java 和 RISC-V 中的逻辑操作。
你认为他们为什么要为 和 写逻辑运算符?&
|
答:
在计算机体系结构术语中,对数字的运算是“算术”(例如 add/sub/mul/div)。
对位的操作通常称为“逻辑”或“逻辑指令”,如“布尔逻辑”。(算术右移,以符号位的副本为单位,通常与其他移位组合为逻辑,即按位操作。
例如,在维基百科的 ALU(算术逻辑单元)文章中,编写它的编辑说操作码“指定了 ALU 要执行的所需算术或逻辑运算”。
Agner Fog 的每条指令性能测试结果的指令表将整数指令分为移动/算术/逻辑(按位、移位、位测试)/控制传输/字符串(是的,x86 很时髦)/其他(如和)。同样,FP 算术与逻辑(是的,SIMD 指令集为 FP/SIMD 寄存器提供按位布尔指令)。setcc
leave
cpuid
CPU 没有 C 和 Java 意义上的“逻辑”运算(即使对于整数输入也没有考虑短路求值),因此在计算机体系结构的上下文中,“逻辑”与软件中的含义不同,在软件中,它们需要将按位与逻辑运算符的更复杂操作区分开来。
我假设计算机体系结构的使用更旧。&&
||
你的书并不是说在C或Java中是一个“逻辑操作器”,而是说指令在计算机体系结构的意义上执行一个“逻辑操作”。相应的 C 和 Java 运算符是按位运算符。&
and
&
机器代码没有运算符,只有指令。(汇编语言对汇编时常量有操作,就像作为另一种编写方式一样。但这纯粹是汇编程序的一个功能,而不是ISA参考手册将讨论的内容。andi x1, x2, (1<<4)-1
andi x1, x2, 0x0f
我用谷歌搜索时出现的随机教程或指南中的使用引用computer architecture logical operations
https://www.tutorialspoint.com/what-are-logic-micro-operations-in-computer-architecture“逻辑运算是在寄存器中保存的位上实现的二进制微运算。这些操作独立处理每个位,并将它们创建为二进制变量。"
https://www.sciencedirect.com/topics/computer-science/logical-operation 引用了一些书籍,例如Harris & Harris: Digital Design and Computer Architecture, 2016 - “ARM 逻辑运算包括 AND、ORR (OR)、EOR (XOR) 和 BIC(位清除)”。同一位作者对MIPS按位指令也写了同样的文章。
https://www.techtarget.com/whatis/definition/arithmetic-logic-unit-ALU
上一个:使用递归函数求解布尔方程
下一个:AB+C是什么意思?
评论
srl
sra