2009-09-10 4 views
4

다음 코드 조각이 있습니다. 중단 점에서 eax에서 123을 표시하고 ecx에서 321을 표시해야합니다. 어떤 이유로 그것은 일어나지 않습니다. 왜 그럴까요? 내가 잘못을해야하는지 생각이 간단한 코드는 무엇이 잘못 되었습니까?

push ebp; 
    mov ebp, esp; 
    sub esp, 8; 
    mov [ebp-4], 123; 
    mov [ebp-8], 321; 
    mov eax, [ebp-4]; 
    mov ecx, [ebp-8]; 
    pop ebp; <------------- breakpoint here 
    retn; 

내가

mov [ebp-4], 123 

을 할 수 있다는 것입니다?

다른 모든 것은 나에게 좋을 것 같습니다.

감사

편집 : 값은 다음과 같습니다 EAX 1,505,915; xx1720129;

+0

eax 및 ecx에서 볼 수있는 값은 무엇입니까? – Michael

+0

큰 (임의?) 값. –

+0

eax \t 1505915; ecx 1720129 –

답변

8

메모리에 바이트 값을 저장하고 있습니다.

변경

mov dword ptr [ebp - 4], 123 
mov dword ptr [ebp - 8], 321 

EAX = 1,505,915이 0x16FA7B입니다. 마지막 바이트는 7B이며 16 진수로 123입니다. ecx = 1720129는 0x1A3F41입니다. 16 진수 41은 321 (141)의 마지막 바이트입니다.

+0

그리고 마이클은 999 시간 동안 그 날을 구합니다. 감사! –

+0

위대한 답변 : –

+0

또 다른 질문. inc [ebp-4]를하고 싶다면, 나는해야 할 일을해야합니까? [ebp-4]? 번호가 작 으면 문제가되지 않지만 번호가 커지면 문제가 발생할 수 있다고 말하고 싶습니다. 어셈블리는 기본적으로 어떤 바이트 크기를 사용합니까? –

1

나는 메모리 주소에 값을 넣을 수 없다는 인상을 받았다. 레지스터를 통해 가야합니다 :

MOV EAX, 123 
MOV [EBP-4], EAX 

내가 말했던 것처럼, 나는 틀릴 수도 있습니다. 하지만 한번 해봐. 명령 세트 매뉴얼을 확인하십시오. 어떤 주소 지정 모드에서 어떤 작업을 수행 할 수 있는지 보여줍니다.

+0

이 대답은 실패합니다. –

+1

그것은 x86입니다. 거의 모든 것이 직접적으로 메모리에 저장됩니다. (내부적으로 현대 x86 CPU의로드/스토어 아키텍처와 마이크로 코드는 실제로 실행될 것입니다.) – Michael

+0

Thanks Michael . 나는 ASM으로 돌아갈 필요가있다. 사용 설명서를 어기는 시간. 나는 의견에 감사드립니다 :) –

관련 문제