作为一个疯狂的汇编C/C++爱好者,写完代码看看被编译成什么自然很好奇,

打开反汇编调试,Debug给的东西很乱:

比如断点指令一个劲填充栈区防止程序跑飞了。

int main(void)

{

00351350 push ebp

00351351 mov ebp,esp

00351353 sub esp,160h

00351359 push ebx

0035135A push esi

0035135B push edi

0035135C lea edi,[ebp-160h]

00351362 mov ecx,58h

00351367 mov eax,0CCCCCCCCh

0035136C rep stos dword ptr es:[edi]还比如程序运行完成后要清理环境:

return 0;

00351488 xor eax,eax

}

0035148A pop edi

0035148B pop esi

0035148C pop ebx

0035148D mov esp,ebp

0035148F pop ebp

00351490 ret

--- No source file ---------------------

00351491 int 3

这样总是给人一种分心的感觉

所以打开看看Release 版本看看也是很自然的原因。

因为main函数内部的操作对外界没有影响,所以被浓缩为下面两句话也是可以理解的:

01381000 xor eax,eax

}

01381002 ret

但是问题却来了,怎么看编译结果呢?(在工程名后点属性,跟着蓝线紫线走)

点确定继续

再次编译,是不是比Debug版本干净多了呢?

--- d:\cpp_loves_asm\2_arithmetic\2_arithmetic.cpp -----------------------------

///

// 2_arithmetic.cpp

//

// This is a deliberate to demonstrate how

// C++ and ASM as well as C are connected.

//

// Mighten Dai

// 22:32

// Jul 13, 2015

//

///

// ---Part 2: Arithmetic operations

#include

using namespace std;

int main(void)

