鱼C论坛

 找回密码
 立即注册
查看: 2880|回复: 2

谁可以帮个忙,把用c写的函数翻译成汇编

[复制链接]
发表于 2016-3-30 09:41:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如题,函数为:Int Sum(int a,int b){
                                int c;
                                c=a+b;
                                return c;
                        }
多谢了 我就想学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-23 13:24:45 | 显示全部楼层
看书刚学到的方法,用VS写一个c程序,然后编译,逐句调试,再点鼠标右键,选“转到反汇编”,就可以看到汇编的代码了。
  1. int Sum(int a,int b)
  2. {
  3. 00991420  push        ebp  
  4. 00991421  mov         ebp,esp  
  5. 00991423  sub         esp,0CCh  
  6. 00991429  push        ebx  
  7. 0099142A  push        esi  
  8. 0099142B  push        edi  
  9. 0099142C  lea         edi,[ebp-0CCh]  
  10. 00991432  mov         ecx,33h  
  11. 00991437  mov         eax,0CCCCCCCCh  
  12. 0099143C  rep stos    dword ptr es:[edi]  
  13.         int c;
  14.         c=a+b;
  15. 0099143E  mov         eax,dword ptr [a]  
  16. 00991441  add         eax,dword ptr [b]  
  17. 00991444  mov         dword ptr [c],eax  
  18.         return c;
  19. 00991447  mov         eax,dword ptr [c]  
  20. }
  21. 0099144A  pop         edi  
  22. 0099144B  pop         esi  
  23. 0099144C  pop         ebx  
  24. 0099144D  mov         esp,ebp  
  25. 0099144F  pop         ebp  
  26. 00991450  ret  
复制代码

  1. int main()
  2. {
  3. 009913A0  push        ebp  
  4. 009913A1  mov         ebp,esp  
  5. 009913A3  sub         esp,0CCh  
  6. 009913A9  push        ebx  
  7. 009913AA  push        esi  
  8. 009913AB  push        edi  
  9. 009913AC  lea         edi,[ebp-0CCh]  
  10. 009913B2  mov         ecx,33h  
  11. 009913B7  mov         eax,0CCCCCCCCh  
  12. 009913BC  rep stos    dword ptr es:[edi]  
  13.         int x;
  14.         x = Sum(3,2);
  15. 009913BE  push        2  
  16. 009913C0  push        3  
  17. 009913C2  call        @ILT+270(_Sum) (991113h)  
  18. 009913C7  add         esp,8  
  19. 009913CA  mov         dword ptr [x],eax  
  20.         printf("%d",x);
  21. 009913CD  mov         esi,esp  
  22. 009913CF  mov         eax,dword ptr [x]  
  23. 009913D2  push        eax  
  24. 009913D3  push        offset string "%d" (99573Ch)  
  25. 009913D8  call        dword ptr [__imp__printf (99824Ch)]  
  26. 009913DE  add         esp,8  
  27. 009913E1  cmp         esi,esp  
  28. 009913E3  call        @ILT+310(__RTC_CheckEsp) (99113Bh)  
  29.         getch();
  30. 009913E8  call        @ILT+130(__getch) (991087h)  
  31. }
  32. 009913ED  xor         eax,eax  
  33. 009913EF  pop         edi  
  34. 009913F0  pop         esi  
  35. 009913F1  pop         ebx  
  36. 009913F2  add         esp,0CCh  
  37. 009913F8  cmp         ebp,esp  
  38. 009913FA  call        @ILT+310(__RTC_CheckEsp) (99113Bh)  
  39. 009913FF  mov         esp,ebp  
  40. 00991401  pop         ebp  
  41. 00991402  ret  
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-24 18:18:34 | 显示全部楼层
像这样写
gcc 1.c -S 1.s
就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-3 09:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表