原来add指令可以直接对内存进行加法操作

简介: 一直以为一个简单的i++操作,会变成三条会变指令: 1. 加载内存内容到寄存器 2. 对寄存器进行加法操作 3. 写回内存 然而事实上,add指令的操作对象,可以直接是内存的内容,这里有相关的说明:http://x86.renejeschke.de/html/file_module_x86_

一直以为一个简单的i++操作,会变成三条会变指令:

  1. 加载内存内容到寄存器
  2. 对寄存器进行加法操作
  3. 写回内存

然而事实上,add指令的操作对象,可以直接是内存的内容,这里有相关的说明:http://x86.renejeschke.de/html/file_module_x86_id_5.html

示例代码如下:

    int count = 20;

    asm(
        "addl $80, %0 \n"
        : : "m" (count) :);

    printf("%d\n", count);

汇编之后的结果:

    movl    $20, -4(%rbp)
    addl    $80, -4(%rbp)

movl $20, -4(%rbp)是对count进行赋值,后面的addl便是直接对其+80。

如果按照先加载到寄存器再操作的写法:

    asm(
        "addl $80, %0 \n"
        : "+r"(count) : :);
    printf("%d\n", count);

汇编之后是:

    movl    -4(%rbp), %eax
    addl    $80, %eax
    movl    %eax, -4(%rbp)

就是常见的3条指令的形式了。

目录
相关文章
|
7月前
|
C语言
C语言内存及堆栈操作
C语言内存及堆栈操作
35 0
|
Oracle 关系型数据库 Linux
解决在linux服务器上部署定时自动查找cpu,内存,磁盘使用量,并将查询结果写入数据库的脚本,只能手动运行实现插库操作
问题描述:将脚本名命名为mortior.sh(以下简称mo),手动执行脚本后查询数据库,表中有相应的信息,放入自动执行队列中,脚本被执行,但是查询数据库,并没有新增数据。
80 0
|
开发框架 算法 .NET
一个简单高效低内存的.NET操作Excel开源框架 - MiniExcel
一个简单高效低内存的.NET操作Excel开源框架 - MiniExcel
162 0
|
5月前
|
移动开发 监控 Serverless
函数计算操作报错合集之机器配置显示为1G内存,但报错显示0.12G,是什么原因
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
6月前
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
|
7月前
|
关系型数据库 MySQL Java
实时计算 Flink版操作报错之整内存和cpu分配之后启动报错如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
7月前
|
并行计算 索引 Python
讨论如何优化 DataFrame 操作,减少内存占用和提高执行速度
【5月更文挑战第19天】优化 DataFrame 操作涉及选择合适的数据类型、避免复制、使用向量化、高效迭代和设置索引。通过这些策略,如使用 `np.int8` 节省内存,直接修改列数据,利用 `itertuples`,设置分类数据类型,以及分块和并行计算,可以显著减少内存占用和提高执行速度,从而更好地处理大规模数据。实践中需结合具体情况综合运用,不断测试和优化。
221 2
|
7月前
|
C语言 C++
C语言进阶⑭(内存函数_以字节操作)momcpy+mommove+memcmp+memset
C语言进阶⑭(内存函数_以字节操作)momcpy+mommove+memcmp+memset
68 0
|
7月前
|
存储 程序员 数据处理
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
731 1
【汇编】mov和add指令、确定物理地址的方法、内存分段表示法
|
7月前
|
存储
【汇编】数据在哪里?有多长、div指令实现除法、dup设置内存空间
【汇编】数据在哪里?有多长、div指令实现除法、dup设置内存空间
139 1