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

어셈블리어 15. 조건분기명령어 JNE JA JB 상태 레지스터 CF 본문

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

어셈블리어 15. 조건분기명령어 JNE JA JB 상태 레지스터 CF

Sorrel 2018. 8. 13. 00:47

 

JNE에 대해서 알아보자. 이전에 배웠던 JE와는 달리 N이 붙어있다.

JNE, JNZ에 있는 N은 not이다.

 

Jump if Not Zero

Jump if Not equal

 

 

 

 eax와 1을 비교해서 같다. 그래서 z가 1이고

jne명령어기 때문에 같으면 실행이 되지 않을 것이고

다르면 실행이 될 것이다.

 

 

401005로 넘어가지 않고 바로 다음 명령어로 넘어왔다.

 

eax와 0을 비교하면 다르기 때문에 jne가 실행이 될 것이다.

 

 

 

실행이 되어서 401005로 넘어갔다

 

 

 

 

 

JA와 JB를 알아보자

JA의 a는 above, cmp 비교 명령어에서 앞에 있는 것이 크면 실행하고

JB below, cmp 비교 명령어에서 앞에 있는 것이 작으면 실행한다.

 

이 명령어는 어떻게 작동하는가? C 상태 레지스터에서 작동한다.

c는 carry의 뜻이며, 올림이라는 뜻이다.

 

 

이것은 eax를 보면 32비트인데 32비트 자릿수를 넘어가는 연산이 나오면 carrybite가 1이 된다.

 

예를 들어 1111+0001이라면 올림 1이 생기기 때문에 carry bite가 1이 되는 것이다.

빼기일 때도 마찬가지로 빌림이 1이 넘어가면 carry가 1이 된다.

 

 

 

eax와 0을 비교해서 eax가 크기 때문에 JA만 계속 반복한다.

 

 

 

eax와 2를 비교해서 eax가 작기 때문에 JB만 계속 반복한다.

 

 

0 Comments
댓글쓰기 폼