从汇编来看C语言之变量(4)

答:char型变量占1个字节,int型的变量占2个字节,long型占4个字节。int型在TC里占2个字节,在VC字节里占4个字节。因为TC模拟的是16位dos操作系统,VC模拟的是32位操作系统。

(9)再次对程序5进行研究,找到每一条c语句对应的汇编代码。

Struct n a;

Int b;--------------------sub sp,6

a=func();----------push ss;

push bx;

call 0266;

push ds;

Push ax;

mov cx,6;

Call 076a:1085;

b=f(a);------------lea bx,[bp-6]

Mov dx,ss

Mov ax,bx

Mov cx,6

Call 076a:10a1

Call 256

Printf(“%d”,b);---mov si,ax

Push si

mov ax,194;

Push ax

Call 093a

Printf(“%d”,f(func()));---call 266

Mov dx,ds

Mov cx,6

Call 076a:10a1

Call 256

Add sp,6

Push ax

Mov ax,198

Push ax

Call 93a

Func():

Struct n a;-----------sub sp,6

a.a=1;----------------mov word ptr [bp-6],1

a.b=2;----------------mov word ptr [bp-4],2

a.c=2;----------------mov word ptr [bp-2],3

Return a;-------------mov bx,426

Push ds;

Push bx;

Lea bx,[bp-6]

Push ss;

Push bx;

Mov cx,6

Call 076a:1085

(10)全局变量、局部变量存储方式的不同有什么普遍的意义?

答:我们把这里的局部变量理解为动态局部变量。全局变量的存储空间是固定的,局部变量是动态分配的,他们的存储方式决定了他们的特点:1、作用域。全局变量在该程序所有地方都可以使用,局部变量只能在定义的函数里使用。2、生命周期。全局变量的生命周期和整个程序是一样的,而局部变量的生命周期与函数一样,函数结束即释放。这种方式更有利于减小程序的内存开销,避免变量定义出错,保证函数的独立性,使程序模块化,方便编写和调试。

全局变量放在数据段中,局部变量放在栈段中。比如一个程序有100个函数,每个有5个局部变量,如果都放在数据段中,就会造成内存开销太大,不好管理和调用,所以要用栈段来存放局部变量,这就是高级语言的核心机制。

3、研究总结

本章研究了函数的各种类型的变量的存储方式,是比较重要的一章。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a49cf8e75fd06b07f17d557ebc1bbee6.html