5
amd64 어셈블리를 사용하면 64 비트 레지스터의 상위 32 비트를 0으로 만드는 가장 좋은 방법은 무엇입니까? eax에서 다루지 않는 rax 비트를 제로로 만들 수 있습니까? 나는 64 비트 상수에 대해 전체 레지스터를 등록 할 수 없다.64 비트 레지스터의 상위 32 비트를 제로
amd64 어셈블리를 사용하면 64 비트 레지스터의 상위 32 비트를 0으로 만드는 가장 좋은 방법은 무엇입니까? eax에서 다루지 않는 rax 비트를 제로로 만들 수 있습니까? 나는 64 비트 상수에 대해 전체 레지스터를 등록 할 수 없다.64 비트 레지스터의 상위 32 비트를 제로
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 비트로 부호 확장합니다.
은 rax의 하위 32 비트가 아닌 eax입니까? 여기를 참조하십시오 : http://stackoverflow.com/questions/8580838/how-to-move-two-32-bit-registers-in-to-one-64-bit –
eax가 부호있는 값이면 1을 원하면 if 값은 0이 아닌 음수입니다. MOVSXD. –