1
回答
请问下这句汇编语句是什么意思
华为云实践训练营,热门技术免费实践!>>>   

写了几行的代码,如下:


#include <stdio.h>
int main()
{
    char *ptr="hello world!";
    printf("string is %s.\n",ptr);
    return 0;
}
执行gcc -S test.c得到汇编源文件,如下:



.file   "test.c"
        .section        .rodata
.LC0:
        .string "hello world!"
.LC1:
        .string "string is %s.\n"
        .text
        .globl  main
        .type   main, @function
main:
.LFB0:
        .cfi_startproc
        pushl   %ebp
        .cfi_def_cfa_offset 8
        .cfi_offset 5, -8
        movl    %esp, %ebp
        .cfi_def_cfa_register 5
        andl    $-16, %esp
        subl    $32, %esp
        movl    $.LC0, 28(%esp)
        movl    $.LC1, %eax
	movl    28(%esp), %edx        # 这句是红色的,没显示出来,唉
	movl    %edx, 4(%esp)         # 这句也是红色的,就是这句和上句不懂
        movl    %eax, (%esp)
        call    printf
        movl    $0, %eax
        leave
        .cfi_restore 5
        .cfi_def_cfa 4, 4
        ret
        .cfi_endproc
.LFE0:
        .size   main, .-main
        .ident  "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3"
        .section        .note.GNU-stack,"",@progbits

其中标注为红色的那两句代码是什么作用啊?为什么把28(%esp)->movl->4(%esp)?

下面是我对这段代码的理解画的栈区示意图,不知道是否正确,图中红色的地方搞不明白,谁能解答一下啊?

<无标签>
举报
痞子蔡
发帖于4年前 1回/575阅
顶部