从汇编层面看多个赋值语句写在一行, 用','符号分开
发布日期:2021-06-30 22:07:56
浏览次数:3
分类:技术文章
本文共 1910 字,大约阅读时间需要 6 分钟。
在看算法例题时, 发现在一个宏中出现了previous[i] = i-1, next[i] = i+1; 这样的写法
我就想知道他为啥这么写, 为啥不写成如下语句.
previous[i] = i-1;
next[i] = i+1;难道有什么特别的好处么?
看调试版的反汇编实现
数组内存地址
previous[]数组内存地址 : dword ptr [ebp-2Ch]
next[]数组内存地址 : [ebp-58h]
在一行中用','符号分隔, 进行多个语句的赋值的反汇编分析
50: previous[i] = i-1, next[i] = i+1;004010DC 8B 95 24 FF FF FF mov edx,dword ptr [i]004010E2 83 EA 01 sub edx,1 ; ///< edx = i - 1;004010E5 8B 85 24 FF FF FF mov eax,dword ptr [i] ; ///< (i - 1)放到edx004010EB 89 54 85 D4 mov dword ptr [ebp+eax*4-2Ch],edx ; ///< previous[i] = i-1004010EF 8B 8D 24 FF FF FF mov ecx,dword ptr [i]004010F5 83 C1 01 add ecx,1 ; ///< ecx = i + 1004010F8 8B 95 24 FF FF FF mov edx,dword ptr [i]004010FE 89 4C 95 A8 mov dword ptr [ebp+edx*4-58h],ecx ; ///< next[i] = i + 1;
用2行单独赋值语句的反汇编分析
51: previous[i] = i-1;004010DC 8B 95 24 FF FF FF mov edx,dword ptr [i]004010E2 83 EA 01 sub edx,1004010E5 8B 85 24 FF FF FF mov eax,dword ptr [i]004010EB 89 54 85 D4 mov dword ptr [ebp+eax*4-2Ch],edx52: next[i] = i+1;004010EF 8B 8D 24 FF FF FF mov ecx,dword ptr [i]004010F5 83 C1 01 add ecx,1004010F8 8B 95 24 FF FF FF mov edx,dword ptr [i]004010FE 89 4C 95 A8 mov dword ptr [ebp+edx*4-58h],ecx可以看出, 两种写法, 生成的汇编代码一样.
那为什么要这么写呢?
2个赋值语句写在一行的代码在一个宏里
// #define INITIAL(n) { unsigned long i; \// for (i = 2; i <= n; i++) \// previous[i] = i-1, next[i] = i+1;\// previous[2] = next[n] = 0; \// }
这么做的本意就只有一个原因了, 就是为了在for循环语句下少写一对 {}.
总结
代码是给人看的, 如果编码代码生成结果一样的情况下. 必须写的可维护性高才行. 所以像这样的技巧还是少在工程中用.
不是每个维护者和学习者都能理解语法层面的奇技淫巧.
我鄙视语法层面的奇技淫巧^_^
转载地址:https://lostspeed.blog.csdn.net/article/details/50350633 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月13日 05时23分36秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
图像处理学习笔记
2019-04-30
Machine Learning Onramp on MATLAB 学习笔记
2019-04-30
Learning DSP with MATLAB
2019-04-30
用MATLAB实现m序列的生成(MATLAB 2021a适用)
2019-04-30
MATLAB函数备忘(定期更新)
2019-04-30
13行MATLAB代码实现网络爬虫 爬取NASA画廊星图
2019-04-30
MATLAB指定路径保存图片方法
2019-04-30
Python一键获取微信推送封面图
2019-04-30
油猴脚本:微信推送浏览功能拓展
2019-04-30
JavaScript DOM对象操作详解
2019-04-30
JavaScript 表单操作与MD5加密
2019-04-30
JAVA学习笔记4 - 循环与分支结构
2019-04-30
JAVA学习笔记6 - 数组
2019-04-30
JAVA学习笔记8 - Stream 和 File I/O
2019-04-30
JAVA学习笔记9 - 异常
2019-04-30
JAVA学习笔记10 - 继承
2019-04-30
JAVA学习笔记11 - 接口interface
2019-04-30
Android 开发学习笔记 00 - Getting Started
2019-04-30
【学习笔记】Android Activity
2019-04-30