adc, sbb, carry flag, overflow flag 이해하기(+cmp)
what is the adc, sbb??
해석을 해보자면..(잘 못하지만)
당신의 프로세서 레지스터 사이즈보다 더 큰 수가 더해지거나 빼질 경우 ADC와 SBB 지시자를 사용할 수 있다고 한다.
add dest, source 가 dest = dest + source라고한다면, adc는 dest = dest + source + carry flag
sub dest, source 가 dest = dest - source라고한다면, sbb는 dest = dest - source - carry flag 이다.
그렇다면 carry flag란 무엇인가.
carry flag는 overflow flag와 혼동될 수 있는 flag이다. 둘의 차이에 대해 알아보자.
예를 들어, (4bit 연산을 한다고 가정) 1000+1000 = 10000 --> 비트가 흘러넘치게된다.
여기서 비트가 흘러넘치기 때문에 overflow flag가 set된다고 생각을 하는데, carry flag가 set된다.
즉, carry flag는 최상단 비트에서 캐리가 생겼을 경우 set된다.
다시 예를 들어, (4bit) 0111 + 0001 = 1000는 overflow flag가 set된다. 왜냐하면 signed expression이라고 가정 했을 때
최대 표현 숫자를 넘어서서 부호가 바뀌었기 때문이다.
carry flag는 특히 cmp에서 유용하게 사용된다. 첫 번째 피연산자가 두 번째 피연산자보다 더 작으면 carry flag가 on이 된다.
반대로 off면 크거나 같다고 보면 된다.