부호 구하기

programming 2006. 12. 19. 14:30

몇년전 프로그래밍 포럼에 만들었던 글타래에 적었던 코드. 그 글타래 자체는 다른 사람의 글에서 요청 비슷하게 한 것을 보고 열었었다. 내 스스로 쓸 일이 있을 것이라고는 생각을 하지는 못했다. 그런데, 최근에 다루는 문제를 푸는데 부호만 알면 되는 경우가 있을 줄이야! 내가 쓴 것을 내가 검색하는 어처구니 없음은 말할 것도 없고...

어처구니 없는 일을 다시 하지 않기 위해 적어두자.

입력: 단정도 부동 소수점 상수.
출력: 입력 값이 양수이면 1, 음수이면 -1, 0 이면 0.
대상: 인텔 32비트 CPU
제한 사항: 조건부 분기를 쓰지 말 것.

; int signum(float x)
; return value in eax
signum proc
    mov eax,[esp+4]
    cdq
    cmp eax,1
    sbb edx,1
    adc edx,1
    ; handle -0.0
    add eax,eax
    neg eax
    sbb eax,eax
    and eax,edx
    ret
signum endp
Posted by movsd
,