通过搭建一个精简的C语言开发环境了解一个C程序的执行过程
一、如何搭建一个精简的C语言开发环境
准备:下载TC2.0,并解压,比如说“d:\tc2.0\tc”目录
1、在C盘建立一个目录minic
c:\ md minic
2、从解压的目录中将以下文件拷贝到c:\minic中
其中TC.EXE是在d:\tc2.0\tc目录下,而COS.OBJ、EMU.LIB、MATHS.LIB、GRAPHICS.LIB、CS.LIB是在D:\tc2.0\tc\lib目录中的。
3、软件配置
选择菜单项“Options”中的“Directories”选项,对TC的工作路径进行设置,将所有的路径都设置为“c:\minic”。然后用“Save options”选项保存设置。
生成的配置文件
二、从中我们能学到什么
尝试去搭建一个最简的C语言开发环境,并不是说就让我们去用这个环境(我不建议)。毕竟功能齐备的集成开发环境能让我们的学习更有效率。但是,做这样的工作的意义还是有的,我认为有以下两点。
(1)认识到C语言开发环境的必备部分
(2)尝试了解我们应用程序的构成和执行过程(从库文件来看)
(3)了解C语言开发环境的输入输出目录(从“步骤3、软件配置”中来看)
对于意义(1),从步骤2中很容易明白。对于意义(3),它让我们知道c程序的头文件目录、库文件目录以及工程文件输出目录都是可以设置的。但是,这在VC6.0这样现代化的集成开发环境中却不曾发现。
意义(2)是做这个工作最重要的部分,到底我们的C程序是如何和库文件(.obj、.lib)结合生成可执行程序呢?又是如何执行程序呢?
1、程序连接过程
首先,编译器将我们写的C程序编译成.obj文件。然后,连接器将这个.obj文件和系统库文件(.obj)连接到一起生成一个可执行程序。不管是连接哪一个程序,COS.OBJ、EMU.LIB、MATHS.LIB、GRAPHICS.LIB、CS.LIB这些库是必须的。
2、程序的执行过程
①c0s.obj里的程序先运行,进行相关的初始化。如申请资源,设置ds,ss等相关寄存器
②c0s.obj里的程序调用main函数,从此用户程序开始运行
③用户程序运行结束从main程序返回到c0s.obj的程序中
④c0s.obj的程序接着运行,进行相关的资源释放,环境恢复的工作
⑤c0s.obj的程序调用DOS的int 21h例程的4ch号中断功能,程序返回
附:
c0s调用main函数的地址: 011ah
main函数的连接地址: 01fah
《汇编语言》322页 “研究实验4 不用main函数编程”
最新文章
- OAuth2 理解
- jQuery-1.9.1源码分析系列(十五) 动画处理
- 反射在ADO.NET中的运用(你还在每个项目中循环遍历DataTable吗)
- 爱上MVC~为CheckBoxFor和RadioButtonFor加个扩展方法吧(希望MVC5把这方法收纳——呵呵)
- BufferedReader类
- dom相关指令
- ASCII,GB2312,GBK,Unicode,Utf-8
- Ubuntu、Sql Server卸载心得
- mysql2csv 和 csv2mysql 工具
- 类间调用inline函数的效率
- cluster.go
- NodeJS NPM 镜像使用方法
- PR视频剪辑
- iframe实现伪ajax
- Windows上使用telnet测试端口号
- 菜鸟入门【ASP.NET Core】12:JWT 设计解析及定制
- document.documentElement.scrollTop(获取滚动条位置)
- MongoDB的导入导出
- 纯注解方式配置spring+springMVC
- 蚂蚁金服 Service Mesh 渐进式迁移方案|Service Mesh Meetup 实录
热门文章
- oracle空表导不出来
- Linux命令 — 设置或查看网络配置命令ifconfig
- [Angular 2] 9. Replace ng-modle with #ref &; events
- android 40 Io编程
- 聊一聊Android 6.0的运行时权限
- ArrayBlockingQueue 源码阅读 问题(一)
- Java基础知识强化之集合框架笔记25:Vector的特有功能
- HDU 4296 Buildings(贪心)
- centos mysql 编译安装
- 14、SQL Server 存储过程