signed
: V/N/Z로 판단한다.
V=0: Not overflow → N 그대로 해석
V=1: OVERFLOW → N 반대로 해석
N=0: 양수
N=1: 음수
Z=0: 0이 아닐 때
Z=1: 0일 때
bl: 계산 결과가 0보다 작으면 분기하는 명령
N xor V = 1일 때 분기한다
V | N | less than |
---|---|---|
0 | 0 | 거짓 |
0 | 1 | 참 |
1 | 0 | 참 |
1 | 1 | 거짓 |
↔ bge: 계산 결과가 0과 같거나 크면 분기하는 명령
N xor V = 0일 때 분기한다
be: 계산 결과가 0이면 분기하는 명령
Z=1일 때 분기한다
↔ bne: 계산 결과가 0이 아니면 분기하는 명령
Z=0일 때 분기한다
ble: 계산 결과가 0보다 작거나 같으면 분기하는 명령
[Z or (N xor V)] = 1일 때 분기한다 (Z=1 이거나 V xor N=1)
↔ bg: 계산 결과가 0보다 클 때 분기하는 명령
[Z or (N xor V)] = 0일 때 분기한다
<example>
Not Overflow
6 00000110
-3 11111100
100000011
CC:
C=1
V=Cout xor Cout-1 = 0 xor 0 = 0
N=0(연산 결과의 최상위 비트가 음수인가)
Z=0
bl: A<B
V xor N = 0이므로 거짓
bge: A≥B
V xor N =1 이므로 참
Overflow
127 01111111
1 00000001
= 10000000
CC:
C=0
V=1→overflow
N=1→반대로 해석 N=0
Z=0
bl: A<B
V xor N = 0이므로 거짓
bge: 참