【发布时间】:2016-06-27 16:21:21
【问题描述】:
我正在学习汇编语言(特定于 x86)。我明白了
SAL 和 SHL 从这里Difference between SHL and SAL in 80x86 以类似的方式工作(清除 lsb 并将 msb 传送到 CF)。
考虑到SHR 和SAR 的操作方式不同(后者保持msb 不变)。
我想对为什么 算术右移 SAR 的功能定义不同于 右移 @ 有一个清晰的概念987654327@ 但同时 SHL 和 SAL 保持类似的功能?
【问题讨论】:
-
有符号和无符号值的右移是不同的。左移不是。我相信
SHL和SAL实际上是一条有两个名字的指令。 -
“我相信 SHL 和 SAL 实际上是一条有两个名称的指令。” 正确。就像
JE和JZ。 -
@user3528438:这并不能真正解释它,除非您打算以与其他平台类似的方式实现 C。 C 标准特别保留了有符号值实现定义的行为的右移。它可能会或可能不会符号扩展,并且使用
shr将是一个完全有效的 C 实现。由于sar存在,使用它更有意义。有可能制作一个使用起来极其不友好并且违反许多代码中做出的许多假设的符合标准的 C 实现。 -
@PeterCordes 这就是优秀建筑师和混蛋之间的区别。