2017-02-12 1 views
1

나는 그것이 말하는를 해결이 https://en.wikibooks.org/wiki/X86_Assembly/X86_Architecture#General-purpose_registers_.2864-bit_naming_conventions.29직접 메모리는 국회에서 해결하고 []

에서 직접 메모리를 읽고 있어요 : 그것은 []의 경우없이 도끼로 복사 것이 무엇

.data 
    my_var dw 0abcdh ; my_var = 0xabcd 

.code 
    mov ax, [my_var] ; copy my_var content into ax (ax=0xabcd) 

궁금, 그 값은 0xabcd가 아닌가?

왜 처음에는 콘텐츠입니까? 0xabcd을 메모리 주소로 사용하고 0xabcd에 저장된 내용을 대신보아야합니까?

답변

4

my_var은 일부 메모리 주소를 참조하는 기호입니다. 이 지침

my_var dw 0abcdh 

는 스토리지의 2 바이트를 할당 그것에 값 0abcdh를 작성하고 그 보관의 시작 부분에 my_var 점을 수 있도록 어셈블러가 발생합니다.

의견 my_var = 0xabcd은 변수 my_var이이 값을 가지고 있음을 설명하려고합니다. 당신이 전역 변수를 선언 할 때이 문제를 이해하기 위해서는, C와 같은 높은 수준의 언어로 그 관찰, 변수 이름은 항상 암시 적으로 역 참조 : 그것은없이 도끼로 복사 것이 무엇

int foo = 1; 
// compiles to 
foo dw 1 

궁금, [] 만약 그 값이 0xabcd가 아니라면?

메모리 참조를 사용하지 않는 경우 해당 변수의 주소 인 my_var의 값이 복사됩니다.

왜 처음부터 콘텐츠입니까? 0xabcd를 메모리 주소로 처리해서 0xabcd 주소에 저장된 내용을 보지 않아야합니까?

번호 당신이 첫번째 0xabcd를 얻을 수 my_var의 컨텐츠를 취득하고 무엇을 얻을 수 0xabcd에서 가져 오기 위해 필요에 따라 두 메모리 액세스를 필요, 그렇게하려면이 :

mov bx,[myvar] 
mov ax,[bx] 
+0

'메모리 참조를 사용하지 않으면 기호 my_var의 값, 즉 해당 변수의 주소가 복사됩니다. '- 이것은 어셈블리에서 HLL과 달리 변수가 기본적으로 포인터라는 것을 의미합니까? – Kotaa

+0

또한,'mov bx, [myvar]'는 my_var의 내용을 가져옵니다. 맞습니까? 하지만 그 대답에 반대된다 http://stackoverflow.com/questions/42050480/storing-a-value-in-a-register-and-when-is-it-address-and-when-pure-value/42050785# 42050785 --- ** .... esp의 내용을 eax로 옮기지 않습니다 ** – Kotaa

+0

@Kotaa (정적) 변수는 메모리입니다. 기호는 주소를 나타내므로 변수의 기호는 항상 해당 변수의 주소를 나타냅니다. 프로그램이 시작되기 전에 기호가 해석되면 런타임에 기호의 값을 변경할 수 없습니다. 링크하기 :'esp'는 심볼이 아니라 레지스터입니다. 레지스터에는 값이 포함될 수 있으며 이러한 값은 변경 될 수 있습니다. 설명은 완전히 정확합니다. – fuz

1

Kotaa 기본적으로

:

mov ax, my_var ; Moves the location of my_var into ax 
mov ax, [my_var] ; Moves the content found at the address of my_var 

질문의 두 번째 블록에. 실제로, my_var는 다음의 데이터를 다른 블록에 대한 포인터를 개최하기로 한 경우 :

mov eax, [my_var] ; Get pointer stored at my_var 
mov ebx, [eax]  ; Get data from pointer whose address is in eax 
+1

주'그 mov bx, [ax]'은 유효한 주소 지정 모드가 아닙니다. – fuz

+0

@fuz - 감사합니다. –

+0

어떨까요? this http://stackoverflow.com/questions/42050480/storing-a-value-in-a-register-and-when-is-it-address-and-when-pure -value/42050785 # 42050785 --- ** mov eax, [esp] ===> esp의 내용을 eax로 옮기지 않습니다. ** – Kotaa