变量赋值汇编

news2025/3/13 9:41:49

 

一、核心概念

  1. 寄存器:CPU内部的高速存储单元(如EAX、EBX、x86中的RAX、ARM中的R0等)

  2. 内存地址:变量存储在内存中的位置(如 0x1000

  3. 指令:操作寄存器和内存的命令(如 MOVSTRLDR

二、基础赋值场景

场景1:立即数赋值(直接赋值数字)

; x86汇编示例:将数字5赋给寄存器EAX
MOV EAX, 5
; ARM汇编示例:将数字5赋给寄存器R0
MOV R0, #5

场景2:寄存器到寄存器的赋值

; x86:将EAX的值复制到EBX
MOV EBX, EAX
; ARM:将R0的值复制到R1
MOV R1, R0

三、变量赋值的三种典型情况

1. 全局变量(存储在数据段)

; x86示例
section .data
    myVar DD 0     ; 定义一个32位全局变量,初始值0

section .text
    MOV EAX, 10    ; 将10存入EAX
    MOV [myVar], EAX ; 将EAX的值存入myVar对应的内存地址

2. 局部变量(存储在栈中)

 

; x86示例:在栈上分配一个局部变量
sub esp, 4       ; 分配4字节空间(32位系统)
mov [esp], 20    ; 将20存入栈顶位置(变量赋值)

; 等效于C语言:
; int localVar = 20;

3. 静态变量(存储在数据段/BSS段)

; x86示例:未初始化的静态变量
section .bss
    staticVar RESD 1  ; 保留4字节空间

section .text
    MOV DWORD [staticVar], 30 ; 赋值为30

四、不同数据类型的处理

1. 整数类型

; x86:赋值32位整数
MOV DWORD [myInt], 42 ; DWORD表示4字节操作

2. 数组

; x86:访问数组元素
mov eax, [array + 4] ; 获取array[1](假设每个元素4字节)

3. 指针

; x86:指针间接赋值
mov ebx, [pointer] ; 先获取指针指向的地址
mov [ebx], 100     ; 向该地址写入100

五、关键差异总结

六、实践建议

  1. 使用调试工具:通过GDB或OllyDbg观察赋值过程

  2. 对比C代码:编写简单C程序,用gcc -S生成汇编代码

  3. 注意架构差异:x86使用MOV内存到寄存器需要显式操作,ARM需要LDR/STR

例如以下C代码:

int main() {
    int a = 10;
    int b = a;
    return 0;
}

生成的x86汇编关键部分:

mov     DWORD [ebp-4], 10    ; a = 10
mov     eax, DWORD [ebp-4]    ; 将a的值加载到eax
mov     DWORD [ebp-8], eax    ; b = eax中的值

高级语言的变量赋值本质上是 通过寄存器中转,在内存和CPU之间传递数据 的过程。

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2314222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

页面白屏出现的原因

🤖 作者简介:水煮白菜王,一位前端劝退师 👻 👀 文章专栏: 前端专栏 ,记录一下平时在博客写作中,总结出的一些开发技巧和知识归纳总结✍。 感谢支持💕💕&#…

【大模型统一集成项目】让 AI 聊天更丝滑:WebSocket 实现流式对话!

🌟 在这系列文章中,我们将一起探索如何搭建一个支持大模型集成项目 NexLM 的开发过程,从 架构设计 到 代码实战,逐步搭建一个支持 多种大模型(GPT-4、DeepSeek 等) 的 一站式大模型集成与管理平台&#xff…

【2025】Electron Git Desktop 实战一(上)(架构及首页设计开发)

源代码仓库: Github仓库【electron_git】 Commit : bb40040 Github Desktop 页面分析 本节目标: 1、实现类似Github Desktop的「空仓库」提示页 2、添加本地仓库逻辑编写从 Github Desktop 我们看到 他的 主要页面分为三个区域 Head头部区域…

14 | fastgo 三层架构设计

提示: 所有体系课见专栏:Go 项目开发极速入门实战课; 在实现业务代码之前,还需要先设计一个合理的软件架构。一个好的软件架构不仅可以大大提高项目的迭代速度,还可以降低项目的阅读和维护难度。目前,行业中…

【机器学习-基础知识】统计和贝叶斯推断

1. 概率论基本概念回顾 1. 概率分布 定义: 概率分布(Probability Distribution)指的是随机变量所有可能取值及其对应概率的集合。它描述了一个随机变量可能取的所有值以及每个值被取到的概率。 对于离散型随机变量,使用概率质量函数来描述。对于连续型随机变量,使用概率…

面向对象Demo01

面向对象 什么是面向对象 回顾方法的定义 package oop; ​ import java.io.IOException; ​ public class Demo01 {public static void main(String[] args) {}//public String sayHello() {return "hello, world!";}public void sayHi() {return;}public int max(i…

C++设计模式-抽象工厂模式:从原理、适用场景、使用方法,常见问题和解决方案深度解析

一、模式基本概念 1.1 定义与核心思想 抽象工厂模式(Abstract Factory Pattern)是创建型设计模式的集大成者,它通过提供统一的接口来创建多个相互关联或依赖的对象族,而无需指定具体类。其核心思想体现在两个维度: …

solana区块链地址生成

solana官网地址:https://solana.com 先引入相关依赖solana/web3.js;bip39;ethereumjs/wallet 生成助记词 const mnemonic bip39.generateMnemonic(); 生成种子 const seed bip39.mnemonicToSeedSync(mnemonic); 生成密钥对 const root hdkey.EthereumHDKey.from…

基于python的升级队列加速决策

a-f大等级是3级 a-c建筑每升1级分别需要8天 d-f建筑每升1级分别需要10天 目前以下建筑队列正在从0级升至1级 建筑A升级需要7天05:16:20 建筑b升级需要06:06:54 建筑c升级需要00:37:00 建筑d升级需要…

Ragflow技术栈分析及二次开发指南

Ragflow是目前团队化部署大模型+RAG的优质方案,不过其仍不适合直接部署使用,本文将从实际使用的角度,对其进行二次开发。 1. Ragflow 存在问题 Ragflow 开源仓库地址:https://github.com/infiniflow/ragflow Ragflow 当前版本: v0.17.0 Ragflow 目前主要存在以下问题: …

1.7 双指针专题:三数之和(medium)

1.题目链接 15. 三数之和 - 力扣(LeetCode)https://leetcode.cn/problems/3sum/submissions/609626561/ 2.题目描述 给你⼀个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满⾜ i ! j、i ! k 且 j ! k ,同时…

【JavaEE】Spring Boot配置文件

目录 一、Spring Boot配置文件简介二、properties 配置⽂件说明2.1 properties 基本语法2.2 value("${}")读取配置⽂件 三、yml 配置文件说明3.1 yml 基本格式3.2 yml 配置数据类型 及 读取3.3 yml配置对象及读取ConfigurationProperties(prefix "")3.4 配…

行为模式---策略模式

概念 策略模式是一种行为设计摸是,它的核心思想是将一些列的算法封装成独立的对象,并使它们可以相互替换,通过上下文进行调用。 策略模式通过算法抽象为独立的策略类,客户端可以根据自身需求选择不同的策略类来完成任务、这种方…

Word 小黑第15套

对应大猫16 修改样式集 导航 -查找 第一章标题不显示 再选中文字 点击标题一 修改标题格式 格式 -段落 -换行和分页 勾选与下段同页 添加脚注 (脚注默认位于底部 )在脚注插入文档属性: -插入 -文档部件 -域 类别选择文档信息,域…

OSPF:虚链路

一、虚链路概念 在OSPF中,虚链路(Virtual Link) 是一种逻辑连接,用于解决因网络设计或扩展导致的区域无法直接连接到骨干区域(Area 0)的问题。它是通过中间区域(Transit Area)在两个…

网络安全事件响应--应急响应(windows)

应用系统日志 Windows主要有以下三类日志记录系统事件:应用程序日志、系统日志和安全日志。 系统和应用程序日志存储着故障排除信息,对于系统管理员更为有用。安全日志记录着事件审计信息,包括用户验证(登录、远程访问等&#x…

DataEase:一款国产开源数据可视化分析工具

DataEase 是由飞致云开发的一款基于 Web 的数据可视化 BI 工具,支持丰富的数据源连接,能够通过拖拉拽方式快速制作图表,帮助用户快速分析业务数据并洞察其趋势,为企业的业务改进与优化提供支持。 DataEase 的优势在于:…

RTK与RTD基础原理

(文中的部分图片是摘自其他博主的文章,由于比较久,忘记原本链接了,侵删) GPS定位原理 卫星自身有自己的星历与原子钟,因此卫星知道自身准确的空间坐标与时间。因为每个卫星都有原子钟,因此每颗卫星的时间基本上都是相…

Python读取显示Latex的公式文档,Python加载显示markdown文件。

平时用LLM大语言模型去解释文献里面的公式含义直接复制的格式word看不懂,基于这个web可以正常加载显示。 下面是读取的效果展示:下面程序保存为stl_read.py然后运行下面指令。 streamlit run stl_read.pyimport streamlit as st import base64 import …

mapbox高阶,结合threejs(threebox)添加extrusion挤出几何体,并添加侧面窗户贴图和楼顶贴图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️threebox extrusion挤出几何体二、🍀…