70,037
社区成员
发帖
与我相关
我的任务
分享
squ = 90625 * 90625;
对应的反汇编代码是
008018BE mov dword ptr [squ],0E986C401h
008018C5 mov dword ptr [ebp-8],0FFFFFFFFh
可以看出,90625*90625的值应该是0x1E986C401,第一行汇编指令的作用是把0x1E986C401的低4个字节即0xE986C401值放到squ的低4个字节中去,因为E的最高位是1,所以第二行汇编指令把0xFFFFFFFF作为补充放到squ的高4个字节上去,此时squ的值是0xFFFFFFFFE986C401
而如果C代码是
squ = (long long)90625 * 90625;
此时对应的汇编指令是
005518BE mov dword ptr [squ],0E986C401h
005518C5 mov dword ptr [ebp-8],1
第一行汇编代码没变,第二行是把0x1E986C401中多出来的1拷贝到squ的低4个字节中去,即此时squ的值是0x00000001E986C401