C에서의 if문은 간단한 문법이지만 어셈블리에서 if문을 구현하는 일은 조금 복잡해진다. 와 같은 문장이 있다고 하자

이것을 어셈블리로 대치 시키면
와 같은 문장이 된다.
C에서 괄호 안의 내용이 어셈블리에서 cmp로 비교 되고
비교 결과에 따른 실행에 대해서 C에서는 if와 else로 구분하지만 어셈블리에서는 jmp로 구분하게 된다.

하지만 이 jmp라는 명령어는 Conditional Jump와 Non-conditional Jump로 나눌 수 있는데 
Conditional Jump가 문제가 된다고 할 수 있다.

무조건 분기인  jmp명령어는 명령어를 만나면 jmp명령어에서 지정한 블록으로 무조건 점프하도록 한다. C를 예를 들자면 goto문의 사용과 흡사하다.

하지만 조건 분기는 Flag Register를 보고 이동을 하게 되는데 계산과정에서 발생하는 플래그를 체크하여 각 조건분기 명령어에서 원하는 플래그가 입력되어 있을 경우 해당 블록 지점으로 이동하게 해는 명령어이다.

그럼 조건 분기 명령어를 한번 살펴보자.

+ Recent posts