{

00FA1000 push ebp

00FA1001 mov ebp,esp

00FA1003 sub esp,38h

// the unsigned integer

unsigned int ui_arg_1;

unsigned int ui_arg_2;

unsigned int ui_result = 0;

00FA1006 mov dword ptr [ui_result],0

// the signed integer

signed int si_arg_1;

signed int si_arg_2;

signed int si_result = 0;

00FA100D mov dword ptr [si_result],0

// the floating point number

float f_arg_1;

float f_arg_2;

float f_result = 0;

00FA1014 fldz

00FA1016 fstp dword ptr [f_result]

// the others types

long intli_test = 0;

00FA1019 mov dword ptr [li_test],0

long long intlli_test = 0;

00FA1020 mov dword ptr [lli_test],0

00FA1027 mov dword ptr [ebp-1Ch],0

boolb_test = 0;

00FA102E mov byte ptr [b_test],0

charc_test = 0;

00FA1032 mov byte ptr [c_test],0

///

// the unsigned integer operations

ui_arg_1 = 10;

00FA1036 mov dword ptr [ui_arg_1],0Ah

ui_arg_2 = 5;

00FA103D mov dword ptr [ui_arg_2],5

ui_result = ui_arg_1 + ui_arg_2;

00FA1044 mov eax,dword ptr [ui_arg_1]

00FA1047 add eax,dword ptr [ui_arg_2]

00FA104A mov dword ptr [ui_result],eax

ui_result = ui_arg_1 - ui_arg_2;

00FA104D mov ecx,dword ptr [ui_arg_1]

00FA1050 sub ecx,dword ptr [ui_arg_2]

00FA1053 mov dword ptr [ui_result],ecx

ui_result = ui_arg_1 * ui_arg_2;

00FA1056 mov edx,dword ptr [ui_arg_1]

00FA1059 imul edx,dword ptr [ui_arg_2]

00FA105D mov dword ptr [ui_result],edx

ui_result = ui_arg_1 / ui_arg_2;

00FA1060 mov eax,dword ptr [ui_arg_1]

00FA1063 xor edx,edx

00FA1065 div eax,dword ptr [ui_arg_2]

00FA1068 mov dword ptr [ui_result],eax

ui_result = ui_arg_1 % ui_arg_2;

00FA106B mov eax,dword ptr [ui_arg_1]

00FA106E xor edx,edx

00FA1070 div eax,dword ptr [ui_arg_2]

00FA1073 mov dword ptr [ui_result],edx

///

// the signed integer operations

si_arg_1 = -10;

00FA1076 mov dword ptr [si_arg_1],0FFFFFFF6h

si_arg_2 = -5;

00FA107D mov dword ptr [si_arg_2],0FFFFFFFBh

si_result = si_arg_1 + si_arg_2;

00FA1084 mov eax,dword ptr [si_arg_1]

00FA1087 add eax,dword ptr [si_arg_2]

00FA108A mov dword ptr [si_result],eax

si_result = si_arg_1 - si_arg_2;

00FA108D mov ecx,dword ptr [si_arg_1]

00FA1090 sub ecx,dword ptr [si_arg_2]

00FA1093 mov dword ptr [si_result],ecx

si_result = si_arg_1 * si_arg_2;

00FA1096 mov edx,dword ptr [si_arg_1]

00FA1099 imul edx,dword ptr [si_arg_2]

00FA109D mov dword ptr [si_result],edx

si_result = si_arg_1 / si_arg_2;

00FA10A0 mov eax,dword ptr [si_arg_1]

00FA10A3 cdq

00FA10A4 idiv eax,dword ptr [si_arg_2]

00FA10A7 mov dword ptr [si_result],eax

si_result = si_arg_1 % si_arg_2;

00FA10AA mov eax,dword ptr [si_arg_1]

00FA10AD cdq

00FA10AE idiv eax,dword ptr [si_arg_2]

00FA10B1 mov dword ptr [si_result],edx

// the floating point number operations

f_arg_1 = 2.43E+7; // 2.43 times 10 to plus 7

00FA10B4 fld dword ptr [__real@4bb964f0 (0FA20E8h)]

00FA10BA fstp dword ptr [f_arg_1]

f_arg_2 = 1.62E-5; // 1.62 times 10 to minus 5

00FA10BD fld dword ptr [__real@3787e53c (0FA20E4h)]

00FA10C3 fstp dword ptr [f_arg_2]

f_result = f_arg_1 + f_arg_2;

00FA10C6 fld dword ptr [f_arg_1]

00FA10C9 fadd dword ptr [f_arg_2]

00FA10CC fstp dword ptr [f_result]

f_result = f_arg_1 - f_arg_2;

00FA10CF fld dword ptr [f_arg_1]

00FA10D2 fsub dword ptr [f_arg_2]

00FA10D5 fstp dword ptr [f_result]

f_result = f_arg_1 * f_arg_2;

00FA10D8 fld dword ptr [f_arg_1]

00FA10DB fmul dword ptr [f_arg_2]

00FA10DE fstp dword ptr [f_result]

f_result = f_arg_1 / f_arg_2;

00FA10E1 fld dword ptr [f_arg_1]

00FA10E4 fdiv dword ptr [f_arg_2]

00FA10E7 fstp dword ptr [f_result]

// the others types operations

li_test = 3000000000;

00FA10EA mov dword ptr [li_test],0B2D05E00h

lli_test = 30000000000000;

00FA10F1 mov dword ptr [lli_test],0EB57E000h

00FA10F8 mov dword ptr [ebp-1Ch],1B48h

b_test = 0;

00FA10FF mov byte ptr [b_test],0

b_test = 1;

00FA1103 mov byte ptr [b_test],1

c_test = 'A';

00FA1107 mov byte ptr [c_test],41h

return 0;

00FA110B xor eax,eax

}

00FA110D mov esp,ebp

00FA110F pop ebp

00FA1110 ret

