📄 main.asm
字号:
xdata$x SEGMENT DWORD USE32 PUBLIC 'CONST'
xdata$x ENDS
; COMDAT ??_R0?AVfailure@ios_base@std@@@8
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
_DATA ENDS
; COMDAT __TI2?AVlogic_error@std@@
xdata$x SEGMENT DWORD USE32 PUBLIC 'CONST'
xdata$x ENDS
; COMDAT __TI3?AVoverflow_error@std@@
xdata$x SEGMENT DWORD USE32 PUBLIC 'CONST'
xdata$x ENDS
; COMDAT __CT??_R0?AVdomain_error@std@@@8??0domain_error@std@@QAE@ABV01@@Z28
xdata$x SEGMENT DWORD USE32 PUBLIC 'CONST'
xdata$x ENDS
; COMDAT __CT??_R0?AVruntime_error@std@@@8??0runtime_error@std@@QAE@ABV01@@Z28
xdata$x SEGMENT DWORD USE32 PUBLIC 'CONST'
xdata$x ENDS
; COMDAT __CTA2?AVbad_typeid@std@@
xdata$x SEGMENT DWORD USE32 PUBLIC 'CONST'
xdata$x ENDS
; COMDAT ??_R0?AVinvalid_argument@std@@@8
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
_DATA ENDS
; COMDAT ??_R0?AVrange_error@std@@@8
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
_DATA ENDS
; COMDAT __TI2?AVbad_exception@std@@
xdata$x SEGMENT DWORD USE32 PUBLIC 'CONST'
xdata$x ENDS
; COMDAT ?_C@?1??_Nullstr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@CAPBDXZ@4DB
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
; COMDAT __CT??_R0?AVlogic_error@std@@@8??0logic_error@std@@QAE@ABV01@@Z28
xdata$x SEGMENT DWORD USE32 PUBLIC 'CONST'
xdata$x ENDS
; COMDAT __TI2?AVbad_alloc@std@@
xdata$x SEGMENT DWORD USE32 PUBLIC 'CONST'
xdata$x ENDS
; COMDAT ??_R0?AVbad_exception@std@@@8
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
_DATA ENDS
; COMDAT __CTA3?AVout_of_range@std@@
xdata$x SEGMENT DWORD USE32 PUBLIC 'CONST'
xdata$x ENDS
FLAT GROUP _DATA, CONST, _BSS, CRT$XCA, CRT$XCU, CRT$XCL, CRT$XCC, CRT$XCZ, xdata$x
ASSUME CS: FLAT, DS: FLAT, SS: FLAT
endif
PUBLIC ?mCircleFactory@Application@@0PAVCircleFactory@@A ; Application::mCircleFactory
PUBLIC ?backbuffer@@3PAUHDC__@@A ; backbuffer
PUBLIC ?backbufferbitmap@@3PAUHBITMAP__@@A ; backbufferbitmap
PUBLIC ?textbuffer@@3PADA ; textbuffer
_BSS SEGMENT
?mCircleFactory@Application@@0PAVCircleFactory@@A DD 01H DUP (?) ; Application::mCircleFactory
?backbuffer@@3PAUHDC__@@A DD 01H DUP (?) ; backbuffer
?backbufferbitmap@@3PAUHBITMAP__@@A DD 01H DUP (?) ; backbufferbitmap
?textbuffer@@3PADA DB 0400H DUP (?) ; textbuffer
_BSS ENDS
CRT$XCU SEGMENT
_$S19 DD FLAT:_$E18
_$S25 DD FLAT:_$E24
_$S32 DD FLAT:_$E31
CRT$XCU ENDS
_DATA SEGMENT
$SG53997 DB 'spheretest_window_class', 00H
$SG53999 DB 'Sphere Tree for Game Programming Gems 2 : by John W. Rat'
DB 'cliff.', 00H
ORG $+1
$SG54000 DB 'spheretest_window_class', 00H
_DATA ENDS
PUBLIC ?Startup@Application@@QAEHPAUHINSTANCE__@@@Z ; Application::Startup
PUBLIC ?Render@Application@@QAEHPAUHDC__@@@Z ; Application::Render
PUBLIC _WinMain@16
EXTRN ??2@YAPAXI@Z:NEAR ; operator new
EXTRN ??3@YAXPAX@Z:NEAR ; operator delete
EXTRN __imp__DeleteDC@4:NEAR
EXTRN __imp__DeleteObject@4:NEAR
EXTRN _exit:NEAR
EXTRN _atoi:NEAR
EXTRN __imp__timeGetTime@0:NEAR
EXTRN __imp__Sleep@4:NEAR
EXTRN __imp__TranslateMessage@4:NEAR
EXTRN __imp__DispatchMessageA@4:NEAR
EXTRN __imp__PeekMessageA@20:NEAR
EXTRN ??1CircleFactory@@QAE@XZ:NEAR ; CircleFactory::~CircleFactory
EXTRN __imp__GetDC@4:NEAR
EXTRN __imp__ReleaseDC@8:NEAR
_TEXT SEGMENT
_appInstance$ = 8
_cmdLine$ = 16
_msg$ = -28
_WinMain@16 PROC NEAR
; 26 : {
push ebp
mov ebp, esp
sub esp, 28 ; 0000001cH
; 27 : MSG msg;
; 28 :
; 29 : int count = atoi( cmdLine );
mov eax, DWORD PTR _cmdLine$[ebp]
push ebx
push esi
push edi
push eax
call _atoi
mov edi, eax
add esp, 4
; 30 : if ( count < 20 ) count = 1000; // default value is 1000
cmp edi, 20 ; 00000014H
jge SHORT $L53954
mov edi, 1000 ; 000003e8H
; 31 : if ( count > 10000 ) count = 10000;
jmp SHORT $L53955
$L53954:
cmp edi, 10000 ; 00002710H
jle SHORT $L53955
mov edi, 10000 ; 00002710H
$L53955:
; 32 :
; 33 : Application* App = new Application(count);
push 1127 ; 00000467H
call ??2@YAPAXI@Z ; operator new
mov esi, eax
xor ebx, ebx
add esp, 4
cmp esi, ebx
je SHORT $L55665
mov DWORD PTR [esi+1123], edi
mov BYTE PTR [esi+1120], bl
mov DWORD PTR [esi], ebx
mov DWORD PTR [esi+52], ebx
mov DWORD PTR [esi+56], ebx
call DWORD PTR __imp__timeGetTime@0
mov DWORD PTR [esi+60], eax
mov BYTE PTR [esi+1122], bl
mov BYTE PTR [esi+1121], bl
jmp SHORT $L55666
$L55665:
xor esi, esi
$L55666:
; 34 :
; 35 : if (App->Startup(appInstance))
mov ecx, DWORD PTR _appInstance$[ebp]
push ecx
mov ecx, esi
call ?Startup@Application@@QAEHPAUHINSTANCE__@@@Z ; Application::Startup
test eax, eax
je SHORT $L55751
; 36 : {
; 37 : delete (App);
cmp esi, ebx
je SHORT $L55708
mov edi, DWORD PTR ?mCircleFactory@Application@@0PAVCircleFactory@@A ; Application::mCircleFactory
cmp edi, ebx
je SHORT $L55705
mov ecx, edi
call ??1CircleFactory@@QAE@XZ ; CircleFactory::~CircleFactory
push edi
call ??3@YAXPAX@Z ; operator delete
add esp, 4
$L55705:
push esi
call ??3@YAXPAX@Z ; operator delete
add esp, 4
$L55708:
; 38 : exit(-1);
push -1
call _exit
$L55753:
$L55751:
; 39 : }
; 40 :
; 41 : while (!App->ExitApp())
mov al, BYTE PTR [esi+1120]
test al, al
jne SHORT $L53966
; 47 : }
; 48 :
; 49 : App->Process();
mov ebx, DWORD PTR __imp__GetDC@4
$L53965:
; 42 : {
; 43 : if (PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE))
push 1
push 0
push 0
lea edx, DWORD PTR _msg$[ebp]
push 0
push edx
call DWORD PTR __imp__PeekMessageA@20
test eax, eax
je SHORT $L53967
; 44 : {
; 45 : TranslateMessage(&msg);
lea eax, DWORD PTR _msg$[ebp]
push eax
call DWORD PTR __imp__TranslateMessage@4
; 46 : DispatchMessage(&msg);
lea ecx, DWORD PTR _msg$[ebp]
push ecx
call DWORD PTR __imp__DispatchMessageA@4
$L53967:
; 47 : }
; 48 :
; 49 : App->Process();
mov edx, DWORD PTR [esi+52]
push edx
call ebx
mov edi, eax
mov ecx, esi
push edi
call ?Render@Application@@QAEHPAUHDC__@@@Z ; Application::Render
mov eax, DWORD PTR [esi+52]
push edi
push eax
call DWORD PTR __imp__ReleaseDC@8
push 1
call DWORD PTR __imp__Sleep@4
mov al, BYTE PTR [esi+1120]
test al, al
je SHORT $L53965
; 39 : }
; 40 :
; 41 : while (!App->ExitApp())
xor ebx, ebx
$L53966:
; 50 : }
; 51 :
; 52 : App->Shutdown();
mov ecx, DWORD PTR ?backbufferbitmap@@3PAUHBITMAP__@@A ; backbufferbitmap
push ecx
call DWORD PTR __imp__DeleteObject@4
mov edx, DWORD PTR ?backbuffer@@3PAUHDC__@@A ; backbuffer
push edx
call DWORD PTR __imp__DeleteDC@4
; 53 :
; 54 : delete(App);
cmp esi, ebx
mov DWORD PTR ?backbuffer@@3PAUHDC__@@A, ebx ; backbuffer
je SHORT $L55750
mov edi, DWORD PTR ?mCircleFactory@Application@@0PAVCircleFactory@@A ; Application::mCircleFactory
cmp edi, ebx
je SHORT $L55747
mov ecx, edi
call ??1CircleFactory@@QAE@XZ ; CircleFactory::~CircleFactory
push edi
call ??3@YAXPAX@Z ; operator delete
add esp, 4
$L55747:
push esi
call ??3@YAXPAX@Z ; operator delete
add esp, 4
$L55750:
pop edi
pop esi
; 55 :
; 56 : return 0;
xor eax, eax
pop ebx
; 57 : }
mov esp, ebp
pop ebp
ret 16 ; 00000010H
$L55752:
_WinMain@16 ENDP
_TEXT ENDS
PUBLIC ??0Application@@QAE@H@Z ; Application::Application
_TEXT SEGMENT
_simcount$ = 8
??0Application@@QAE@H@Z PROC NEAR ; Application::Application
; 63 : {
push ebp
mov ebp, esp
; 64 : mSimulationCount = simcount;
mov eax, DWORD PTR _simcount$[ebp]
push ebx
push esi
mov esi, ecx
; 65 : mExitApplication = false;
xor ebx, ebx
mov DWORD PTR [esi+1123], eax
mov BYTE PTR [esi+1120], bl
; 66 : mAppInstance = NULL;
mov DWORD PTR [esi], ebx
; 67 : mWindow = NULL;
mov DWORD PTR [esi+52], ebx
; 68 : mFrameRate = 0;
mov DWORD PTR [esi+56], ebx
; 69 : mUpdateFrameRate = timeGetTime();
call DWORD PTR __imp__timeGetTime@0
mov DWORD PTR [esi+60], eax
; 70 : mStep = false;
mov BYTE PTR [esi+1122], bl
; 71 : mPause = false;
mov BYTE PTR [esi+1121], bl
; 72 : }
mov eax, esi
pop esi
pop ebx
pop ebp
ret 4
??0Application@@QAE@H@Z ENDP ; Application::Application
_TEXT ENDS
PUBLIC ??1Application@@QAE@XZ ; Application::~Application
_TEXT SEGMENT
??1Application@@QAE@XZ PROC NEAR ; Application::~Application
; 77 : {
push esi
; 78 : delete (mCircleFactory);
mov esi, DWORD PTR ?mCircleFactory@Application@@0PAVCircleFactory@@A ; Application::mCircleFactory
test esi, esi
je SHORT $L55758
mov ecx, esi
call ??1CircleFactory@@QAE@XZ ; CircleFactory::~CircleFactory
push esi
call ??3@YAXPAX@Z ; operator delete
add esp, 4
$L55758:
pop esi
; 79 : }
ret 0
??1Application@@QAE@XZ ENDP ; Application::~Application
_TEXT END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -