U E D R , A S I H C RSS

C/Assembly/Main

μš°μ„  κΈ°μ–΅ ν•˜λŠ” 것 볡슡.

~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)ν•΄μ•Όν•œλ‹€.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:47
Processing time 0.0070 sec