社区
汇编语言
帖子详情
汇编怎么处理高级语言中的变量?
zhou_lei
2008-09-18 11:04:28
本人猜想:
高级语言中的局部变量,在汇编里就是用栈实现的
全局变量,初始化时就是放在一块固定的内存里面
小弟刚学汇编不久,喜欢乱想象,希望高手指点下!
...全文
199
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是在函数返回前执行的,目的是恢复栈指针,此时已经不会再使用变量了。
2021-11-05
本文介绍了程序设计的三大
语言
类型——机器
语言
、
汇编
语言
和
高级
语言
,重点讲解了
高级
语言
中
的C
语言
,包括其基本结构、算法逻辑的三种结构以及程序设计的基本步骤。还提到了C
语言
的预
处理
命令#include
,标识符的规则以及程序设计
中
的
变量
和函数命名。
c
语言
各字节表述范围,浅析C
语言
在计算机
中
的应用
本文介绍了C
语言
及其特点,探讨了其在计算机领域
中
的广泛应用。C
语言
兼具
高级
语言
和
汇编
语言
的优点,不仅能设计系统
语言
,还能编写硬件外的应用程序。文章详细阐述了C
语言
在表达数据和文字、内存储器、
变量
设定以及
处理
关键环节等方面的应用。
C
语言
/个人学习笔记 仅供参考
本文介绍了C
语言
的基础知识,包括程序
语言
的层级(机器
语言
、
汇编
语言
和
高级
语言
),C
语言
的特点,以及程序的执行过程。重点讲解了数据类型,如基本数据类型、内存结构(位、字节、字长)以及
变量
和常量的定义和转换。还提到了预
处理
、编译、链接和执行的过程,以及C
语言
中
的输入输出函数。
C
语言
概述与基础【C
语言
从入门到精通系列(二)】
本文介绍了C
语言
的基本特点,包括它是
高级
语言
、编译型
语言
、具有可移植性和简洁高效。详细阐述了C
语言
从源代码到执行的编译过程,包括预
处理
、编译、
汇编
和链接。此外,还讨论了C
语言
中
的数据表现形式,如
变量
、常量(直接常量和符号常量)以及常
变量
,强调了它们的定义和使用规则。
基础知识点(已更新)
本文深入解析编程
语言
分类,包括机器
语言
、
汇编
语言
及
高级
语言
的特点与应用,探讨
变量
命名规范,详解注释的使用,以及数字、字符串、布尔值等基础数据类型的概念与操作,特别聚焦于Python
中
的数据格式化输出与浮点数精确度
处理
。
汇编语言
21,500
社区成员
41,617
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章