C++汇编理解a++,与++a的本质
时间:2019-02-20
本文章向大家介绍C++汇编理解a++,与++a的本质,主要包括C++汇编理解a++,与++a的本质使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
int main() {
int a = 10;
int b = 0;
b = a++ + 8;
// a++汇编代码
mov eax, dword ptr [a] // 将a的值取出来赋值给eax,即eax = 10
add eax, 8 // 将eax里面的值加8 即eax += 8,此时a的值是没有变的
mov dword ptr [b], eax // 将最终的结果给了b.即 b = eax
mov eax, dword ptr [a] // 将a的值取出来给了eax即 eax = 10
inc eax // 将eax加1即 eax += 1
mov dword ptr [a], eax // 将eax的值给了a即 a = 9
// 结论:a++会返回a以前的值进行运算,运算完毕之后才会让a的值+1
b = ++a + 8;
// ++a汇编代码
mov eax, dword ptr [a] // 将a的值取出来赋值给eax
inc eax // 让eax加1
mov dword ptr [a], eax // 又将eax的值送回给了a 即 a = eax,此时a的值为9已经改变
mov eax, dword ptr [a] // 将a的值取出来赋值给eax 即eax = a
add eax, 8 // 将eax加8 即eax += 8
mov dword ptr [b], eax // 再把最终的结果给了变量b 即b = eax
// 结论:++a会先直接让a的值+1,并且返回最新的a
cout << a << endl;
(a++) = 40;//用a以前的值运算完之后才有改变a的值,这个是将a里面的值先给了eax,是一个临时的寄存器,没有意义,说明a++没有返回a,返回的是一个临时的寄存器,这个赋值是错误的
(++a) = 20; // 先将a的值加1,a里面的值已改变后,再将a在栈空间的值赋值为20
getchar();
return 0;
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Javascript之其实我觉得原型链没有难的那么夸张!
- 归纳一下:C#线程同步的几种方法
- C# 主界面的扁平化
- C# LINQ
- Oracle基本参数(DB_NAME)
- Oracle基本参数(DB_RECOVERY_FILE_DEST,DB_RECOVERY_FILE_DEST_SIZE)
- Oracle基本参数(DB_UNIQUE_NAME)
- Oracle基本参数(DB_DOMAIN)
- Oracle基本参数(INSTANCE_NUMBER)
- Oracle基本参数(LDAP_DIRECTORY_SYSAUTH)
- C#调用C++编写的DLL
- Oracle基本参数(LOG_ARCHIVE_DEST_n)
- [安装文档]Oracle 12c 单节点安装之安装前准备
- Oracle基本参数(NLS_LANGUAGE)
- Oracle基本参数(NLS_TERRITORY)