装配 32 位左移器

Assembly 32 bit left shifter

我在使这个名为 DoLeftShift 的过程正常工作时遇到了一些问题。 Shifter 程序正在运行,我知道因为我有测试值并且它们都可以运行,所以问题出在 DoLeftShift 中。

对于禁用的移位器,我得到全 0 或全 1,它应该与最初放入的二进制文件相同。启用 Shift 和 Shift 指令也不起作用。

编辑:代码已删除,因为它是家庭作业的一部分。

mov ecx, $parm2         ;ecx = enable/disable bit
call Shifter            ;call Shifter procedure

当您调用 Shifter 过程时,enable/disable 设置得很好(来自 $parm2)。

但是当您从 loopTop 循环中重复调用 Shifter 过程时,ECX 寄存器不再保存正确信息!

Shifter 过程从不保留任何寄存器,因此 CL 寄存器 return 处于切换状态 (xor cl, 1 ;cl = NOT cl)。

解决方案:

  • 每次调用 Shifter
  • 之前从 $parm2 重新加载 ECX
  • 最好在 Shifter 过程结束时反转 CL 的开关。
  • 保留任何没有 return 值的寄存器。