2014-01-29 7 views
5

amd64 어셈블리를 사용하면 64 비트 레지스터의 상위 32 비트를 0으로 만드는 가장 좋은 방법은 무엇입니까? eax에서 다루지 않는 rax 비트를 제로로 만들 수 있습니까? 나는 64 비트 상수에 대해 전체 레지스터를 등록 할 수 없다.64 비트 레지스터의 상위 32 비트를 제로

+0

은 rax의 하위 32 비트가 아닌 eax입니까? 여기를 참조하십시오 : http://stackoverflow.com/questions/8580838/how-to-move-two-32-bit-registers-in-to-one-64-bit –

+1

eax가 부호있는 값이면 1을 원하면 if 값은 0이 아닌 음수입니다. MOVSXD. –

답변

8

movl %eax, %eax 또는 mov eax, eax, 사용중인 어셈블러에 따라 다릅니다.

참조 : 인텔 ® 64 및 IA-32 아키텍처 - 소프트웨어 개발자 설명서, Volume 1, 3.4.1.1 : 64 비트 모드의 범용 레지스터

32 비트 피연산자는 대상 범용 레지스터에서 64 비트 결과로 제로 확장 된 32 비트 결과를 생성합니다. 7.3.1.7 :

은 또한 @ HansPassant의 코멘트에 관해서, 추가해야

MOVSXD 명령은 64 비트 데이터에서 작동합니다. 32 비트 값을 64 비트로 부호 확장합니다.