Programing

x86 asm에서 대괄호는 무엇을 의미합니까?

crosscheck 2021. 1. 6. 20:18
반응형

x86 asm에서 대괄호는 무엇을 의미합니까?


다음 코드가 주어집니다.

L1     db    "word", 0

       mov   al, [L1]
       mov   eax, L1

대괄호 ([L1])는 무엇을 나타 냅니까?


[L1]주소 L1의 메모리 내용을 의미합니다. mov al, [L1]여기서 실행 한 후 al레지스터는 주소 L1 (문자 'w')에서 바이트를 수신합니다.


과 같은 이러한 유형의 피연산자를 메모리 피연산자[ebp] 라고 합니다 .

여기에 모든 답은 좋다,하지만 난 그 누구도 엄격한 규칙으로이 다음에주의해야 할 점에 대해 알려줍니다 참조 - 괄호 경우, 역 참조 , 그것은 때를 제외하고 lea명령 .

lea위의 규칙에 대한 예외입니다. 우리가

mov eax, [ebp - 4]

의 값에서 ebp4를 빼고 대괄호는 결과 값이 주소로 사용되며 해당 주소에있는 값이에 저장됨을 나타냅니다 eax. 그러나 lea의 경우 대괄호는 다음을 의미하지 않습니다.

lea eax, [ebp - 4]

의 값에서 ebp4를 빼고 결과 값이에 저장됩니다 eax. 이 명령어는 주소를 계산하고 계산 된 값을 대상 레지스터에 저장합니다. 자세한 내용은 이 게시물참조 하십시오.


단순히 L1 레이블로 표시된 주소에서 메모리를 얻는 것을 의미합니다.

당신은 C처럼,이처럼 생각하는 경우 [L1]와 동일합니다*L1


대괄호는 주소를 역 참조하는 것을 의미합니다. 예를 들면

mov eax, [1234]

즉, 주소 1234의 내용을 EAX로 이동합니다. 그래서:

1234 00001

EAX에는 00001이 포함됩니다.


직접 메모리 주소 지정 - 메모리 주소al 에있는 값으로로드됩니다 L1.


즉, 레지스터 값이나 숫자 값 L1레지스터로 이동하는 대신 al레지스터 값이나 숫자 값 L1을 메모리에 대한 포인터로 취급하고 해당 메모리 주소의 내용을 가져와 해당 내용을 al.

이 경우 L1은 메모리 위치이지만 레지스터 이름이 대괄호 안에 있으면 동일한 논리가 적용됩니다.

mov al, [ebx]

부하라고도합니다.


많은 어셈블러 언어와 마찬가지로 이것은 간접을 의미합니다. 즉, 첫 번째 는 주소가 아닌 (즉 , 바이트) 내용 으로 mov로드 al됩니다 .L1'w'

두 번째는 mov실제로 주소eax함께 로드 되며 나중에 해당 주소를 L1 역 참조하여 콘텐츠를 가져 오거나 설정할 수 있습니다.

두 경우 모두 L1개념적으로 주소로 간주됩니다.


이는 레지스터 자체에 작용하는 대신 레지스터가 실제 위치에 대한 포인터로 사용되어야 함을 나타냅니다.

참조 URL : https://stackoverflow.com/questions/2030366/what-do-the-brackets-mean-in-x86-asm

반응형