int a;或int a[2]={1,2};对应的汇编指令是什么?

Roy_Smiling 2011-02-28 11:19:49
如题,编译之后的exe文件中变量的数据是怎么存放的。是不是和代码放一块的?我是问没有运行前的exe文件,这个文件是不是每一句都对应指令,然后在执行时在内存中分配数据?执行完了数据又回收。
...全文
323 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2011-02-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 roy_smiling 的回复:]问一下一楼:int a;语句不形成任何指令,只对分配空间大小的那个指令有影响。这句话什么意思,是不是说这句话有一条分配空间的指令?另外假如在函数里定义的,数组是不是也在堆栈中分配内存的啊?[/Quote]
对局部变量在堆栈里分配空间,一般是通过 sub esp, xx 来实现的。这个指令是在函数的开始部分,对所需要空间统一进行的。所以,增加个局部变量,xx 也会跟着变,但不会再多出来个 sub esp... 的指令。
函数里定义的,无论是简单变量,还是数字或结构,只要不是被 static 修饰的,都是临时在堆栈里分配空间的;所以,函数一结束,这些变量就没有意义了。
va_zaixuexi 2011-02-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 roy_smiling 的回复:]
问一下一楼:int a;语句不形成任何指令,只对分配空间大小的那个指令有影响。这句话什么意思,是不是说这句话有一条分配空间的指令?另外假如在函数里定义的,数组是不是也在堆栈中分配内存的啊?
[/Quote]

1. 声明一堆数组,反汇编直接看esp,理解几个esp,ebp的例子就明白了

2. 错.static int a[10];
Roy_Smiling 2011-02-28
  • 打赏
  • 举报
回复
问一下一楼:int a;语句不形成任何指令,只对分配空间大小的那个指令有影响。这句话什么意思,是不是说这句话有一条分配空间的指令?另外假如在函数里定义的,数组是不是也在堆栈中分配内存的啊?
zara 2011-02-28
  • 打赏
  • 举报
回复
看在哪里定义的吧。如果是函数之外,即所谓的静态变量,那么 a 一般是在 .data? 类段中分配个空间;a[2] 这样的预置数据的,则是在 .data 类的段里。如果是在函数里定义的,即所谓的临时/动态变量,在是在当前堆栈里分配的;int a; 语句不形成任何指令,只对分配空间的大小的那个指令有影响;int a[2]={1,2}; 处理和 int a; 一样的影响之外,还会形成两个赋值的指令,大致如 mov dword ptr [ebp-xx], 1 和 mov dword ptr [ebp-yy], 2
zara 2011-02-28
  • 打赏
  • 举报
回复
都是虚的吧,普通程序不涉及到物理地址的。
Roy_Smiling 2011-02-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zara 的回复:]
看在哪里定义的吧。如果是函数之外,即所谓的静态变量,那么 a 一般是在 .data? 类段中分配个空间;a[2] 这样的预置数据的,则是在 .data 类的段里。如果是在函数里定义的,即所谓的临时/动态变量,在是在当前堆栈里分配的;int a; 语句不形成任何指令,只对分配空间的大小的那个指令有影响;int a[2]={1,2}; 处理和 int a; 一样的影响之外,还会形成两个赋值的指令,大致……
[/Quote]
程序运行是分配的变量地址是物理地址还是虚拟地址?

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