์ฐ์ ๊ธฐ์ต ํ๋ ๊ฒ ๋ณต์ต.
~cpp int main(){ return; } .globl main .type main, @function main: pushl %ebp // ํ์ฌ์ ๋ช ๋ น์ด Counter๋ฅผ Stack์ ์ ์ฅํจ. ์ด ํ๋ก๊ทธ๋จ์ด ๋๋๋ฉด stack์์ ๋ค์ ๊บผ๋. movl %esp, %ebp subl $8, %esp // ๋น ์คํ ํ ๋น andl $-16, %esp movl $0, %eax // eax = 0 addl $15, %eax // eax = 15 addl $15, %eax // eax = 15 11110(Bin) shrl $4, %eax // eax = 0xF0000001 11110000000000000000000000000001(bin) sall $4, %eax // eax = 0x1F 00000000000000000000000000011111(bin) subl %eax, %esp movl $0, %eax // return 0; leave // ํ๋ก๊ทธ๋จ์ ์ข ๋ฃ. stack์์ ํ๋ก๊ทธ๋จ ์์ ์ ์ ๋ช ๋ น์ด๋ฅผ ๊บผ๋ด %ebp์ ์ง์ด ๋ฃ๋ ์ญํ . ret // ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ.
push - ret
Windows OS๊ฐ ์๋ DOS OS๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ด๋ฆฌ๋ฅผ Kernel(OS์ Core)์ด ์๋ Program์์ ํด์ฃผ๊ฒ ๋๋ค.
๋ฐ๋ผ์ ํ๋ก๊ทธ๋จ์ด ์์ํ๊ณ ๋๊ฐ๋์๋ ์ด๋์ ํ๋ก๊ทธ๋จ์ ์์ํ๊ณ ๋๋๋์ง ์์น๋ฅผ ์ ์ฅ(push)ํ๊ณ ๊ผญ ๋ฐํ(leave)ํด์ผํ๋ค.
Windows OS๊ฐ ์๋ DOS OS๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ด๋ฆฌ๋ฅผ Kernel(OS์ Core)์ด ์๋ Program์์ ํด์ฃผ๊ฒ ๋๋ค.
๋ฐ๋ผ์ ํ๋ก๊ทธ๋จ์ด ์์ํ๊ณ ๋๊ฐ๋์๋ ์ด๋์ ํ๋ก๊ทธ๋จ์ ์์ํ๊ณ ๋๋๋์ง ์์น๋ฅผ ์ ์ฅ(push)ํ๊ณ ๊ผญ ๋ฐํ(leave)ํด์ผํ๋ค.