装配 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 值的寄存器。
我在使这个名为 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 重新加载
- 最好在 Shifter 过程结束时反转
CL
的开关。 - 保留任何没有 return 值的寄存器。
ECX