jmp : 무조건 분기 명령어, 뒤에 라벨을 적어 해당 위치로 이동한다.
j~ : 조건 분기 명령어. 해당 조건에 맞는지 비교하여 맞다면 해당 위치나 변위로 이동한다.
- 분기의 종류 : jz(ZF가 1일때), jns(SF가 1이 아닐 때), jnz(ZF가 1이 아닐 때) 등이 있다.
if 문 분석하기
if( a < 0 )
0041137E jns main+3Bh (41138Bh) -> SF가 1이 아닐 때(0보다 작을 때) main문보다 3Bh 떨어진 곳(41138Bh)로 이동
{
--a;
00411380 mov eax,dword ptr [a]
00411383 sub eax,1
00411386 mov dword ptr [a],eax
00411389 jmp main+4Ch (41139Ch) -> if문이 끝났으므로 밖으로 나와주기 위한 jmp명령(이게 없다면 else if까지 실행)
}
else if( a == 0 )
0041138B cmp dword ptr [a],0
0041138F jne main+43h (411393h) -> 원래라면 jz를 사용해야 맞으나 컴파일러의 최적화에 의해 cmp/jne를 사용
{
}
00411391 jmp main+4Ch (41139Ch) -> else if 문이 끝났으므로 밖으로 나와준다.
else
{
++a;
00411393 mov eax,dword ptr [a]
00411396 add eax,1
00411399 mov dword ptr [a],eax -> else문은 끝부분이므로 굳이 jmp명령어로 밖에 나올 필요가 없다.
}
이를 통하여 if, else if문은 항상 끝에 41139Ch으로 점프한다는 것을 알 수 있다. 이 부분은 중괄호 밖의 파트이다.
'코스웨어 > 13년 스마트컨트롤러' 카테고리의 다른 글
2013년 9월4일 <conditional jump> (0) | 2013.09.04 |
---|---|
9월3일 어셈블리(숙제) (0) | 2013.09.04 |
어셈블리어 과제 (Conditional Jump) (0) | 2013.09.04 |
switch 문 분석하기 (0) | 2013.09.04 |
9월 4일 어셈블리 숙제 (0) | 2013.09.04 |
jns와 jnz 소스분석 - 문예진 (1) | 2013.09.04 |
9월2일자 ASM 숙제 (0) | 2013.09.04 |
Group 파일 분석 [문남경] (0) | 2013.09.04 |