鱼C论坛

 找回密码
 立即注册
查看: 1782|回复: 5

win32汇编的局部变量问题(lea)

[复制链接]
发表于 2014-10-11 15:08:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这里的v1和v2相当于c语言中在main函数内部定义了两个局部变量,可为什么每次运行程序时v1和v2的地址值都一样?(在c语言中他们的地址在每次运行时是不一样的)
  1. .386
  2. .model flat, stdcall
  3. include    kernel32.inc
  4. includelib kernel32.lib
  5. include    user32.inc
  6. includelib user32.lib
  7. .code
  8. main proc
  9. local v1,v2
  10.     mov v1, 00434241h
  11.     mov v2, 00636261h
  12.     lea eax, v1          ;eax保存v1的地址
  13.     lea ebx, v2          ;ebx保存v2的地址
复制代码



小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-10-11 16:54:18 | 显示全部楼层
变量可以直接把数值赋值进去?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-11 17:35:23 | 显示全部楼层
aa05001 发表于 2014-10-11 16:54
变量可以直接把数值赋值进去?

你反汇编一下就知道了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-12 03:01:47 | 显示全部楼层
对C不熟悉,查了下资料是这样说的(C 的代码必须在函数开始处定义所有局部变量,以便于编译器为所有局部变量准备栈空间。)
所以C的局部变量有变化就不奇怪了
而汇编的LOCAL是直接的sub esp,N ,直接在子程序开头处开辟栈作为变量,后面结束是MOV ESP ,ebp来平衡堆栈,所以地址不变
我觉的这都是编译器的工作原理不同导致的,好像C++和汇编的分配方式差不多,没有去验证过.

评分

参与人数 1荣誉 +10 鱼币 +10 贡献 +3 收起 理由
小靚同学Leon + 10 + 10 + 3 热爱鱼C^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-12 09:59:42 | 显示全部楼层
dAb 发表于 2014-10-12 03:01
对C不熟悉,查了下资料是这样说的(C 的代码必须在函数开始处定义所有局部变量,以便于编译器为所有局部变 ...

Thanks
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2014-11-1 05:05:53 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-7 08:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表