Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly x86组件右移操作员SHR的副作用?_Assembly_X86_Bit Shift - Fatal编程技术网

Assembly x86组件右移操作员SHR的副作用?

Assembly x86组件右移操作员SHR的副作用?,assembly,x86,bit-shift,Assembly,X86,Bit Shift,我正在使用ASM调试器ollydbg跟踪一个程序,我遇到了以下代码段,这是一个循环段: CPU Disasm Address Hex dump Command Comments 007D05EC |. 33C9 XOR ECX,ECX 007D05EE |. 8BFF MOV EDI,EDI 007D05F0 |> 8B54B4 10 /MOV E

我正在使用ASM调试器ollydbg跟踪一个程序,我遇到了以下代码段,这是一个循环段:

CPU Disasm
Address   Hex dump          Command                                  Comments
007D05EC  |.  33C9          XOR ECX,ECX
007D05EE  |.  8BFF          MOV EDI,EDI
007D05F0  |>  8B54B4 10     /MOV EDX,DWORD PTR SS:[ESI*4+ESP+10]
007D05F4  |.  8BFA          |MOV EDI,EDX
007D05F6  |.  0FAFFE        |IMUL EDI,ESI
007D05F9  |.  8BDA          |MOV EBX,EDX
007D05FB  |.  D3EB          |SHR EBX,CL
007D05FD  |.  03F8          |ADD EDI,EAX
007D05FF  |.  83C1 10       |ADD ECX,10
007D0602  |.  83C6 01       |ADD ESI,1
007D0605  |.  03DF          |ADD EBX,EDI
007D0607  |.  33DA          |XOR EBX,EDX
007D0609  |.  81F9 B0000000 |CMP ECX,0B0
007D060F  |.  8BC3          |MOV EAX,EBX
007D0611  |.^ 7C DD         \JL SHORT 007D05F0
我可以跟踪并得到其他操作符所做的事情,当我跟踪它时,它是有意义的。但是SHR EBX,CL对我来说没有意义

//Shouldn't in asm
SHR EBX, CL
//be the same as doing this in c/c++?
//that's how it read when I checked the asm reference anyway
ebx >>= CL;
但我在跟踪时看到的是,如果循环迭代是奇数的,则丢弃LSB并将MSB移到它的位置。如果是偶数,则ebx不变。每次循环迭代,ecx寄存器的变化如下:

**ecx**
0x0000  -- loop 0
0x0010  -- loop 1
0x0020  -- loop 2
..
0x00A0  -- loop 10
我所期望看到的是在第二或第三个循环之后,ebx将始终为零,因为0x20已经移位了32位

我有点困惑,有人能解释一下吗


谢谢

以下是我从说明书中读到的内容:

在这两种情况下,大于31的移位计数以32模执行


回答您的问题?

以下是我从说明中读到的内容:

在这两种情况下,大于31的移位计数以32模执行


回答你的问题?

谢谢,我想这就是我看到的行为差异的原因。Mod 32将导致SHR指令在0x00和0x10之间的移位之间振荡。谢谢,我认为这解释了我看到的行为差异。Mod 32将导致SHR指令在0x00和0x10的移位之间振荡。