汇编的一个代码 lea ecx, dword ptr [ecx+ecx*4]中的[ecx+ecx*4]为什么不写成[ecx*5]????
leaecx,dwordptr[ecx+ecx*4]leaecx,dwordptr[eax+ecx*2]这是汇编的两行代码,整个代码就是将字符串“123456”转换成整数...
lea ecx, dword ptr [ecx+ecx*4]
lea ecx, dword ptr [eax+ecx*2]
这是汇编的两行代码,整个代码就是将字符串“123456”转换成整数123456,我想为什么要写成ecx+ecx*4和eax+ecx*2,为什么写成这样的形式,可以直接写成eax+ecx*10???没有财富值了,不好意思啊,希望帮忙解答。。。 展开
lea ecx, dword ptr [eax+ecx*2]
这是汇编的两行代码,整个代码就是将字符串“123456”转换成整数123456,我想为什么要写成ecx+ecx*4和eax+ecx*2,为什么写成这样的形式,可以直接写成eax+ecx*10???没有财富值了,不好意思啊,希望帮忙解答。。。 展开
3个回答
展开全部
lea ecx, dword ptr [ecx+ecx*4]
写成
lea ecx, dword ptr [ecx*5] 的确没有任何差别(可能是为了便于理解才那样写的,比如数组寻址)
但是你说的把
lea ecx, dword ptr [ecx+ecx*4](这里没用mov指令是因为lea指令执行效率比mov高)
lea ecx, dword ptr [eax+ecx*2]
写成
lea ecx, dword ptr [eax+ecx*10] 也没问题啊
等价的
至于为什么要分两步写,很可能是为了便于理解吧,字符数组的寻址过程,一步步写出来而已
还有问题么?
写成
lea ecx, dword ptr [ecx*5] 的确没有任何差别(可能是为了便于理解才那样写的,比如数组寻址)
但是你说的把
lea ecx, dword ptr [ecx+ecx*4](这里没用mov指令是因为lea指令执行效率比mov高)
lea ecx, dword ptr [eax+ecx*2]
写成
lea ecx, dword ptr [eax+ecx*10] 也没问题啊
等价的
至于为什么要分两步写,很可能是为了便于理解吧,字符数组的寻址过程,一步步写出来而已
还有问题么?
展开全部
ecx+ecx*4 计算应该是这样的ecx+ecx左移2 ,貌似cpu执行比ecx*5效率高吧。。个人见解。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
引用huangliuyou的回答:
lea ecx, dword ptr [ecx+ecx*4]
写成
lea ecx, dword ptr [ecx*5] 的确没有任何差别(可能是为了便于理解才那样写的,比如数组寻址)
但是你说的把
lea ecx, dword ptr [ecx+ecx*4](这里没用mov指令是因为lea指令执行效率比mov高)
lea ecx, dword ptr [eax+ecx*2]
写成
lea ecx, dword ptr [eax+ecx*10] 也没问题啊
等价的
至于为什么要分两步写,很可能是为了便于理解吧,字符数组的寻址过程,一步步写出来而已
还有问题么?
lea ecx, dword ptr [ecx+ecx*4]
写成
lea ecx, dword ptr [ecx*5] 的确没有任何差别(可能是为了便于理解才那样写的,比如数组寻址)
但是你说的把
lea ecx, dword ptr [ecx+ecx*4](这里没用mov指令是因为lea指令执行效率比mov高)
lea ecx, dword ptr [eax+ecx*2]
写成
lea ecx, dword ptr [eax+ecx*10] 也没问题啊
等价的
至于为什么要分两步写,很可能是为了便于理解吧,字符数组的寻址过程,一步步写出来而已
还有问题么?
展开全部
因为Intel规定乘数只能是1,2,4,8中的一个
至于*5,*10根本不存在的
也根本不是什么方便理解,就是因为根本没有,就这么简单。
至于*5,*10根本不存在的
也根本不是什么方便理解,就是因为根本没有,就这么简单。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询