社区
汇编语言
帖子详情
汇编怎么处理高级语言中的变量?
zhou_lei
2008-09-18 11:04:28
本人猜想:
高级语言中的局部变量,在汇编里就是用栈实现的
全局变量,初始化时就是放在一块固定的内存里面
小弟刚学汇编不久,喜欢乱想象,希望高手指点下!
...全文
170
7
打赏
收藏
汇编怎么处理高级语言中的变量?
本人猜想: 高级语言中的局部变量,在汇编里就是用栈实现的 全局变量,初始化时就是放在一块固定的内存里面 小弟刚学汇编不久,喜欢乱想象,希望高手指点下!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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是在函数返回前执行的,目的是恢复栈指针,此时已经不会再使用变量了。
Keil C51编译器
在Keil u4 for ARM 下增加 C51支持的扩展包
c
语言
使用
汇编
变量
,
汇编
语言
局部
变量
应用
高级
语言
中
,在单一子程序内新建、使用和撤销的
变量
被称为局部
变量
(local variable)。局部
变量
创建于运行时堆栈,通常位于基址指针 (EBP) 之下。尽管不能在
汇编
时给它们分配默认值,但是能在运行时初始化它们。可以使用与 C 和 C++ 相同的方法在
汇编
语言
中
新建局部
变量
。【示例】下面的 C++ 函数声明了局部
变量
X 和 Y:void MySub(){int X = 10;int Y ...
机器
语言
、
汇编
语言
和
高级
语言
之间的关系
看了一篇讲解
高级
语言
、
汇编
语言
和机器
语言
的博客,感觉很受益,在这里简单总结一下。 1. 机器
语言
计算机执行的二进制命令,都是0和1表示的。 2.
汇编
语言
具有一定意义的文字命令,与机器
语言
一一对应。
汇编
语言
可以通过
汇编
得到机器
语言
,机器
语言
可以通过反
汇编
得到
汇编
语言
。
汇编
过程还包括
变量
内存管理,即经过
汇编
之后所有的
变量
和函数都变成了地址,而常量也变成了对应的值。 但是
汇编
语言
还是不够
关于
汇编
语言
和
高级
语言
的区别
汇编
语言
是基于第一代计算机
语言
的学习难度较大而开发的,由于当时学习变成难度系数较大,所以我们就发展出使用一些助记符来帮助人们编程的方法,使人们与计算机的交流更加便捷,学习起来也更容易一些,最后再由编译器翻译为0、1代码,这样计算机就能识别了。随着信息技术的发展,
汇编
语言
并不能满足人们的日常需求了,所以便衍生出第三代计算机
语言
,
高级
语言
,例如我们所熟知的C
语言
、Java
语言
、Python
语言
等等,都是我们日常生活
中
所熟知的
语言
,与我们的日常生活息息相关。
汇编语言
21,497
社区成员
41,616
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章