eflags
을 읽기/쓰기 GP 레지스터로 취급하는 지침은 없습니다. 인텔 1 인용
:
EFLAGS 레지스터의 플래그의 일부
은 ( 다음 절에서 설명) 특수 목적의 지침을 사용하여 직접 수정할 수 있습니다.
전체 레지스터를 직접 검사하거나 수정할 수있는 지침은 없습니다.
프로 시저 스택 또는 EAX 레지스터간에 플래그 그룹을 이동하는 데 다음 지침을 사용할 수 있습니다.
LAHF, SAHF, PUSHF, PUSHFD, POPF 및 POPFD. EFLAGS 레지스터의 내용이 프로 시저 스택 또는 EAX 레지스터 으로 전송 된 후 프로세서의 비트 조작 명령어 (BT, BTS, BTR 및 BTC)를 사용하여 플래그를 검사하고 수정할 수 있습니다.
상태 플래그,
제어 플래그 및
시스템 플래그 :
eflags
레지스터는 세 그룹으로 나누어 져 있습니다. 상태 플래그에만 CF의
는 clc
, stc
, cmc
직접 조작 할 수 있습니다.
CF을 읽을 수있는 지침은 없지만 cmovcc
, adc
, setcc
과 같은 지침을 통해 간접적으로 읽을 수 있습니다. 모든 다른 플래그는 특별히 맞추어 산술 명령 또는 (lahf
)와 ah
에 eflags
의 상태 그룹 콘텐츠 또는 (pushfd
)와 스택 대응하여 변형 및 후면 eflags
로 (sahf
또는 popfd
)와 이상되어야한다. 제어 플래그 그룹에서
는 cld
및 std
를 조작 할 수 있습니다 DF 만 있다.
DF
의 현재 값을 읽으려면 pushfd
을 사용해야합니다.
시스템 플래그은 일반적으로 작업 전환, v86 모드 입력 등과 같은 일부 권한 작업을 수행하여 간접적으로 조작됩니다.
IF은 cli
및 sti
으로 직접 조작 할 수 있습니다.
다른 모든 플래그는 pushfd
/popfd
으로 만 조작 할 수 있습니다. 참고로
:
64 비트 모드
- 플래그 레지스터
rflags
하지만 상위 32 비트가 원경하여 rflags
가 eflags
로 처리 예약되어있다.
pushfd
은 스택에 eflags
을 푸시합니다. eflags
의 하위 16 비트 만 푸시하는 16 비트 버전 pushf
도 있습니다. popfd
/popf
과 동일합니다.
lahf
/sahf
은 상태 플래그 만 복사합니다.
1 인텔 매뉴얼, 제 1 권, 3.4.3
.
어쩌면 sahf/popf? – Leeor
네, 맞습니다! 대단히 감사합니다! 당신은 나에게 많은 도움을주었습니다 – Argaman
캐리 (canry)는 (답변에서) 전용 지침을 가지고 있지만 운이 좋다면 가끔은 코드를 재정렬 할 수 있습니다. 예를 들어 rcr보다 먼저/xor를 수행하면 코드를 재정렬 할 수 있습니다. CF = 0도. 어셈블리 "골프"의 일부는 가능한 경우 부산물이 재사용되는 방식으로 지시를 주문하는 것입니다. 그러나 이러한 코드는 읽고 이해하기가 더 어렵습니다. 그래서'clc'는 당신에게 딱 맞습니다. 플래그 (RCL이 유효한 필요)를 바꿀 필요가 있다면, CPU가 어떤 식 으로든 할 가능성이 매우 높습니다. 명령어 세트는 전체적으로 잘 작동합니다 (때때로 명확하지는 않지만). – Ped7g