3은 5보다 작거나 같죠 ? 그러면 뒷문으로 (JBE)
= 3은 5보다 크지 않죠 ? 그러면 뒷문으로 (JNA)
jump if (not) above/below 는 캐리 플랙(CF) 하나만 테스트하고 그 결과에 따라 뒷문으로 빠질건지 결정합니다.
jump if (not) greater/lesser than 은 사인 플랙(SF)과 오버플로 플랙(OF) 모두 테스트하여 점프를 결정합니다.
결국,
j*a*, j*b*는 부호를 따지지 않는 수를 (unsigned) 비교 분기에,
j*g*, j*l*는 부호를 따져야 하는 수를 (signed, 예로 음수도 감안할 경우) 비교 분기에 테스트 값으로 사용합니다.
만약, 같은 것까지 따질 경우 제로 플랙 (ZF) 까지 테스트합니다.
한 사람 나이를 주민 번호로 체크한다면, 양수로만 비교하면 되겠죠.
두 사람의 나이 차를 계산 한다면, 음수까지 고려해야겠죠 ?
http://css.csail.mit.edu/6.85
http://css.csail.mit.edu/6.858/2011/readings/i386/Jcc.htm
여기에서 보실 수 있지만 같은 OP코드를 가집니다.
즉 같은 것이고 코딩할 때 편하게 하기 위해 2가지 이름을 쓰는 것 같습니다.
3은 5보다 작거나 같죠 ? 그러면 뒷문으로
3은 5보다 작거나 같죠 ? 그러면 뒷문으로 (JBE)
= 3은 5보다 크지 않죠 ? 그러면 뒷문으로 (JNA)
jump if (not) above/below 는 캐리 플랙(CF) 하나만 테스트하고 그 결과에 따라 뒷문으로 빠질건지 결정합니다.
jump if (not) greater/lesser than 은 사인 플랙(SF)과 오버플로 플랙(OF) 모두 테스트하여 점프를 결정합니다.
결국,
j*a*, j*b*는 부호를 따지지 않는 수를 (unsigned) 비교 분기에,
j*g*, j*l*는 부호를 따져야 하는 수를 (signed, 예로 음수도 감안할 경우) 비교 분기에 테스트 값으로 사용합니다.
만약, 같은 것까지 따질 경우 제로 플랙 (ZF) 까지 테스트합니다.
한 사람 나이를 주민 번호로 체크한다면, 양수로만 비교하면 되겠죠.
두 사람의 나이 차를 계산 한다면, 음수까지 고려해야겠죠 ?
참조: http://stackoverflow.com/questions/9617877/assembly-jg-jnle-jl-jnge-after-cmp
댓글 달기