2013-10-30 2 views
0

다음 코드 세그먼트를 번역 할 때 누군가가 ptr의 목적을 말해 줄 수 있습니까?이 문장은 어셈블리에서 무엇을 의미합니까?

cmp byte ptr [eax], 0 

PTR은이 값을 가지고, 레이블입니다 :

(++> 

cmp 나의 이해는 오른쪽에있는 값으로, 왼쪽에있는 값을 비교한다는 것입니다.

세 번째 매개 변수가 포함 된 경우 (ptr)이 의미는 무엇입니까? ptreax의 메모리 주소 값을 0으로 비교합니까?

누군가 나를 영어로 번역 할 수 있다면 좋을 것입니다. 감사.

답변

4

는 피연산자 크기의 명시 적 언급이 없다 :이 명령은 바이트 값 eax이 유사 0

과에 pointint입니다 cmopares. mov eax, 0라고 말하면, (조작은 eax은 32 비트이므로) 32 비트 피연산자가 필요하고, mov al, 0은 8 비트를 의미합니다.

하지만 메모리 위치를 역 참조, 피연산자의 크기를 추정 할 수있는 방법이 없습니다, 그래서 당신은 명시 적으로 byte ptr, word ptr, dword ptr 또는 quad ptr, 8, 16, 32 및 64 비트 피연산자를 말하여 지정해야 할 때, 각기.

그래서 명령 0

+1

10 바이트 확장 정밀도 부동 소수점 값의 경우, 'tword' 또는'tbyte'입니다. 구문은 다양합니다. 기술적으로 10 단어가 아니기 때문에 10 바이트입니다. –

0

eax에는 일부 주소에 대한 포인터가 들어 있습니다.

인텔 어셈블러 구문에서
char *p = addr; 
if(*p == 0) 
    ... 
0

PTR로 eax의 값에 의해 어드레싱 된 메모리에 하나의 바이트 (8 비트)와 비교된다 명령 오퍼랜드하지만 제 피연산자 아니라 옵션이 아니다.