c语言关掉编译优化,C/C++代码被 VS 2010 优化掉了,如何关闭优化?相关推荐

  1. 编译《自制编程语言 基于c语言》 郑钢 书中代码 idea

    编译<自制编程语言 基于c语言> 郑钢 书中代码 文章目录 编译<自制编程语言 基于c语言> 郑钢 书中代码 编译器 代码获取 正规途径 其他途径 运行 hello world ...

  2. -i 可以编译添加多个_C语言的编译过程

    大家对C语言的编译过程可能有个大致的理解,但是,详细到每一步具体都干了啥,可能有的人不是很清楚啦,也包括我,要不然,就不会做笔记了,哈哈... 0.主要步骤 ① 步骤 编写源程序(.c) → 预处理 ...

  3. C 语言编程 — 结构化程序流的汇编代码与 CPU 指令集

    目录 文章目录 目录 文章目录 为什么要保留汇编语言 顺序程序流 条件程序流 循环程序流 函数调用栈的工作原理 文章目录 <C 语言编程 - GCC 工具链> <C 语言编程 - 程 ...

  4. python语言采用编译执行方式_Python程序的执行过程 解释型语言和编译型语言

    我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言,那么生成的*.pyc文件是什么呢?c应 ...

  5. C语言的编译链接过程详解

    学过C语言的人都应该知道,我们所编辑的C语言程序是不能直接放到机器上运行的,它只不过是一个带".c"后缀的文件(也称为源代码)而已,需要经过一定的处理才能转换成机器上可运行的可执行 ...

  6. 解析性语言与编译性语言优劣对比

    高级编程语言分为解析语言和编译性语言,各自代表有Js,python 以及c/c++,golang等,java某种意义上说既是解析语言也是编译性语言. 以下是解析语言与编译性语言的一些优劣对比: 1:效 ...

  7. c语言哪个编译软件能够将整个工程自动生成调用图_这10个C语言技巧让初学者少走180天弯路!...

    硬件设计师最常见的工作内容是通过写代码来测试硬件.这10个C语言技巧(C语言仍然是常见的选择)可以帮助设计师避免因基础性错误而导致某些缺陷的产生并造成维护方面的困扰. 技巧 1:不要使用"G ...

  8. GCC如何编译内嵌汇编代码

    内核代码绝大部分使用C  语言编写,只有一小部分使用汇编语言编写,例如与特定体系结构相关的代码和对性能影响很大的代码.GCC提供了内嵌汇编的功能,可以在C代码中直接内嵌汇编语言语句,大大方便了程序设计 ...

  9. C语言的编译链接过程的介绍

    发布时间: 2012-11-08 10:17    作者: 未知    来源: 51Testing软件测试网采编 字体:  小  中  大  | 上一篇 下一篇 | 打印  | 我要投稿  | 推荐标 ...

最新文章

  1. TricycleGAN:基于形状先验的无监督图像合成和分割
  2. 根据年月来判断月里天数
  3. 一份火爆AI圈的高分深度学习入门讲义,李航、马少平领衔多位科学家力荐!...
  4. the first weekend of ChengDu
  5. 有效用例分析阅读笔记一
  6. Beej网络编程指南《三》
  7. java招聘 试题_JAVA现场招聘考试题(一)
  8. java异常—— finally 子句+带资源的 try语句
  9. java的define,关于预处理器:Java中的#define
  10. with pdo mysql_如何在PHP下开启PDO MySQL的扩展
  11. Ferris教程学习笔记:js示例2.11 图片列表:鼠标移入/移出改变图片透明度
  12. html5注册阿里巴巴作业,面试分享:2018阿里巴巴前端面试总结(题目+答案)
  13. 算法:91. 解码方法
  14. Photoshop CC 2018 软件安装包+破解教程(转)
  15. 测试金士顿固态硬盘软件,金士顿固态硬盘优化工具(Kingston Toolbox)
  16. 爬虫----记录某新闻详情页app逆向过程(app逆向初学第一次实战)
  17. android svn上传代码,Android应用开发之项目上传svn(Android Studio)
  18. 没有GPS模块无人机无法解锁解决方法测试及其他无法解锁APM疑难杂症
  19. CentOS查看端口
  20. c语言编写2阶booth算法,关于Booth算法的C语言实现

热门文章

  1. HTTP强缓存和协议缓存
  2. http的一个在线工具(推荐)
  3. php实现仿淘票票订票网站
  4. c语言结账程序设计,c语言餐饮结账管理系统设计.doc
  5. 微信小程序敏感词过滤
  6. 如何驯服野生论文 | EndNote
  7. python爬取新浪新闻首页_Python爬虫学习:微信、知乎、新浪等主流网站的模拟登陆爬取方法...
  8. Core Bluetooth框架之一:Central与Peripheral
  9. 现在学Python怎么样?还有发展前景吗?
  10. 三、使用buildroot制作mke2fs (mkfs.ext2、mkfs.ext3、mkfs.ext4)