装配32位左移位器

时间:2017-10-23 09:56:59

标签: assembly x86 masm irvine32

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

对于禁用的移位器,我得到所有0或者所有1,它应该是最初放入的二进制文件。启用S​​hift和Shift指令也不起作用。

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

1 个答案:

答案 0 :(得分:2)

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

当你调用 Shifter 程序时,启用/禁用设置得很好(来自$ parm2)。

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

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

解决方案:

  • 每次从$ parm2重新加载ECX,然后再致电 Shifter
  • Shifter 程序结束时,最好切换CL的切换。
  • 保留所有未返回值的寄存器。