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]
의 값에서 ebp
4를 빼고 대괄호는 결과 값이 주소로 사용되며 해당 주소에있는 값이에 저장됨을 나타냅니다 eax
. 그러나 lea
의 경우 대괄호는 다음을 의미하지 않습니다.
lea eax, [ebp - 4]
의 값에서 ebp
4를 빼고 결과 값이에 저장됩니다 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
'Programing' 카테고리의 다른 글
로그 항목 당 타임 스탬프가있는 log4j (0) | 2021.01.06 |
---|---|
일반 텍스트 URL을 PHP에서 HTML 하이퍼 링크로 변환 (0) | 2021.01.06 |
웹 주소가 인쇄되지 않도록 내 인쇄 CSS에서 URL을 제거 할 수 있습니까? (0) | 2021.01.06 |
VB.NET : ComboBox에서 사용자 입력을 방지하는 방법 (0) | 2021.01.06 |
현재 선택된 것을 어떻게 얻습니까? (0) | 2021.01.06 |