티스토리 뷰



for문 실행 순서를 까먹었다. 그래서 확인. 인터넷에 찾으면 나오겠지만 요즘 괜히 직접 확인해보는 악취미가 생겼다. (gcc 4.4.7 / gdb 7.2)


#include "stdio.h"

int main(void) {
	int i;
	for(i=0; i<10; i++);
}
(gdb) set disassembly-flavor intel
(gdb) disas main
Dump of assembler code for function main:
   0x08048394 <+0>:	push   ebp
   0x08048395 <+1>:	mov    ebp,esp
   0x08048397 <+3>:	sub    esp,0x10
   0x0804839a <+6>:	mov    DWORD PTR [ebp-0x4],0x0
   0x080483a1 <+13>:	jmp    0x80483a7 <main+19>
   0x080483a3 <+15>:	add    DWORD PTR [ebp-0x4],0x1
   0x080483a7 <+19>:	cmp    DWORD PTR [ebp-0x4],0x9
   0x080483ab <+23>:	jle    0x80483a3 <main+15>
   0x080483ad <+25>:	leave  
   0x080483ae <+26>:	ret    
End of assembler dump.
(gdb)

for 문

i = 0 i < 10 판단  아닐시 내부문 실행 후 i++, 반대의 경우 for문 종료


하는김에 while이랑 do-while도 해봤다.

#include "stdio.h"

int main(void) {
	int i;
	while(i < 10) {
		i++;
	}
	return 0;
}
(gdb) set disassembly-flavor intel
(gdb) disas main
Dump of assembler code for function main:
   0x08048394 <+0>:	push   ebp
   0x08048395 <+1>:	mov    ebp,esp
   0x08048397 <+3>:	sub    esp,0x10
   0x0804839a <+6>:	jmp    0x80483a0 <main+12>
   0x0804839c <+8>:	add    DWORD PTR [ebp-0x4],0x1
   0x080483a0 <+12>:	cmp    DWORD PTR [ebp-0x4],0x9
   0x080483a4 <+16>:	jle    0x804839c <main+8>
   0x080483a6 <+18>:	mov    eax,0x0
   0x080483ab <+23>:	leave  
   0x080483ac <+24>:	ret    
End of assembler dump.
(gdb)

while 문

i 초기화를 안해줬네; 흐름 파악하는데는 노상관

i = 0 i < 10 판단  아닐시 내부문 실행 후 i++, 반대의 경우 while문 종료. for랑 똑같다.


#include "stdio.h"

int main(void) {
	int i;
	do {
		i++;
	} while(i < 10);
}
(gdb) set disassembly-flavor intel
(gdb) disas main
Dump of assembler code for function main:
   0x08048394 <+0>:	push   ebp
   0x08048395 <+1>:	mov    ebp,esp
   0x08048397 <+3>:	sub    esp,0x10
   0x0804839a <+6>:	add    DWORD PTR [ebp-0x4],0x1
   0x0804839e <+10>:	cmp    DWORD PTR [ebp-0x4],0x9
   0x080483a2 <+14>:	jle    0x804839a <main+6>
   0x080483a4 <+16>:	leave  
   0x080483a5 <+17>:	ret    
End of assembler dump.
(gdb)

do while 문

마찬가지로 i 초기화를 안해줌; 하지만 역시나 흐름 파악하는데는 노상관

for, while이랑은 조금 다르다. 일단 for, while은 내부문 실행 전에 조건검사를 한번하는데 do-while은 내부문을 한번 실행하고 조건검사.


끝. 이젠 안까먹겠지.



프로필사진

Yowu (Yu Yongwoo)

백엔드 개발 정점을 꿈꾸는 흔한 개발자입니다
우분투 데스크탑 개발 환경을 매우 선호합니다
최근에는 vscode에 vim 모드 올려서 쓰고 있습니다
개발용 키보드는 역시 해피해킹 프로2 무각입니다
락 밴드에서 드럼을 꽤나 오래 쳤었습니다