2013-04-08 6 views
1

x86 어셈블리의 32 비트 레지스터 하위 섹션과 관련하여 질문이 있습니다. 레지스터의 하위 하위 섹션 (해당되는 경우)이 해당 32 비트 레지스터의 일부처럼 취급되고 있습니까? ? 예를 들어32 비트 레지스터의 하위 섹션을 명확히합니다. x86

 
ror cl,2  
ror cl,2 
push ecx 
pop eax 

테이크 위의 코드 섹션 - CL 이후 내가 스택에 레지스터의 내용을 밀어 때 CL 항에서 무엇뿐만 아니라 스택으로 푸시됩니까는 ECX 레지스터의 하위 섹션입니다 ? 또는 그들은 별도로 취급합니까?

그리고 내가 EAX 레지스터에 스택을 터뜨린 후 CL 레지스터에 있던 것이 이전에 EAX 레지스터에 들어가 있다고 가정합니다.

+0

'CL'이 ECX''의 몇 비트에 액세스 할 수있는 편리한 방법이 바로, 그들은이 있습니다 같은 레지스터. – Linuxios

+1

ECX를 밀면 CL의 8 비트도 푸시됩니다. EAX로 팝핑하면 8 비트가 AL로 복사됩니다. –

+0

@Linuxios & Hans Passant - 오케이 환호성 나는 당신이 의미하는 것을 본다. 많이 감사합니다 –

답변

4

ECX 레지스터는 아래 그림에 표시된대로 CHCL을 포함하는 하단에 CX을 포함합니다. CL에 저장된 값을 수정할 때 CXECX도 변경되지만 CH은 변경하지 않습니다.

귀하의 질문에 대답하려면 :

Q : 저는 스택에 레지스터 [ECX]의 내용을 누르면뿐만 아니라 스택으로 푸시 얻을 CL 항에서 무엇을했다입니까? 아니면 그들은 seperatley 취급합니까?
대답 : 모두 한 번에 촬영하십시오. CLECX의 일부입니다. CLECX 부분에 액세스하기 위해 프로세서에서 제공하는 방법 일뿐입니다.

Q :그리고 그 전에에서 CL 레지스터에 있었다 무엇 EAX 레지스터로 이동 않는 EAX 레지스터에 스택을 poped 경우 가정?
대답 : 예. 보다 정확하게는 CL에 있었던 내용은 AL입니다.

enter image description here

출처 :A tutorial on Register Allocation by Puzzle Solving (compilers.cs.ucla.edu에)

+0

우수 답변, 감사합니다! –

+0

당신을 환영합니다;) – Jean

관련 문제