2017-11-13 2 views
-1

그래서 나는이 함수가 무엇인지 알아 내려고 노력하고있어,하지만 난이 명령 순서에 의해 약간 의아해 해요 :x86 어셈블리 도움말 : rax의 가치에 대한 일반적인 규칙이 있습니까?

mov -0x4(%rsp),%eax 
lea 0x0(,%rax,8),%edx 

그 전에 함수 내 RAX의 언급이 없습니다. rax 레지스터의 값은 무엇입니까? 스택의 맨 위에 있습니까?

이전 줄은 mov -0x4(%rsp),%eax 이었으므로 eax에있는 내용은 무엇입니까?

+2

'eax'는'rax'의 하위 32 비트이고'eax'에 쓰면 상위 32 비트가 지워집니다. 그래서 네,'rax'는'rsp-4' 주소의 메모리에서 32 비트 값을 0으로 64 비트로 확장했습니다. – Jester

답변

0

"일반 규칙"?

  • 기능 반환 : 아니, ("당신이 마지막으로 암시 적으로 또는 명시 적으로, 그 안에 넣어 어떤"같은) tautologies 이외의 일반 규칙 또는 암시처럼, rax를 사용하는 모든 것을 포함 매우 상세한 규칙이있을 수 없습니다 대부분의 호출 규칙에서의 값
  • 전체 - 곱셈 결과의 하위 절반 (하나의 피연산자 mul 또는 imul).
  • 몫 후 div/idiv
  • cmpxchg8b/cmpxchg16b
  • xlatb/lodsb/w/d/q 결과
  • 아마 다른를 중단 정보 after an aborted Transactional Memory operation (RTM)
  • CPUID 결과의 일부
  • 에서 64B 또는 128B 부하 결과
  • 낮은 반 암묵적인 EAX/RAX는 내가 잊어 버린 것을 사용합니다.

eax는 항상 rax (Why do most x64 instructions zero the upper part of a 32 bit register)에 제로 확장을 쓰지만 AL, AH 또는 AX를 쓰면 RAX의 이전 값과 병합됩니다.