文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>昨天学的一个调用swap程序(C对应AT&T汇编)

昨天学的一个调用swap程序(C对应AT&T汇编)

时间:2009-07-29  来源:jimylion

这是昨天做的一个实验,用GDB进行调试,可以看到寄存器等信息,从而理解栈在函数调用中起的作用,也再学了学AT&T汇编语言,呵呵。不多说了   源程序如下:  

#include <stdio.h>
void swap(int *x, int *y);
int main(void)
{
    int a=1;
    int b=2;
    swap(&a,&b);
    printf("%d%d\n",a,b);
    return 0;
}
void swap(int *x, int *y)
{
    int t0 = *x;
    int t1 = *y;
    *x = t1;
    *y = t0;
}

 

汇编程序如下:

    .file    "swap.c"
    .section    .rodata
.LC0:
    .string    "%d%d\n"
    .text
.globl main
    .type    main,@function
main:
    pushl    %ebp
    movl    %esp, %ebp
    subl    $8, %esp
    andl    $-16, %esp
    movl    $0, %eax
    subl    %eax, %esp
    movl    $1, -4(%ebp)
    movl    $2, -8(%ebp)
    subl    $8, %esp
    leal    -8(%ebp), %eax
    pushl    %eax
    leal    -4(%ebp), %eax
    pushl    %eax
    call    swap
    addl    $16, %esp
    subl    $4, %esp
    pushl    -8(%ebp)
    pushl    -4(%ebp)
    pushl    $.LC0
    call    printf
    addl    $16, %esp
    movl    $0, %eax
    leave
    ret
.Lfe1:
    .size    main,.Lfe1-main
.globl swap
    .type    swap,@function
swap:
    pushl    %ebp
    movl    %esp, %ebp
    subl    $8, %esp
    movl    8(%ebp), %eax
    movl    (%eax), %eax
    movl    %eax, -4(%ebp)
    movl    12(%ebp), %eax
    movl    (%eax), %eax
    movl    %eax, -8(%ebp)
    movl    8(%ebp), %edx
    movl    -8(%ebp), %eax
    movl    %eax, (%edx)
    movl    12(%ebp), %edx
    movl    -4(%ebp), %eax
    movl    %eax, (%edx)
    leave
    ret
.Lfe2:
    .size    swap,.Lfe2-swap
    .ident    "GCC: (GNU) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)"

 

分析待续;

相关阅读 更多 +
排行榜 更多 +
王权陨落破解版内置菜单下载

王权陨落破解版内置菜单下载

策略塔防 下载
漫威秘法狂潮手游下载

漫威秘法狂潮手游下载

策略塔防 下载
狙击手的反击最新版

狙击手的反击最新版

飞行射击 下载