Assembly 组装32位左移位器
我在让这个名为DoLeftShift的程序正常工作时遇到了一些问题。换档程序正在工作,我知道,因为我有测试值,它们都工作,所以问题出在DoLeftShift 对于禁用的移位器,我得到所有0或所有1,其中它应该是最初放入的相同二进制文件。启用换档和换档指令也不起作用 编辑:代码已删除,因为它是家庭作业的一部分 调用移位器过程时,启用/禁用设置得很好(来自$parm2) 但是,当您从loopTop循环中重复调用移位器过程时,Assembly 组装32位左移位器,assembly,x86,masm,irvine32,Assembly,X86,Masm,Irvine32,我在让这个名为DoLeftShift的程序正常工作时遇到了一些问题。换档程序正在工作,我知道,因为我有测试值,它们都工作,所以问题出在DoLeftShift 对于禁用的移位器,我得到所有0或所有1,其中它应该是最初放入的相同二进制文件。启用换档和换档指令也不起作用 编辑:代码已删除,因为它是家庭作业的一部分 调用移位器过程时,启用/禁用设置得很好(来自$parm2) 但是,当您从loopTop循环中重复调用移位器过程时,ECX寄存器不再保存正确的信息 移位器过程从不保留任何寄存器,因此CL寄存器
ECX
寄存器不再保存正确的信息
移位器过程从不保留任何寄存器,因此CL
寄存器以切换状态返回(xor CL,1;CL=NOT CL
)
解决方案:
- 每次调用移位器之前,从$parm2重新加载
ECX
- 最好在换档杆程序结束时反转
CL
- 保留所有不返回值的寄存器
mov ecx, $parm2 ;ecx = enable/disable bit
call Shifter ;call Shifter procedure