例如:定义变量、分配空间、赋值等等操作在内存中具体实现过程是怎么样的???
ENTER, LEAVECALL mallocMOV var, data
这你妹,说来话长了,LZ有时间没,俺花一个月跟你讲讲,大家一起研究。
^_^。
先去了解运行时栈,了解目标文件中都有些啥...
操作系统、汇编、计算机体系结构回大学重学这三门课
回复 2# cobras
谢谢回复, 能不能用直白的语言描述一下。就是计算机在执行这几个操作的时候的过程。要详细的。还有就是带初始化的变量定义和不带初始化的变量定义的内存操作是一样的吗?如果不一样,不一样在哪?那个执行的效率更高?
回复 3# captivated
你好,首先感谢你的回复。关于c语句转换到内存的操作,我确实了解的不是很清楚。所以希望赐教。变量定义的语句最终转化为汇编以后是什么语句??带初始化和不带初始化的变量定义的汇编一样吗?希望写出他们的汇编,并用汉语讲解出来。
回复 4# cugb_cat
这些书我也了解一些,但是都没有从c语言角度出发。 能不能推荐一本关于才语言转化为汇编的书?就是介绍每天c语句被转化成什么样的汇编???也就是c语句在内存的具体实现形式,一定要详细深入的。包括每一个步骤。
回复 6# teclimber
变量定义的语句最终转化为汇编以后是什么语句??带初始化和不带初始化的变量定义的汇编一样吗?希望写出他们的汇编,并用汉语讲解出来。
都说了说来话长了。你没了解计算机体系、编译链接之类的基础知识,我讲了也是白讲。
变量定义语句,如果是初始化的全局变量,很简单,汇编语言中有专门在数据区定义变量的方法/伪指令。比如你在C语言中定义int a = 4;那么在汇编语言中可能就是在数据区域中这样定义一个符号:.a dw 4
如果是未初始化的全局变量/静态变量呢?那么C语言的编译器会将其放到bss段,目标文件中不会分配空间给bss段,而是在加载时在虚拟内存中为bss段开辟空间。汇编语句中仍然可能会为bss段像已定义全局变量那样预留(虚拟内存)空间。
而如果是局部变量呢?函数的局部变量是运行期在栈上分配的。这个不过就是函数栈/调用惯例而已。编译器不会为局部变量分配空间。
了解这些东西并不困难。要看到编译器根据你的C程序生成的汇编代码难么?...大把工具做这种事情。真是的......说了先去给我了解计算机理论啦!
回复 8# captivated
你说的那个局部变量的定义就是在栈上分配,是不是就是移动一下栈的指针?还有 .a dw 4 这个是全局变量的定义呢,还是局部变量定义?局部变量的初始化是不是也是在栈上操作?他这个初始化的过程需不需要多余的指令周期?
回复 9# teclimber
变量定义语句,如果是初始化的全局变量,很简单,汇编语言中有专门在数据区定义变量的方法/伪指令。
我不明明白白的说了是全局、初始化了的变量嘛。
局部变量根据ebp加上偏移来访问。函数代码段会处理这些事情。 编译器可能直接为局部变量预留栈空间。代码就是sub xxx, %(esp)
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(9)
ENTER, LEAVE
CALL malloc
MOV var, data
这你妹,说来话长了,LZ有时间没,俺花一个月跟你讲讲,大家一起研究。
^_^。
先去了解运行时栈,了解目标文件中都有些啥...
操作系统、汇编、计算机体系结构
回大学重学这三门课
回复 2# cobras
谢谢回复, 能不能用直白的语言描述一下。就是计算机在执行这几个操作的时候的过程。要详细的。
还有就是带初始化的变量定义和不带初始化的变量定义的内存操作是一样的吗?如果不一样,不一样在哪?那个执行的效率更高?
回复 3# captivated
你好,首先感谢你的回复。关于c语句转换到内存的操作,我确实了解的不是很清楚。所以希望赐教。
变量定义的语句最终转化为汇编以后是什么语句??带初始化和不带初始化的变量定义的汇编一样吗?
希望写出他们的汇编,并用汉语讲解出来。
回复 4# cugb_cat
这些书我也了解一些,但是都没有从c语言角度出发。 能不能推荐一本关于才语言转化为汇编的书?就是介绍每天c语句被转化成什么样的汇编???
也就是c语句在内存的具体实现形式,一定要详细深入的。包括每一个步骤。
回复 6# teclimber
都说了说来话长了。你没了解计算机体系、编译链接之类的基础知识,我讲了也是白讲。
变量定义语句,如果是初始化的全局变量,很简单,汇编语言中有专门在数据区定义变量的方法/伪指令。
比如你在C语言中定义int a = 4;
那么在汇编语言中可能就是在数据区域中这样定义一个符号:
.a dw 4
如果是未初始化的全局变量/静态变量呢?
那么C语言的编译器会将其放到bss段,目标文件中不会分配空间给bss段,而是在加载时在虚拟内存中为bss段开辟空间。
汇编语句中仍然可能会为bss段像已定义全局变量那样预留(虚拟内存)空间。
而如果是局部变量呢?
函数的局部变量是运行期在栈上分配的。
这个不过就是函数栈/调用惯例而已。编译器不会为局部变量分配空间。
了解这些东西并不困难。要看到编译器根据你的C程序生成的汇编代码难么?...大把工具做这种事情。真是的......
说了先去给我了解计算机理论啦!
回复 8# captivated
你说的那个局部变量的定义就是在栈上分配,是不是就是移动一下栈的指针?
还有 .a dw 4 这个是全局变量的定义呢,还是局部变量定义?
局部变量的初始化是不是也是在栈上操作?他这个初始化的过程需不需要多余的指令周期?
回复 9# teclimber
我不明明白白的说了是全局、初始化了的变量嘛。
局部变量根据ebp加上偏移来访问。函数代码段会处理这些事情。
编译器可能直接为局部变量预留栈空间。代码就是sub xxx, %(esp)