1

我在 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

我在没有得到的行前面放了一个箭头(->)。所以请解释一下。

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

4

0 回答 0