我在使用名为DoLeftShift的此过程正常工作时遇到了一些麻烦。 Shifter程序正在运行,我知道因为我有测试值并且它们都有效,所以问题出在DoLeftShift。
对于禁用的移位器,我得到所有0或者所有1,它应该是最初放入的二进制文件。启用Shift和Shift指令也不起作用。
编辑:删除了代码,因为它是家庭作业的一部分。
答案 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
)返回。
ECX
,然后再致电 Shifter CL
的切换。