社区
汇编语言
帖子详情
汇编怎么处理高级语言中的变量?
zhou_lei
2008-09-18 11:04:28
本人猜想:
高级语言中的局部变量,在汇编里就是用栈实现的
全局变量,初始化时就是放在一块固定的内存里面
小弟刚学汇编不久,喜欢乱想象,希望高手指点下!
...全文
155
7
打赏
收藏
汇编怎么处理高级语言中的变量?
本人猜想: 高级语言中的局部变量,在汇编里就是用栈实现的 全局变量,初始化时就是放在一块固定的内存里面 小弟刚学汇编不久,喜欢乱想象,希望高手指点下!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
疯哥哥
2008-09-19
打赏
举报
回复
局部变量在栈里,
已经初始化的全局变量在DATA段,
没有初始化的在BSS段
XXX.c
short n;
int i;//假定int为32位.short为16位
XXX.asm
;如果使用了.model C就直接
EXTRN n:WORD
EXTRN i:DWORD
;否则加 下划线,一般的ABI都这样规定C命名格式
;加了.model C 的时候编译器会自动帮你加下划线
EXTRN _n:WORD
EXTRN _i:DWORD
链接的时候把两个obj文件link上就好了.嗯,汇编的obj文件格式,最好使用COFF
嗯,C要使用汇编里面的变量的话,
XXX.asm
PUBLIC n,i
.data
_n DW ?
_i DD ?
XXX.c
extern int i;
extern short n;
大致就这样,你可以在网上搜搜这方面的东东.待会儿我发个日志YY一下...
cnf
2008-09-19
打赏
举报
回复
楼上几位说的都是编译器处理的结果。
楼主应该不是这意思。
zuo53664640
2008-09-19
打赏
举报
回复
;函数入口处
push bp
mov bp, sp
sub sp, NN ;NN表示所有局部变量储存空间的总大小
;函数中保持bp不变
;用[bp-n]访问局部变量
;用[bp+n]访问函数参数
;函数结尾处
mov sp, bp
pop bp
ret
如果是32位程序,用ebp和esp。
大哥你的话不是很懂,能详细说下吗??
sp不是一直指向栈顶,mov sp,bp后 bp也指向栈顶 那[bp-n]为何能访问局部变量,说细点好吗,我初学者!!
cnzdgs
2008-09-19
打赏
举报
回复
;函数入口处
push bp
mov bp, sp
sub sp, NN ;NN表示所有局部变量储存空间的总大小
;函数中保持bp不变
;用[bp-n]访问局部变量
;用[bp+n]访问函数参数
;函数结尾处
mov sp, bp
pop bp
ret
如果是32位程序,用ebp和esp。
大熊猫侯佩
2008-09-19
打赏
举报
回复
动态局部变量放在stack中,全局变量和静态局部变量放在heap中。
笨鸟无敌
2008-09-19
打赏
举报
回复
嗯,与我理解的基本一至.我感觉它们都是存放于由汇编程序可使用的内存单元组成的一小节内存,只不过是局部变量存放处的内存为汇编程序的指定栈空间吧.
2楼历害,给出了具体局部变量使用的方法呵.
如果没理解错的话,意思就是函数中封闭当前栈顶指针,以其为分界点,分配栈堆外最近的相应空闲栈空间给局部变量使用.剩余部分分配给函数栈操作使用.而原栈堆内的数据做为在函数体外注入的参数.(如下图呵.)
个人认为这种方法需要注意:
1.函数体中,在MOV BP,SP后,应保持BP值不变.以便能准确复位SP.
2.为配合栈操作特点,建议NN取值最好使用偶数.
□
□
□ 函数体内栈堆
□
□ ------┘
□SP-NN ------┐
□
□ 函数体内
□ 局部变量使用栈空
□
□ ------┘
□SP ------┐
□
□ 函数体外栈堆
□
cnzdgs
2008-09-19
打赏
举报
回复
补充一下,全局变量是分配在数据区里面,用直接寻址(变量地址)的方式访问。
To 3楼:
mov sp, bp是在函数返回前执行的,目的是恢复栈指针,此时已经不会再使用变量了。
汇编
语言
程序设计
汇编
语言
是一门低级程序设计
语言
,在数以千计的计算机
语言
中
,有着不可替代的重要地位,广泛地用于开发操作系统内核、设备驱动程序等。随着近年来物联网、嵌入式系统的发展,
汇编
语言
在行业
中
的地位也再次攀升,在...
汇编
语言
定义
变量
c,
汇编
c
语言
变量
在编译期间,编译器根据函数的参数类型确定实际的函数名称(或
汇编
语言
中
的函数名称). 与c不同,此命名规则更加复杂. 它仅在
变量
名称和函数名称之前添加下划线. 因此,在c文件
中
定义了名为name的全局
变量
或函数,并...
c
语言
使用
汇编
变量
,
汇编
语言
局部
变量
应用
高级
语言
中
,在单一子程序内新建、使用和撤销的
变量
被称为局部
变量
(local variable)。局部
变量
创建于运行时堆栈,通常位于基址指针 (EBP) 之下。尽管不能在
汇编
时给它们分配默认值,但是能在运行时初始化它们。可以...
机器
语言
、
汇编
语言
和
高级
语言
之间的关系
看了一篇讲解
高级
语言
、
汇编
语言
和机器
语言
的博客,感觉很受益,在这里简单总结一下。 1. 机器
语言
计算机执行的二进制命令,都是0和1表示的。 2.
汇编
语言
具有一定意义的文字命令,与机器
语言
一一对应。
汇编
语言
...
汇编
语言
的
变量
与编码
1.前言
汇编
语言
采用了助记符号编写程序,通过编译器转换成能够被...
高级
语言
用与自然
语言
接近的代码编写程序,通过编译器转换成二进制代码程序。
高级
语言
易学易用,通用性好。C
语言
是一种结构化的
高级
编程
语言
,在
汇编语言
21,458
社区成员
41,600
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章