본문 바로가기
코스웨어/13년 스마트컨트롤러

어셈블리 숙제 조유진

by 알 수 없는 사용자 2013. 9. 4.
728x90
반응형

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으로 점프한다는 것을 알 수 있다. 이 부분은 중괄호 밖의 파트이다.

728x90