티스토리 뷰



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)

My MBTI type is ENTP. (Of course I do not believe it 100%, but I want to do that) I use Node.js to develop the backend. I use Ubuntu Linux as my development environment, and I love Vim. I am interested in open source and are keen to contribute. I have a bachelor's degree in computer science from Catholic University and now a software engineer at Plating Inc., I spent about 5 years developing and learning, and I am still interested in software development and culture. Recently, I am interested in React, Serverless structure, Domain Design Driven. Sometimes I play drums in the band.