首页
社区
课程
招聘
[旧帖] [原创]关于取模运算的一点小发现 0.00雪花
发表于: 2007-12-30 10:01 4532

[旧帖] [原创]关于取模运算的一点小发现 0.00雪花

2007-12-30 10:01
4532
本人菜鸟一只,早上按惯例阅读反汇编代码进行晨练,测试环境是VC++6.0,测试到取模运算时发现了一个很有趣的现象,当余数为1或者2的时候(0没有意义)取余运算的反汇编代码如下

00401058   mov         edx,dword ptr [ebp-4]
0040105B   add         edx,dword ptr [ebp-8]
0040105E   and         edx,80000001h
00401064   jns         main+5Bh (0040106b)
00401066   dec         edx
00401067   or          edx,0FEh
0040106A   inc         edx
0040106B   test        edx,edx
0040106D   jne         main+78h (00401088)

当大于2的时候如下:
00401058   mov         eax,dword ptr [ebp-4]
0040105B   add         eax,dword ptr [ebp-8]
0040105E   cdq
0040105F   mov         ecx,5
00401064   idiv        eax,ecx
00401066   test        edx,edx
00401068   jne         main+73h (00401083)

测试原代码如下:
#include "stdio.h"
main()
{
    int i,j;
    for(i=0;i<8;i++)
    {
       for(j=0;j<8;j++)
       if((i+j)%1==0)
       printf("%c%c",219,219);
     else
       printf(" ");
       printf("\n");
    }
}
是不是很有意思啊,希望对刚入门的同学在阅读代码时有帮助,另外请教各位高人,第一段反汇编的代码我也不理解,是不是编译器优化后的代码啊,也请高人解释一下。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册