x64 지침
대부분의 x86 지침은 64비트 모드의 x64에 계속 유효합니다. 거의 사용되지 않는 일부 작업은 다음과 같은 64비트 모드에서 더 이상 지원되지 않습니다.
이진 코드 10진수 산술 명령: AAA, AAD, AAM, AAS, DAA, DAS
바인딩된
PUSHAD 및 POPAD
PUSH DS 및 POP DS와 같은 세그먼트 레지스터를 처리하는 대부분의 작업입니다. (FS 또는 GS 세그먼트 레지스터를 사용하는 작업은 여전히 유효합니다.)
x64 명령 집합에는 SSE 2와 같은 x86에 대한 최근 추가 사항이 포함되어 있습니다. x64용으로 컴파일된 프로그램은 이러한 지침을 자유롭게 사용할 수 있습니다.
데이터 전송
x64는 64비트 직접 상수 또는 메모리 주소를 처리할 수 있는 MOV 명령의 새로운 변형을 제공합니다.
MOV |
r,#n |
r = #n |
MOV |
rax, m |
64비트 주소의 콘텐츠를 rax로 이동합니다. |
MOV |
m, rax |
rax의 내용을 64비트 주소로 이동합니다. |
또한 x64는 32비트 피연산자를 64비트로 확장하는 새로운 명령을 제공합니다.
MOVSXD |
r1, r/m |
서명 확장이 있는 DWORD를 QWORD로 이동합니다. |
32비트 하위 등록으로의 일반 MOV 작업은 자동으로 0으로 64비트까지 확장되므로 MOVZXD 명령이 없습니다.
두 개의 SSE 명령을 사용하여 128비트 값(예: GUID)을 메모리에서 xmmn 레지스터로 이동하거나 그 반대로 이동할 수 있습니다.
MOVDQA |
r1/m, r2/m |
128비트 맞춤 값을 xmmn 레지스터로 이동하거나 그 반대로 이동합니다. |
MOVDQU |
r1/m, r2/m |
등록할 128비트 값(반드시 정렬되지 않음)을 이동하거나 그 반대의 경우도 마찬가지입니다. |
데이터 변환
CDQE |
dword(eax)를 qword(rax)로 변환합니다. |
CQO |
qword(rax)를 oword(rdx:rax)로 변환합니다. |
문자열 조작
MOVSQ |
qword 를 rsi에서 rdi 로 이동합니다 . |
CMPSQ |
rsi의 qword를 rdi와 비교합니다. |
SCASQ |
rdi에서 qword를 검사합니다. rdi의 qword를 rax와 비교합니다. |
LODSQ |
rsi에서 rax로 qword를 로드합니다. |
STOSQ |
qword를 rax에서 rdi로 저장합니다. |