2011-10-06 5 views
1

나는 asm에있는 레지스터를 이해하려고 노력하고있다. 그러나 내가 보는 모든 웹 사이트는 레지스터에 대해 알고 있다고 가정하고 그저 그립을 이해할 수 없다. 나는 C++의 가치있는 책에 대해서 알고 있으며, 내가 알기로는 mov var1,var2var1 = var2과 똑같을 것입니다. 맞습니까?키워드 eax와 mov를 이해함

하지만 eax 레지스터를 사용하면 완전히 손실됩니다. 어떤 도움을 주셔서 감사합니다.

답변

0

eax는 프로세서 레지스터 (실질적으로 가변)

mov을 지칭하는 다른 하나 개의 레지스터로부터 데이터를 복사하기위한 명령이다. 그래서 본질적으로 당신은 정확합니다 (handwavey 의미에서)

토론하고 싶은 어셈블리 블록이 있습니까?

2

프로세서 별 전역 변수로 레지스터를 고려하십시오. "eax", "ebx"및 기타 다수가 있습니다. 또한 레지스터를 통해 특정 작업을 수행 할 수 있습니다. 예를 들어 한 메모리 위치에서 읽고 다른 위치에 쓰기 명령이 없습니다 (특정 레지스터로 위치가 표시되는 경우 제외 - movsb 명령 참조).

따라서 레지스터는 일반적으로 일부 연산에 필요한 값의 임시 저장 용도로만 사용되지만 일반적으로 일반적인 의미에서는 전역 변수로 사용되지 않습니다.

"mov var1, var2"는 본질적으로 할당이지만, 두 개의 메모리 기반 변수를 피연산자로 사용할 수 없습니다. 그것은 지원되지 않습니다. 대신에 다음과 같이 할 수 있습니다 :

mov eax, var1 
mov var2, eax 

... eax 레지스터를 임시로 사용하는 것과 같은 효과가 있습니다.

0

cax와 매우 비슷하게 값을 저장할 수있는 메모리 위치로 생각하십시오. int, long, ... 및 기타 유형은 변수 메모리의 위치 크기를 지정합니다. eax 레지스터는 단순히 x86 컴퓨터에서 32 비트 인 메모리의 저장 위치를 ​​가리 킵니다. eax의 e 부분은 확장 된 것을 의미합니다. 이 레지스터 -> 메모리 위치는 곱셈 및 나눗셈 연산자에 의해 자동으로 사용되며 일반적으로 확장 누적 레지스터라고합니다.