본문 바로가기

Logical Design

NZCV flag 활용한 대소비교

반응형

컴퓨터 시스템 설계, 논리설계 수업을 들으면서 NZCV flag를 활용한 대소비교를 자주 했는데 할 때마다 헷갈려 한 번 정리를 하고 가겠습니다.

일단 nzcv부터 정리하고 갈게요.

n: negative

z: zero

c: carry

v: overflow

 

A-B를 실행 했을 때의 결과입니다.

A,B가 signed,unsigned 일때 다르므로, 구분해서 정리하겠습니다.

Unsigned int의 경우

1. ==

동일한 비트인지 확인할 때는 

Z=1인지로 확인합니다.

 

2. !=

==의 반대이기에 ~Z이면 됩니다.

 

3. >=

1. A,B의 MSB가 0일때

ex)A가 0100 이라면 B는 00xx가 됩니다. A-B == A+(~B)+1이므로 0100+11(~x)(~x)+1이됩니다. 필연적으로 캐리가 일어날 수 밖에 없습니다.

2. A의 MSB가 1, B는 0일때

A-B == A+(~B)+1 다음 과정에서 MSB가 둘 다 1이므로 carry가 발생합니다.

3.둘 다 1 일때

ex) A가 1100이면 B는 10xx이고 A-B == A+(~B)+1 후 1100 + 01(~x)(~x) + 1이 됩니다. carry가 발생하죠.

 

추가로 1-1을 하여도 캐리가 발생하므로 >=의 조건은 C입니다.

 

4.  <

3번의 반대이므로 ~C입니다.

 

5. >

3번에서 ==을 제외하면 되므로 C &(~Z)입니다.

 

6. <=

4번이랑 ==을 합치면 되므로 ~C|Z입니다.

 

 

 

 

Signed int의 경우

나머지는 모두 동일하기에 <방식만 하겠습니다.

Negative이면 되므로 N이면 됩니다. 허나 overflow가 발생해서 negative이면 안되므로 N xor V을 해줍니다.

 

 

Unsigned에서는 캐리를, Signed에서는 overflow를 바탕으로 구한다는 것을 마지막으로 글 마치겠습니다.

 

 

반응형