【问题标题】:SAL/SAR vs SHR/SAR in assembly 8086装配 8086 中的 SAL/SAR 与 SHR/SAR
【发布时间】:2016-06-27 16:21:21
【问题描述】:

我正在学习汇编语言(特定于 x86)。我明白了 SALSHL 从这里Difference between SHL and SAL in 80x86 以类似的方式工作(清除 lsb 并将 msb 传送到 CF)。

考虑到SHRSAR 的操作方式不同(后者保持msb 不变)。

我想对为什么 算术右移 SAR 的功能定义不同于 右移 @ 有一个清晰的概念987654327@ 但同时 SHLSAL 保持类似的功能?

【问题讨论】:

  • 有符号和无符号值的右移是不同的。左移不是。我相信SHLSAL 实际上是一条有两个名字的指令。
  • “我相信 SHL 和 SAL 实际上是一条有两个名称的指令。” 正确。就像JEJZ
  • @user3528438:这并不能真正解释它,除非您打算以与其他平台类似的方式实现 C。 C 标准特别保留了有符号值实现定义的行为的右移。它可能会或可能不会符号扩展,并且使用 shr 将是一个完全有效的 C 实现。由于sar 存在,使用它更有意义。有可能制作一个使用起来极其不友好并且违反许多代码中做出的许多假设的符合标准的 C 实现。
  • @PeterCordes 这就是优秀建筑师和混蛋之间的区别。

标签: assembly x86-16 opcode


【解决方案1】:

因为在左移的情况下没有任何东西可以保留。在那些左移改变符号的情况下(你可能想以某种方式阻止),没有溢出的结果将不适合寄存器(这是自动的 - 如果它确实适合,那么它就不会溢出到首先)。所以无论如何你都无能为力。

但右移不能溢出,它会使数字变小(或保持不变)。所以现在你可以选择,我是否保持顶部不变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    相关资源
    最近更新 更多