게하! 개하! (게임도 하고 개발도 하고)

어셈블리어 14. 조건분기명령어 JZ, 상태레지스터 ZF 본문

SISS (2017-2018)/어셈블리어

어셈블리어 14. 조건분기명령어 JZ, 상태레지스터 ZF

Sorrel 2018. 8. 13. 00:17

jmp는 무조건 점프이다.

점프명령은 다 j로 시작한다.

우리가 지금 할 점프 명령어는 뒤에 조건이 붙는다.

JZ 주소 = Z가 제로일 때 점프를 하는 것이다.

JZ라고 쳐도 JE라고 나오는데 이는 기계어에서는 같은 의미라고 한다.

 

 

 

eax등등과 같은 레지스터 아래에 알파벳이 하나인 레지스터가 보이는데 이는

상태레지스터이다. (0과 1로만 이루어져있다.)

 

이 레지스터의 값에 따라서 점프를 하는가 하지 않는가에 대한 결정이 되는 것이다.

 

 

z는 zero flag이다. eax가 1일 때는 제로 플래그가 0이다. 제로가 아니기 때문에 거짓인 것이다.

그래서 jz 401005가 실행되지 않는다.

 

 

 

여기서 z가 1이라서 401009로 점프할 수 있을 것이다.

 

 

401009로 넘어간 결과를 볼 수 있다!

 

 

z가 0이라서 jz의 명령이 듣지 않고,

 

z가 1이라서 jz의 명령이 실행된다!

 

 

 

실행 결과!

 

 

 

JE라는 것은 jump equal이다.

뭐가 같냐는 걸까? cmp로도 판단 가능하다.

cmp eax 0

이 명령어는 eax와 0을 비교해서 같으면 상태 플래그 z를 1로 만들어준다.

cmp의 원리 = eax-0해서 결과 값이 0이냐? 참! 해서 z를 1로 만들어준다.

 

따라서 위 명령도 cmp로 비교하면 값이 같기 때문에 z가 1로 변하고 아래 jz 명령어가 실행될 것이다.

0 Comments
댓글쓰기 폼