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  
posted @   风清洋  阅读(111)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示