์ด์ ๋ธ๋ฆฌ์ด ๋ถ์ 2 - example 2
* ์ด ๊ฒ์๊ธ์ AT&T ๋ฌธ๋ฒ์ ๋ฐ๋ผ ์์ฑ๋์์ต๋๋ค.
(AT&T ์ Intel ์ฐจ์ด ์ฐธ๊ณ -
.file "example2.c"
.section .rodata
.LC0:
.string "result : %d \n"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $16, %rsp
movl $10, -12(%rbp)
movl $20, -8(%rbp)
movl -8(%rbp), %eax
movl -12(%rbp), %edx
addl %edx, %eax
movl %eax, -4(%rbp)
movl -8(%rbp), %eax
movl -12(%rbp), %edx
addl %edx, %eax
movl %eax, %esi
movl $.LC0, %edi
movl $0, %eax
call printf
movl $0, %eax
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4"
.section .note.GNU-stack,"",@progbits
subq $16, %rsp : ์คํ ํฌ์ธํฐ rsp ๋ฅผ 16 ๋งํผ ๊ฐ์ํ๋ ๊ฒ.
์คํ ๊ณต๊ฐ์ 16 byte ๋งํผ ํ๋ณดํ๊ฒ ๋๋ค.
Allocate 16 bytes for stack frame
movl $10, -12(%rbp) : 10์ rbp ๋ ์ง์คํฐ์ -12 ๋งํผ์ ์ฃผ์์ ์ ์ฅ
(offset -12 in the stack to edx)
: ์ซ์ 10 ์ rbp ๋ก๋ถํฐ 12 byte ๊ณต๊ฐ์ ํ ๋นํ ํ, ๊ทธ ์๋ฆฌ์ ๋ฃ์ ๊ฒ
์ฆ, 12 byte ๋งํผ์ ์์ ๊ณต๊ฐ์ ํ ๋นํ์ฌ ์ซ์ 10์ ์คํ์ ๋ฃ๋ ๊ฒ์ด๋ค.
- ๋ค์ ์ฐ์ฐ์ ์ํ ์ค๋น ์์
movl $20, -8(%rbp) : 20์ rbp ๋ ์ง์คํฐ์ -8 ๋งํผ์ ์ฃผ์์ ์ ์ฅ
movl -8(%rbp), %eax : eax ๋ ์ง์คํฐ์ 20 ์ ์ฅ
rbp ๋ก๋ถํฐ 8 byte ์๋์ ๊ณต๊ฐ์ ์ ์ฅ๋์ด ์๋ ๊ฐ์ eax ๋ ์ง์คํฐ์ ์ ์ฅ
movl -12(%rbp), %edx : edx ๋ ์ง์คํฐ์ (-12(%rbp) ์ ์๋) 10 ์ ์ฅ
addl %edx, %eax : 10 + 20
movl %eax, -4(%rbp) : eax (30) ์ -4(%rbp) ์ ์ ์ฅ
movl -8(%rbp), %eax : 20 ์ eax ์ ์ ์ฅ
movl -12(%rbp), %edx : edx ์ 10 ์ ์ฅ
addl %edx, %eax : 10 + 20
movl %eax, %esi : esi ์ eax ๊ฐ (30) ์ ์ฅ
c์ธ์ด๋ก ํด์ํ ๊ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
#include <stdio.h>
int main(void){
int a = 10;
int b = 20;
int c = a + b;
printf("result : %d \n", a + b);
return 0;
}