티스토리 뷰

반응형



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)

흔한 Node.js/Java 백엔드 개발자입니다
Ubuntu와 MacOS 데스크탑 개발 환경을 선호합니다
최근에는 vscode와 IntelliJ를 사용하고 있습니다
vscode에는 neovim, IntelliJ는 ideaVim
개발용 키보드는 역시 HHKB Pro 2 무각입니다
락 밴드에서 드럼을 쳤습니다

댓글쓰기 폼
«   2021/10   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
글 보관함
Total
3,243,331
Today
57
Yesterday
326