반응형
#include <stdio.h>
int main()
{
printf("Hello World");
return 0;
}
.LC0:
.string "Hello World"
main:
push rbp
mov rbp, rsp
mov edi, OFFSET FLAT:.LC0
mov eax, 0
call printf
mov eax, 0
pop rbp
ret
string에 출력할 문자열인 "Hello World"가 저장되어있는 모습이다.
push rbp를 통해 공간을 만들고,
printf 함수를 호출하여 "Hello World"가 출력된다.
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
printf("%d",n);
}
.LC0:
.string "%d"
main:
push rbp
mov rbp, rsp
sub rsp, 16
lea rax, [rbp-4]
mov rsi, rax
mov edi, OFFSET FLAT:.LC0
mov eax, 0
call __isoc99_scanf
mov eax, DWORD PTR [rbp-4]
mov esi, eax
mov edi, OFFSET FLAT:.LC0
mov eax, 0
call printf
mov eax, 0
leave
ret
이번엔 정수 a를 선언하고, 정수를 입력받고, 입력받은 정수를 출력하는 코드이다.
lea rax, [rbp-4]를 통해 정수(4바이트)크기만큼 공간을 확보해주는 모습이다.
그런 후 scanf함수를 호출하여 정수를 입력받아주고,
eax에 입력받은 정수가 있는 위치인 rbp-4의 주소값을 넣어준다.
그리고 eax를 printf 함수를 호출하여 출력시켜준다.
이런 모습은 정수가 아닌 문자값을 넣어줘도 크기만 다를 뿐 행동은 같다.
반응형