6.汇编语言
汇编语言与机器指令一一对应。汇编语言编写的代码需要经过汇编转为机器代码,机器代码经过反汇编转为汇编代码。
汇编后的程序分为几个段:
_DATA:初始化的全局变量
_BSS:未初始化的全局变量
_TEST:汇编代码
栈
32位windows支持32位寻址,程序运行映射到4G内存地址空间。高位地址 0x7fffffff~0xffffffff 这2g由内核占用。低2g内存由用户程序使用。windows 为一个进程默认分配 1M的栈空间。栈空间由高地址向低地址空间生长。push后 sp的值减小,pop后sp的值增大。
点击查看代码
#include <iostream>
int add(int a, int b){
return a + b;
}
int main(){
int a = 123;
int b = 456;
int c = add(a,b);
printf("%d", c);
}
汇编如下:
int a = 123;
009B2265 mov dword ptr [a],7Bh
int b = 456;
009B226C mov dword ptr [b],1C8h
//声明的变量a,b需要通过 dword ptr 来操作。
int c = add(a,b);
009B2273 mov eax,dword ptr [b]
009B2276 push eax
009B2277 mov ecx,dword ptr [a]
009B227A push ecx //将两个变量值存入eax,ecx中并压栈
009B227B call add (09B1311h) //调用add函数,add就是一个地址
009B2280 add esp,8 //由被调用函数清理两个变量栈空间
009B2283 mov dword ptr [c],eax //把c的值变入eax中作为函数返回值
printf("%d", c);
009B2286 mov eax,dword ptr [c]
009B2289 push eax
009B228A push offset string "%d" (09B9B30h)
009B228F call _printf (09B1424h)
009B2294 add esp,8
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?