C代码的汇编不明白?

时间:2013-08-21 08:30:19

标签: c visual-studio assembly operating-system

我在visual studio中编写了一个简单的c代码。这是代码..

    #include<stdio.h>
    int global;
    int onemore=5;
    int main(){
        int local;
        static int slocal;
        return 0;
    }

这是在visual studio中编译后的程序集。

; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.21022.08 

    TITLE   c:\Users\amit_bhaira\Documents\Visual Studio 2008\Projects\AssOneQuestion1\AssOneQuestion1\question1.c
    .686P
    ->.XMM
    ->include listing.inc
    ->.model flat   

->INCLUDELIB MSVCRTD
INCLUDELIB OLDNAMES

PUBLIC  _onemore
_DATA   SEGMENT
COMM    _global:DWORD
_onemore DD 05H
_DATA   ENDS
PUBLIC  _main
->EXTRN__RTC_Shutdown:PROC
->EXTRN__RTC_InitBase:PROC
;   COMDAT rtc$TMZ
; File c:\users\amit_bhaira\documents\visual studio 2008\projects\assonequestion1\assonequestion1\question1.c
rtc$TMZ SEGMENT
->__RTC_Shutdown.rtc$TMZ DD FLAT:__RTC_Shutdown
rtc$TMZ ENDS
;   COMDAT rtc$IMZ
rtc$IMZ SEGMENT
__RTC_InitBase.rtc$IMZ DD FLAT:__RTC_InitBase
; Function compile flags: /Odtp /RTCsu /ZI
rtc$IMZ ENDS
;   COMDAT _main
_TEXT   SEGMENT
_main   PROC                        ; COMDAT

; 4    : int main(){

    push    ebp
    mov ebp, esp
    sub esp, 204                ; 000000ccH
    ->push  ebx  
    ->push  esi
    ->push  edi //why these(ebx,esi and edi) registers are pushed into the stack ??  
    lea edi, DWORD PTR [ebp-204]
    mov ecx, 51                 ; 00000033H
    mov eax, -858993460             ; ccccccccH
    rep stosd

; 5    :    int local;
; 6    :    ->static int slocal;  
; 7    :    return 0;

    xor eax, eax

; 8    : }

    pop edi
    pop esi
    pop ebx
    mov esp, ebp
    pop ebp
    ret 0
_main   ENDP
_TEXT   ENDS
END

我在我没有得到的线前放了一个箭头( - &gt;)。所以请解释一下。

虽然我在main方法中已经采用了一个静态变量,但是没有采取特殊的步骤 编译器,这是什么意思。静态varialbe也将像其他本地一样处理 变量,静态变量没有特殊存储空间。如果是,那么下一个函数调用如何保留静态变量的内存?

0 个答案:

没有答案