mov eax,0                    //mov 명령어는 ZR 플래그를 조작하는 명령어가 아님

cmp eax,0 //두개의 값이 같으면 Z(ZR) 에 1을 세팅함

je          main //ZR값이 1 이면 점프 , jz 도 ZR 이 1 이면 점프,  jz==je 이 둘은 같은 동작을 한다


jz 는 eax 값이 증가 했다가 감소 해서 0 이 되면 가 1이 된다는 관점

je 는 cmp 로 두개를 비교하여 같으면 Z 가 1 이 된다는 관점


jne = jump not equal 로 Z가 0 일때 점프 한다

jze 가 0 일 때 점프



cmp A, B

JA  : 앞에 것이 크면 점프 (Above)

JB  : 앞에 것이 작으면 점프(Below)


C : Carry 비트(더하기, 자리 올림)가 1이 됨 1111 + 1    또는 자리내림(빼기(1-2=-1))  일때 C 가 1이 됨


cmp 연산에서 cmp a,b 는 a-b 연산을 하는대 이때 C 비트가 변경 된다





[부호가 없는 데이터 비교, 제일 앞의 비트또한 숫자로 처리한다]

JA 의 경우 C가 0이고 ZR 이 0 일 때 점프 한다 

cmp 는 A-B 연산을 하는데 두 값이 같다면 A-B=0 , A>B 의 경우 결과는 양수이고 A 보다 

결과가 작음으로 자리 올림은 발생 하지 않으며 ZR 은 두 값이 같지 않음으로 0 이 된다


JB 의 경우 C 가 1일때 점프 한다 

ZR 은 0 이든 1이든 상관 없는데 그 이유는 A-B 결과가 음수가 되면서 이로 인해 자리내림으로 C 가 1이 되어서 

이것으로 점프를 할지 말지 구분하면 됨


[부호가 없는 데이터 비교, 제일 앞의 비트를 부호로 처리한다]

JG  

JL


JA, JG 가 같은 맥락인데 어떤 명령어를 사용 하느냐에 따라서 비트는 같지만 비트를 해석하는 방식이 달라진다




JNA == JBE





jc : carry 플래그 값만 보고도 점프가 가능한데(CY)

jo : overflow bit 가 1 일때 (OV)

js : sign 비트가 1 일때 (PL)


pl : 연산 값이 음수인경우 1 , 양수면  0

ov : char s=127

s+=1 == -128 이 되는데 이때 부호 비트까지 연산이 되어버리는 경우 ov 에 1이 세팅 됨
 




(c에서는 AC 가 보조 캐리비트)

 cmp edx,eax 했을 때 cmp 한 연산 결과의 하위 4bit 에 대해 올림이 발생하면 그때 1이 됨

   [BCD : 2진수 4자리를 묶어 10진수 한자리로 표현 하는 법]

           16진수 표현 시 10=a~ 15=f 로 표현 되는데  이렇게 표현 하는 방식을 말함

그리하여 4bit까지 체크 하기 위한 비트가 AC 보조 캐리 비트다, 즉 15가 넘어 가게 될 경우 AC=1 이 된다(f에 대한 자리 올림)

ex) mov eax , 15

inc eax



CF - carry flag(c에서는 CY)
Set on high-order bit carry or borrow; cleared otherwise
PF - parity flag(c에서는 PE, 연산될 결과에서 하위 8bit에 대해 인텔은 홀 수 비트 개수를 유지하기 위해 여기에 1 또는 0 을 채운다
                                   cmp edx,eax 했을 때 cmp 한 연산 결과의 하위 8bit 에 대해 체크)
Set if low-order eight bits of result contain an even number of "1" bits; cleared otherwise

ZF - zero flags(c에서는 ZR)
Set if result is zero; cleared otherwise
SF - sign flag(c에서는 PL이던디)
Set equal to high-order bit of result (0 if positive 1 if negative)
OF - overflow flag(c에서는 OV)
Set if result is too large a positive number or too small a negative number (excluding sign bit) to fit in destination operand; cleared otherwise



반응형

+ Recent posts