我是靠谱客的博主 清新戒指,最近开发中收集的这篇文章主要介绍c语言和汇编语言先学那一个,C语言和汇编语言的关系?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

C语言和汇编语言的关系?0

问题有点长,希望大家看完,谢谢!

听说过C语言经过编译以后会生成汇编代码?可是我在TC2.0里面

编译C程序后只看到了obj文件和exe文件,asm文件在哪?

我写了一个C语言程序:

#include

int main(){

int i =50;

int* ip = &i;

int** ipp = &ip;

printf("the address of i is %dn",&i);

printf("the address of ip is %dn",&ip);

printf("the address of ipp is %dn",&ipp);

return 0;

}

在vc6.0里面编译执行后运行结果:

the address of i is 1245052

the address of ip is 1245048

the address of ipp is 1245044

我不明白的是: 为什么每次程序编译运行的结果都是一样的???

还有,我发现这三个地址之间都差4,是不是相当于汇编里面,

在数据段中这三个变量是连续定义的,所以地址也是连续的,

并且说明了C语言中int类型的变量占4个字节,int的指针类型

也占4个字节.

(再问一个问题,为什么C语言里面int类型的变量占4个字节?)

这里的地址1245052,1245048,1245044是不是对应着C语言编译

后生成汇编文件中在数据段范围中的地址?

还有一个问题。。

C语言中分配内存空间的一个语句是:

int *p = null;

p = (int *)malloc(sizeof(int)*100);

是在堆里面分配的空间,可是在汇编里面只有代码段,数据段,

堆栈段,还有附加段,"堆" 在那个段中?

我一直认为“堆栈”就是“栈”的意思,难道说“堆栈”是

“堆”+“栈”??

还有,在8086cpu中,寄存器是16位的,所以偏移地址是16位的,

所以一个段最大就是64KB,如果我在malloc函数里面写:

int *p = null;

p = (int *)malloc(sizeof(int)*1000000000000000000);

也就是说开辟了一个大于64KB的堆空间,会有什么后果?

问题有点多,谢谢大家看到最后这句话!

最后

以上就是清新戒指为你收集整理的c语言和汇编语言先学那一个,C语言和汇编语言的关系?的全部内容,希望文章能够帮你解决c语言和汇编语言先学那一个,C语言和汇编语言的关系?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部