当前位置: 首页 > news >正文

[笔记] 汇编杂记(持续更新)

文章目录

  • 前言
  • 举例解释
    • 函数的序言
    • 函数的调用栈
    • 数据的传递
  • 总结


前言

举例解释

// Type your code here, or load an example.
int square(int num) {
    return num * num;
}

int sub(int num1, int num2) {
    return num1 - num2;
}

int add(int num1, int num2) {
    return num1 + num2;
}

int divide(int num1, int num2) {
    return num1 / num2;
}

int main() {
    square(4);
    sub(10,1);
    add(1,1);
    divide(16, 4);
    return 0;
}

可使用 Compiler Explorer 在线转为汇编
对应的汇编:

square(int):
        push    rbp
        mov     rbp, rsp
        mov     DWORD PTR [rbp-4], edi
        mov     eax, DWORD PTR [rbp-4]
        imul    eax, DWORD PTR [rbp-4]
        pop     rbp
        ret
sub(int, int):
        push    rbp
        mov     rbp, rsp
        mov     DWORD PTR [rbp-4], edi
        mov     DWORD PTR [rbp-8], esi
        mov     eax, DWORD PTR [rbp-8]
        mov     edx, DWORD PTR [rbp-4]
        sub     edx, eax
        mov     eax, edx
        pop     rbp
        ret
add(int, int):
        push    rbp
        mov     rbp, rsp
        mov     DWORD PTR [rbp-4], edi
        mov     DWORD PTR [rbp-8], esi
        mov     eax, DWORD PTR [rbp-8]
        mov     edx, DWORD PTR [rbp-4]
        add     eax, edx
        pop     rbp
        ret
divide(int, int):
        push    rbp
        mov     rbp, rsp
        mov     DWORD PTR [rbp-4], edi
        mov     DWORD PTR [rbp-8], esi
        mov     eax, DWORD PTR [rbp-4]
        cdq
        idiv    DWORD PTR [rbp-8]
        pop     rbp
        ret
main:
        push    rbp
        mov     rbp, rsp
        mov     edi, 4
        call    square(int)
        mov     esi, 1
        mov     edi, 10
        call    sub(int, int)
        mov     esi, 1
        mov     edi, 1
        call    add(int, int)
        mov     esi, 4
        mov     edi, 16
        call    divide(int, int)
        mov     eax, 0
        pop     rbp
        ret

在这里插入图片描述

函数的序言

https://zhuanlan.zhihu.com/p/368962727

push    rbp
mov     rbp, rsp
...
pop     rbp

sqaure前面的push rbp 和mov rbp, rsp又叫做函数的序言(prologue),几乎每个函数一开始都会有的指令。它和函数最后的pop rbp和ret(epilogue)起到维护函数的调用栈的作用。

函数的调用栈

数据的传递

数据的传递就分为以下四个方面

  1. 从内存到寄存器
  2. 从寄存器到内存
  3. 从立即数到寄存器,
  4. 从立即数到内存

注意:数据不能从内存直接传递到内存。如果需要从内存传递到内存,要以寄存器为中介。(这些知识,还是我当年大学学的计算机组成原理里面的)

  • Intel的汇编会在数据前面说明数据大小,比如 mov DWORD PTR [rbp-4], 4,意思是将一个4字节的4存储到 栈上(地址为rbp-4)。
  • 而AT & T是通过指令的后缀来说明,同样的指令为movl $4, -4(%rbp)。而存储的地方,AT & T汇编是通过前缀来区别,比如%q前缀表示寄存器,$表示立即数,()表示内存。

总结


文章转载自:

http://jNhbHz7o.tgfsr.cn
http://26wXvHoR.tgfsr.cn
http://9VWXjU2C.tgfsr.cn
http://1HMfi3Pb.tgfsr.cn
http://487eZ6ji.tgfsr.cn
http://r351TH2F.tgfsr.cn
http://xfFVR5v5.tgfsr.cn
http://SjR1Pynx.tgfsr.cn
http://d2fJilhw.tgfsr.cn
http://H4BWlaZ8.tgfsr.cn
http://CSUdanVq.tgfsr.cn
http://HNXNNQiC.tgfsr.cn
http://NAmWuQue.tgfsr.cn
http://KPSU3jEw.tgfsr.cn
http://R1CeVwQ0.tgfsr.cn
http://DaFG038n.tgfsr.cn
http://9byzI8gY.tgfsr.cn
http://6sz49PDY.tgfsr.cn
http://tL3dofJF.tgfsr.cn
http://9VghAPdu.tgfsr.cn
http://0PRsSXla.tgfsr.cn
http://pzfyRCld.tgfsr.cn
http://c5iwpAam.tgfsr.cn
http://DAEjfa4x.tgfsr.cn
http://DIyMFjQo.tgfsr.cn
http://gUKiUGXC.tgfsr.cn
http://OzNFXZod.tgfsr.cn
http://hen7MSz7.tgfsr.cn
http://js6OHKIH.tgfsr.cn
http://B0UenVJ5.tgfsr.cn
http://www.dtcms.com/a/14802.html

相关文章:

  • 在freertos中,中断优先级和任务优先级之间的关系和使用方法
  • 在Windows 7操作系统,基于llama.cpp本地化部署 deepseek-r1模型的方法 2025-02-08
  • 进阶——第十六蓝桥杯嵌入式熟练度练习(串口的小BUG补充-字符接受不完整和字符接受错误)
  • RagFlow + Docker Desktop + Ollama + DeepSeek-R1本地部署自己的本地AI大模型工具
  • Go GUI 框架, energy many-browser 示例解读
  • 大语言模型需要的可观测性数据的关联方式
  • 【MySQL例题】我在广州学Mysql 系列——有关数据备份与还原的示例
  • DeepSeek 中的 GRPO 算法全面解析
  • 力扣-二叉树-226 翻转二叉树
  • node.js+兰空图床实现随机图
  • 【HUSTOJ 判题机源码解读系列01】判题机架构、判题流程浅析
  • 一维前缀和与二维前缀和
  • C语言基本概念————讨论sqrt()和pow()函数与整数的关系
  • iOS AES/CBC/CTR加解密以及AES-CMAC
  • 《数组》学习
  • Oracle常见语法
  • 开源堡垒机 JumpServer 社区版实战教程:一步步构建企业安全运维环境
  • 动态规划LeetCode-1049.最后一块石头的重量Ⅱ
  • GESP2024年9月认证C++七级( 第三部分编程题(1)小杨寻宝)
  • 【SpringBoot3.x+】slf4j-log4j12依赖引入打印日志报错的两种解决方法
  • 腿足机器人之一- 机械与电子组件概览
  • 机器学习:决策树
  • Java进阶笔记(中级)
  • 【Linux探索学习】第二十七弹——信号(上):Linux 信号基础详解
  • HCIA综合项目之多技术的综合应用实验
  • 第12周:LSTM(火灾温度)
  • C#学习之DateTime 类
  • Generate html
  • 【练习】图论
  • 在vue3中vue-cropper的初使用