汇编语言问题

0x00401009处把ecx+eax+78处的地址赋给edx干嘛?不应该是ecx+eax+78的值赋给edx的吗?还有这个函数的局部变量本来就都放到寄存器里了,0041... 0x00401009处把ecx+eax+78处的地址赋给edx干嘛?不应该是ecx+eax+78的值赋给edx的吗?还有这个函数的局部变量本来就都放到寄存器里了,00410001处为什么还要为局部变量开辟空间? 展开
 我来答
jcw_2010
2014-05-03 · TA获得超过942个赞
知道小有建树答主
回答量:219
采纳率:100%
帮助的人:269万
展开全部
c的main函数中的局部变量a b没有被赋初值呢
对应的汇编代码中int a b用的是同一个内存空间,即push ecx这条指令开辟的那一个4字节栈空间
mov eax, [esp] ; eax= a

mov ecx, [esp] ; ecx = b

lea edx, [ecx + eax+78] ; edx = ecx+edx+78 = a+b+78
lea指令经常用来做多个寄存器值的加减,比add sub精简,如
lea edx, dword ptr [ecx + eax+78]取dword内存单元[ecx+eax+78]的地址,也即 ecx值+eax值+78
到edx,执行完后 edx = ecx值+eax值+78,用add来做相同的计算:
mov edx, ecx
add edx, eax
add edx, 78 显得麻烦多了

“还有这个函数的局部变量本来就都放到寄存器里了,00410001处为什么还要为局部变量开辟空间”
这个问题呢 是由编译器的逻辑决定的,我的看法呢 main函数中的int a, b;是函数的局部变量,对应的是栈内存,分配栈内存空间给它们是很正常的。

最后,我好奇的问一下,图片截的是某本书的内容吧?是什么书啊?
意法半导体(中国)投资有限公司
2023-06-12 广告
汇编语言(assembly language)是面向机器的程序设计语言.汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言”作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
_fmlyht
2014-05-04 · TA获得超过2359个赞
知道大有可为答主
回答量:2398
采纳率:0%
帮助的人:1819万
展开全部
1,注意LEA与MOV的区别!
2,若为速度优化且寄存器够用,局部变量可用寄存器保存,无需分配栈空间。
3,尽信书不如无书。

共勉!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式