变量赋值汇编
目录
二、基础赋值场景
三、变量赋值的三种典型情况
四、不同数据类型的处理
五、关键差异总结
六、实践建议
一、核心概念
-  寄存器:CPU内部的高速存储单元(如EAX、EBX、x86中的RAX、ARM中的R0等) 
-  内存地址:变量存储在内存中的位置(如 0x1000)
-  指令:操作寄存器和内存的命令(如 MOV,STR,LDR)
二、基础赋值场景
场景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 .datamyVar DD 0     ; 定义一个32位全局变量,初始值0section .textMOV EAX, 10    ; 将10存入EAXMOV [myVar], EAX ; 将EAX的值存入myVar对应的内存地址2. 局部变量(存储在栈中)
; x86示例:在栈上分配一个局部变量
sub esp, 4       ; 分配4字节空间(32位系统)
mov [esp], 20    ; 将20存入栈顶位置(变量赋值); 等效于C语言:
; int localVar = 20;3. 静态变量(存储在数据段/BSS段)
; x86示例:未初始化的静态变量
section .bssstaticVar RESD 1  ; 保留4字节空间section .textMOV 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五、关键差异总结

六、实践建议
-  使用调试工具:通过GDB或OllyDbg观察赋值过程 
-  对比C代码:编写简单C程序,用 gcc -S生成汇编代码
-  注意架构差异: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之间传递数据 的过程。
