汇编分析 int x = 2; x = x++ + ++x;

汇编分析下、VC6.0

int x = 2;

x = x++ + ++x;

// x 地址赋值
mov dword ptr [x], 2 // x = 2
// 这里把x值赋值给eax寄存器运算、最后在返回给x
mov eax,dword ptr [x]
add eax,1
mov dword ptr [x],eax // x += 1
// 把当前为3的x值赋值给ecx寄存器
mov ecx,dword ptr [x]
// x当前为3
add ecx,dword ptr [x]
// x += x
mov dword ptr [x],ecx
// 现在x=6
mov edx,dword ptr [x]
// x += 1
add edx,1
// 最终 x = 7
mov dword ptr [x],edx

本来按照正常理解 x ++ 后加、应该是 x = 2 + 3 = 5的、然后结果却是 7、按照汇编解析出的逻辑顺序如下

int x = 2;
/*
x = x++ + ++x 分解为
x = x地址 + x地址;
++x先加1了、然后上面就是 x = 3 + 3、然后在加一个后置++
大概如下:
*/
++ x;
x += x;
x ++;

上述的是在VC6编辑器上测试的、而在Java jdk8中、结果却是6、

x = x ++ + ++x; // 2 + 3、返回给x后在后置++

javap查看

int x = 2;
x = x++ + ++x;
// javap分析
iconst_2 // int x = 2;
istore_1 // 将int类型值存入局部变量1
iload_1 // 从局部变量1中装载int类型值
iinc 1, 1 // 把一个常量值加到一个int类型的局部变量上: x ++
iinc 1, 1 // x ++、此时 x = 4
iload_1
iadd // 栈顶为2、最后2+4、最终结果为6
istore_1 // 最后将值返回给栈

Original: https://www.cnblogs.com/tie-dao/p/16637099.html
Author: 鐡道
Title: 汇编分析 int x = 2; x = x++ + ++x;

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/622140/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 面向对象ooDay9

    同一个对象被造型为不同的类型时,有不同的功能——-所有对象都是多态的(明天总结详细讲) 对象的多态:水、我、你…… 同一类型的引用在…

    Java 2023年6月13日
    061
  • 数组(Java)

    数组的定义 数组是相同类型数据的有序集合 数组描述的是相同类型的若干数据,按照一定的先后次序排列组合而成 其中,每个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们 数…

    Java 2023年6月9日
    081
  • 线上故障处理手册

    摘要 通常处理线上问题的三板斧是 重启-回滚-扩&#x5BB9…

    Java 2023年6月8日
    082
  • leetcode 637. Average of Levels in Binary Tree 二叉树的层平均值(简单)

    一、题目大意 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 示例 1: 输入:root = [3,…

    Java 2023年6月14日
    088
  • 注册表学习和常用注册表修改

    存储数据结构 五大根键 Default 子键内容和 HKEY_CURRENT_USER 一致,其它不用管 保存了当前登录用户数据,个性化配置,键的内容随登录用户不同而不同 控制面板…

    Java 2023年6月5日
    098
  • SpringBoot集成Mybatis-puls

    application.properties方式: application.yml方式: id类型:(可在实体类用注解@TableId(value=”id”…

    Java 2023年6月7日
    046
  • Java反射机制

    概述 Java反射机制指的是在Java程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法;对于给定的一个对象,都能够调用它的任意一个属性和方法。这种动态获取类的内容以…

    Java 2023年6月7日
    067
  • 动态调整日志级别思路&实现

    引言 上篇文章 性能调优——小小的 log 大大的坑 已将详细的介绍了高并发下,不正确的使用日志姿势,可能会导致服务性能急剧下降问题。文末也给各位留下了解决方案——日志级别动态调整…

    Java 2023年6月15日
    0106
  • Java学习 (23) 对象篇(03)封装&继承&多态

    我们程序设计要追求”高内聚,低耦合” 高内聚:就是类的内部数据操作细节自己完成,不允许外部干涉 低耦合:仅暴露少量的方法给外部使用 通常,应禁止直接访问一个…

    Java 2023年6月8日
    0146
  • Mybatis-plus动态排序${}防注入(驼峰转下划线)

    Mybatis-plus动态排序${}防注入(驼峰转下划线) public static void verifyAndSetColumn(BasePageQuery req, Cl…

    Java 2023年5月30日
    044
  • Java(10)面向对象-使用LocalDate类完成日历设计

    在我们完成这个日历设计前,需要了解Java中的预定义类 LocalDate的一些用法 LocalDate.now() // 2022-07-01 会构造一个新对象,表示构造这个对象…

    Java 2023年6月9日
    077
  • Go mod 使用指定包版本

    使用命令 ,指定版本号即可 go get github.com/xxx/xxx@1.0.0 如果使用的模块项目没有发布新的版本,那么可以使用 git commit SHA go g…

    Java 2023年6月9日
    058
  • List 移除元素 报错 java.lang.UnsupportedOperationException

    异常信息:java.lang.UnsupportedOperationExceptionat java.util.AbstractList.remove(AbstractList….

    Java 2023年6月5日
    084
  • Java中类变量(静态变量)和类方法(静态方法)

    类变量 类变量也叫静态变量或静态属性,是该类所有对象共享的变量任何一个该类的对象去访问它时,取得都是一样的值 语法: 访问修饰符 static 数据类型 变量名 static 访问…

    Java 2023年6月6日
    086
  • Collections.sort排序方法的最简化写法

    Collections.sort排序方法的最简化写法 Collections.sort排序方法的最简化写法 假定按照Number对象的Id字段进行排序 正序排序 Collectio…

    Java 2023年6月16日
    079
  • Hive数据仓库工具基本架构和入门部署详解

    @ 概述 定义 本质 特点 Hive与Hadoop关系 Hive与关系型数据库区别 优缺点 其他说明 架构 组成部分 数据模型(Hive数据组织形式) Metastore(元数据)…

    Java 2023年6月5日
    064
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球