2011-12-15 3 views
0

에 단어를 추가 할 수 있습니다.조립 내가 다음 코드를 EAX

그에 대한 FE00ABBC이, 다음 명령이 작동해야합니다 : 내가 알 수있는 바와 같이

는, 메모리는 다음과 같습니다

mov eax, 0x010000101 
add dword [Var1], eax 

을하지만이 일을하고있다 :

mov eax, 0x01010001 
add dword [Var1], eax 

왜 ? 감사.

+0

엔디안이 올바른지 확인해야합니다. –

답변

0

메모리 맵이 잘못되어있는 것처럼 보입니다. 나는 이것을 다음과 같이 해석 할 것입니다 :

BCAB00FE 
^ ^
|  | 
MSB LSB 

당신이 보는 행동을 정확히 설명 할 것입니다.

+1

아니요, 그의 메모리 맵은 정확합니다. – hirschhornsalz

+0

글쎄, 실제로 그는 자신의 메모리 맵의 로우 엔드가 어디인지는 밝히지 않았고, 나는 왼쪽 하단을 상정했다 (보통 바이트는 왼쪽에서 오른쪽으로 읽었다. 적어도 여기서는). 두번째보기 후에 나는 너가 그 반대를 추측 한 것을 본다. – hirschhornsalz

+0

@drhirsch : 제 가정은 OP가 보는 행동을 설명한다는 사실에 의해지지되고 있습니다. 문제는 그가 메모리 맵에서 왼쪽에서 오른쪽으로 읽는 것이지만 eax에서는 오른쪽에서 왼쪽으로 읽는 것입니다. –

1

귀하의 문제는 귀하가 아키텍처의 endianness을 고려하지 않았다는 것에 있습니다.

+0

그게 문제를 해결하지 못한다. 문제는 그가 3 개의 변수를 잘못된 순서로 메모리에 넣었다는 것이다. 당신이 한 것은 ebx를 중개자로 사용한다는 것을 제외하고는 그가 한 일입니다. –

+0

마지막 부분이 실제로 해결되지 않기 때문에 제거되었습니다. 그러나 나는 문제가 내가 말한대로 엔디안이라고 생각한다. – gusbro

0

achitecure는 로우 엔디안이며, 최하위 비트는 가장 낮은 메모리 주소입니다. 이것은 일반적인 서구 작문 방향과 반대입니다.

메모리는 설명대로 보이지만,이 IST로드 될 때, 겉으로는 반전됩니다 : 당신이 쓰는 왼쪽에서를 작성하는 경우

`FE 00 AB BC` 
low high address 

mov eax, 0x1010001 

01 00 01 01 
low high byte in eax 

그래서 EAX의 내용은 지금 01010001입니다.

어셈블러 소스에서 숫자 상수를 쓰는 순서가 실제로 메모리에 저장된 순서와 다르기 때문에 문제가 발생합니다.