70,023
社区成员




TITLE b.c
.386P
include listing.inc
if @Version gt 510
.model FLAT
else
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
_DATA ENDS
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
_BSS SEGMENT DWORD USE32 PUBLIC 'BSS'
_BSS ENDS
_TLS SEGMENT DWORD USE32 PUBLIC 'TLS'
_TLS ENDS
FLAT GROUP _DATA, CONST, _BSS
ASSUME CS: FLAT, DS: FLAT, SS: FLAT
endif
PUBLIC _g_f
;---------------------------------数据段 start
_DATA SEGMENT
COMM _g_e:DWORD ;g_e
_sc DD 05H ;sc
_g_f DD 03H ;g_f
_?sg@?1??main@@9@9 DD 0aH ;sg
_DATA ENDS
;-------------------------------数据段 end
PUBLIC _main
;-------------------------------BSS段 start
;BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。
;注意和数据段的区别,BSS存放的是未初始化的全局变量和静态变量,数据段存放的是初始化后的全局变量和静态变量。
_BSS SEGMENT
_sd DD 01H DUP (?) ;sd
_?sh@?1??main@@9@9 DD 01H DUP (?) ;sh
_BSS ENDS
;------------------------------BSS段 end
_TEXT SEGMENT
_a$ = -4
_b$ = -8
_main PROC NEAR
; File b.c
; Line 10
push ebp
mov ebp, esp
sub esp, 8
; Line 14
mov DWORD PTR _a$[ebp], 25 ; 00000019H
; Line 17
mov DWORD PTR _?sh@?1??main@@9@9, 100 ; 00000064H
; Line 18
mov DWORD PTR _sd, 20 ; 00000014H
; Line 19
mov DWORD PTR _g_e, 30 ; 0000001eH
; Line 21
mov DWORD PTR _b$[ebp], 18 ; 00000012H
; Line 23
mov esp, ebp
pop ebp
ret 0
_main ENDP
_TEXT ENDS
END
#include <stdio.h>
static int sc = 5; //静态变量
static int sd;
int g_e;
int g_f = 3; //全局变量
void main()
{
static int sg = 10; //静态变量
static int sh;
int a = 25; //局部变量
int b;
sh = 100;
sd = 20;
g_e = 30;
b = 18;
}
TITLE b.c
.386P
include listing.inc
if @Version gt 510
.model FLAT
else
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
_DATA ENDS
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
_BSS SEGMENT DWORD USE32 PUBLIC 'BSS'
_BSS ENDS
_TLS SEGMENT DWORD USE32 PUBLIC 'TLS'
_TLS ENDS
FLAT GROUP _DATA, CONST, _BSS
ASSUME CS: FLAT, DS: FLAT, SS: FLAT
endif
PUBLIC _g_f
;---------------------------------数据段 start
_DATA SEGMENT
COMM _g_e:DWORD ;g_e
_sc DD 05H ;sc
_g_f DD 03H ;g_f
_?sg@?1??main@@9@9 DD 0aH ;sg
_DATA ENDS
;-------------------------------数据段 end
PUBLIC _main
;-------------------------------BSS段 start
;BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。
;注意和数据段的区别,BSS存放的是未初始化的全局变量和静态变量,数据段存放的是初始化后的全局变量和静态变量。
_BSS SEGMENT
_sd DD 01H DUP (?) ;sd
_?sh@?1??main@@9@9 DD 01H DUP (?) ;sh
_BSS ENDS
;------------------------------BSS段 end
_TEXT SEGMENT
_a$ = -4
_b$ = -8
_main PROC NEAR
; File b.c
; Line 10
push ebp
mov ebp, esp
sub esp, 8
; Line 14
mov DWORD PTR _a$[ebp], 25 ; 00000019H
; Line 17
mov DWORD PTR _?sh@?1??main@@9@9, 100 ; 00000064H
; Line 18
mov DWORD PTR _sd, 20 ; 00000014H
; Line 19
mov DWORD PTR _g_e, 30 ; 0000001eH
; Line 21
mov DWORD PTR _b$[ebp], 18 ; 00000012H
; Line 23
mov esp, ebp
pop ebp
ret 0
_main ENDP
_TEXT ENDS
END
全局变量和静态数据都在全局数据区。