FCMOV
FCMOVFCMOV는 인텔 x86 아키텍처의 부동소수점 조건부 이동 동작 코드이며 Pentium Pro 프로세서에 처음 도입되었습니다.EFLAGS 정수 플래그 레지스터의 내용에 따라 부동소수점 스택 레지스터 중 하나의 내용을 ST(0)(스택 상단) 레지스터에 복사합니다.조건 코드에 의해 선택된 8가지 유형의 명령이 있으며, 이 명령을 이동하기 위해 설정해야 합니다.
CMOV 명령과 마찬가지로 FCMOV를 사용하면 일반적인 [1]분기 오버헤드 없이 일부 조건부 작업을 수행할 수 있습니다.그러나 조건부 분기 [2]명령보다 지연 시간이 더 깁니다.따라서 단순하지만 예측할 수 없는 비교 또는 조건부 연산에 가장 유용하며 상당한 성능 향상을 제공할 수 있습니다.
이 명령어는 보통 FCOMI 명령 또는 FCOM-FSTSW-SAHF 관용어와 함께 사용되며 부동소수점 비교 결과에 따라 관련 조건 코드를 설정합니다.
변종
다음 표에는 FCMOV [1]지침의 다양한 버전이 나와 있습니다.첫 번째 피연산자는 항상 ST(0) 레지스터(동등하게 부동소수점 스택의 맨 위)입니다.Opcode 열은 2바이트 시퀀스를 나타냅니다. 여기서 두 번째 바이트는 두 번째 오퍼랜드에 사용할 부동 소수점 스택 레지스터의 수를 나타내는 기본 값입니다.원하는 숫자를 추가하여 해당 opcode 값을 완료합니다.
| 오퍼코드 | 니모닉 | 의미. | 조건. |
|---|---|---|---|
| DA C0+i | FCMOVB | 아래인 경우 이동 | 반송 플래그 세트 |
| DA C8+i | FCMove | 동일한 경우 이동 | 제로 플래그 세트 |
| DA D0+i | FCMOVBE | 아래 또는 같은 경우 이동 | 반송 플래그 또는 제로 플래그 세트 |
| DA D8+i | FCMOVU | 주문되지 않은 경우 이동 | 패리티 플래그 세트 |
| DB C0+i | FCMOVNB | 아래가 아니면 이동 | 반송 플래그 삭제 |
| DB C8+i | FCMOVNE | 같지 않은 경우 이동 | 제로 플래그 클리어 |
| DB D0+i | FCMOVNBE | 이하가 아니면 이동 | 반송 플래그 및 제로 플래그 삭제 |
| DB D8+i | FCMOVNU | 순서가 정해지지 않은 경우 이동 | 패리티 플래그 클리어 |