- 1、本文档共41页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序的运行方式.ppt
Professional Programming -------Secrets behind the code 上机时常问的问题 为什么要先点击“编译”,再“运行”? 为什么局部变量和全局变量有不同的生命周期?(或为什么这个变量只能在这个函数内引用?) 为什么VB不用编译直接运行即可? 为什么我的程序编译不了? … … …. … … 为什么… … 编程不仅仅是只知道语法规则 必须了解程序背后的秘密 ----计算机的系统结构 ----计算机程序的运行方式 ----编译原理 …………………. outline 程序的编译流程 程序与计算机体系结构 程序的运行方式 程序的调试(GDB) POJ 例子 QA outline 程序的编译流程 程序与计算机体系结构 程序的运行方式 程序的调试(GDB) POJ 例子 QA 程序的编译流程 .c文件经过预处理(gcc 时带上 -E选项)产生.i文件…… ? ? ???? 预处理??????? 编译????????? 汇编????????????? 连接 .c------------.i------------.s------------.o------------a.out ?????? -E????????? ?? -S??????????? -c??????????????? A Example 源程序 1、预处理 预处理:使用-E参数输出文件的后缀为“.cpp” gcc –E –o gcctest.cpp gcctest.c 使用wc命令比较预处理后的文件与源文件,可以看到两个文件的差异 2、编译成汇编代码 预处理文件?汇编代码1)使用-x参数说明根据指定的步骤进行工作,cpp-output指明从预处理得到的文件开始编译2)使用-S说明生成汇编代码后停止工作 gcc –x cpp-output –S –o gcctest.s gcctest.cpp 也可以直接编译到汇编代码 gcc –S gcctest.c 3、编译成目标代码 汇编代码?目标代码 gcc –x assembler –c gcctest.s 直接编译成目标代码 gcc –c gcctest.c 使用汇编器生成目标代码 as –o gcctest.o gcctest.s 4、编译成执行代码 目标代码?执行代码 gcc –o gcctest gcctest.o 直接生成执行代码 gcc –o gcctest gcctest.c outline 程序的编译流程 程序与计算机体系结构 程序的运行方式 程序的调试(GDB) POJ 例子 QA 程序与计算机体系结构 图灵机 磁带、控制器以及读写磁头三部分组成 outline 程序的编译流程 程序与计算机体系结构 程序的运行方式 程序的调试(GDB) POJ 例子 QA 程序的运行方式 以汇编代码为例 gcc –S gcctest.s gcctest.c .file gcctest.c .section .rodata .LC0: .string Hello World! .LC1: .string i=j+1=%d\n .text .globl main .type main, @function main: leal 4(%esp), %ecx andl $-16, %esp pushl -4(%ecx) pushl %ebp movl %esp, %ebp pushl %ecx subl $36, %esp movl $0, -12(%ebp) movl $0, -8(%ebp) movl -8(%ebp), %eax addl $1, %eax movl %eax, -12(%ebp) movl $.LC0, (%esp) call puts movl -12(%ebp), %eax movl %eax, 4(%esp) movl $.LC1, (%esp) call printf movl $0, %eax addl $36, %esp
文档评论(0)