2014-02-21 3 views
0

나는 최근에 Intel x86 어셈블리의 NOP 명령어가 실제로 XCHG EAX, EAX

과 동일하다는 것을 발견했다. 상태 레지스터를 변경하여 예기치 않은 결과를 가져 오지 않겠는가?
예를 들어, EAX이 처음 0 일 경우 NOP 다음에 FLAG 레지스터 (제로 비트)의 여섯 번째 비트가 설정됩니다.NOP가 Intel x86 아키텍처의 상태 레지스터에 영향을 줍니까?

내 코드에 NOP을 어떻게 사용하는 것이 안전할까요?

+6

'XCHG' 수정하지 않습니다 모든 플래그. –

+0

XCHG는'xchg regA, regB' 형식입니다. 여기서 regA == regB는 예외가 아니라 표준입니다. 논리적으로,이 경우 목표 레지스터는 무엇입니까? 어느 레지스터에서 플래그를 적절히 설정해야합니까? 응답이 없으므로 플래그가 전혀 수정되지 않습니다. 그리고 그 때문에, xchg ax, ax는 1 바이트 NOP를 인코딩하는데 사용될 수 있습니다. (예를 들어, xchg bx, bx는 2 바이트 NOP를 인코딩하기 위해 사용될 수 있음) –

답변

3

NOP (또는 XCHG 또는 MOV)는 x86 아키텍처에서 FLAGS 레지스터를 변경하지 않습니다. NOP를 사용하는 것은 항상 안전합니다. (그리고 그것은 다를 수 있는지?)

관련 문제