运行时环境
本章将研究由某个特定的编译器为某个特定的计算机所产生的汇编语言代码,目的是学习与这个编译器的运行时环境有关的几个有趣内容。我们需要回答的几个问题是“我的运行时环境的限制是什么?”“我如何使C程序和汇编语言程序一起共工作?”
18.1 判断运行时环境
你的机器上找出它们是如何运作的。
第一个步骤是从你的编译器获得一个汇编语言代码列表。在UNXI系统中,编译器选项-S可以让编译器把每个源文件的汇编代码写到一个具有.s后缀的文件中。Borland编译器也支持这种选项,不过它使用的是.asm后缀。
还需要阅读你的机器上的汇编语句代码。你并不一定要成为一个熟练的汇编语言程序师,但需要对每条指令的工作过程以及如何解释地址模型有一个基本的了解。一本描述你的计算机指令集的手册是完成这个任务的绝佳参考材料。
对汇编语言的解释可能有助于你分析你的机器上的汇编语言.
18.1.1 测试程序
/*
**判断C运行时环境的程序。
*/
/*
**静态初始化。
*/
int static_variable = 5;
void
f( void ) {
register int i1, i2, i3, i4, i5, i6, i7, i8, i9, i10;
register char *c1, *c2, *c3, *c4, *c5, *c6, *c7, *c8, *c9, *c10;
extern int a_very_long_name_to_see_how_long_they_can_be;
double dbl;
in func_ret_int();
double func_ret_double();
char *func_ret_char_ptr();
/*
**寄存器变量的最大数量。
*/
i1 = 1; i2 = 2; i3 = 3; i4 = 4; i5 = 5;
i6 = 6; i7 = 7; i8 = 8; i9 = 9; i10 = 10;
c1 = (char *)110; c2 = (char *)120;
c3 = (char *)130; c4 = (char *)140;
c5 = (char *)150; c6 = (char *)160;
c7 = (char *)170; c8 = (char *)180;
c9 = (char *)190; c10 = (char *)200;
/*
**外部名字。
*/
a_very_long_name_to_see_how_long_they_can_be = 1;
/*
**函数调用/返回协议,堆栈帧(过程活动记录)。
*/
i2 = func_ret_int( 10, i1, i10 );
dbl = func_ret_double();
c1 = func_ret_char_ptr( c1 );
}
int
func_ret_int( int a, int b, register int c ){
int d;
d = b - 6;
return a + b + c;
}
double
func_ret_double(){
return 3.14;
}
char *
func_ret_char_ptr( char *cp ){
return cp + 1;
}
程序18.1 测试程序 runtime.c
C和指针 第18章 运行时环境 18.1 判断运行时环境
于 2022-07-17 15:31:16 首次发布

最低0.47元/天 解锁文章
2035

被折叠的 条评论
为什么被折叠?



