을 계산하는 방법을 알고 있나요 당신은 당신이 유효 주소가 위가^위치입니다 계산 어떻게 사람이 유효 주소
MOV EAX, [label1] ; label1 is at location 0x00D5A360
NASM
어셈블리에서이 명령이 있다고 가정합니다.주소 지정 모드가 직접이라는 사실을 알고 있습니다.
을 계산하는 방법을 알고 있나요 당신은 당신이 유효 주소가 위가^위치입니다 계산 어떻게 사람이 유효 주소
MOV EAX, [label1] ; label1 is at location 0x00D5A360
NASM
어셈블리에서이 명령이 있다고 가정합니다.주소 지정 모드가 직접이라는 사실을 알고 있습니다.
nasm에서 label
은 레이블의 주소를 나타내고 [label]
은 거기에 저장된 값을 검색합니다.
mov eax, label1 ; eax <- 0x00D5A360
또는 사용하는 다양한 lea
(부하 효과적인 주소) : : 그래서 당신은 할 수
lea eax, [label1] ; eax <- 0x00D5A360
을 또는 어셈블러가 유효 주소를 결정하는 방법을 물어? 이는 어셈블러, 선택적으로 링커 및 로더에 의해 조합되어 처리되기 때문입니다. 일반적으로 코드는 relocations으로 중간 객체 형식으로 컴파일되며 링커 또는 로더는 label1
의 유효 주소 계산을 처리합니다. 은 ": 2 권 인텔 64 및 IA-32 아키텍처 소프트웨어 개발자 설명서"에서
글쎄, 무엇을 묻는 방법은 어셈블러에서 실제 주소를 계산하는 것입니다. 예를 들어 게시 된 라인 예 MOV EAX, [label1]; label1은 0x00D5A360 위치에 있습니다. 이제 유효한 주소는 다음과 같습니다. 0x00d5a360 –
@Shawnricshawnawic : 그럼 내 대답 중 두 번째는 적합합니다. nasm의 환경/출력 형식에 따라 정적으로 결정됩니다 (ORG 지시어로 영향을 미칠 수 있음) 또는 링크 타임 (extern 기호 사용) 또는 런타임 (다시 extern 기호 사용)에 영향을 미칩니다. – user786653
완벽하게 고마워. 나는 또한 새로운 기술 "lea"를 배웠다. LOL이 너에게 대단히 감사한다고 생각했을 것이다. 나는 여기에서 그것을 처리 할 수 있다고 생각한다. :) –
LEA r16, m ; Store effective address for m in register r16. LEA r32, m ; Store effective address for m in register r32. LEA r64, m ; Store effective address for m in register r64.
는 첫 번째 피연산자의 효과가 두 번째 피연산자의 주소 (소스 피연산자)과 저장한다 (계산 대상 피연산자). 소스 피연산자는 프로세서의 주소 지정 모드 중 하나로 지정된 메모리 주소 (오프셋 부분)입니다. 대상 피연산자는 범용 레지스터입니다.
예 :
; indirect addressing mode
MOV EBX, label1 ; copy the address of label1 to EBX
MOV [EBX], 100 ; store 100 at the location pointed to by EBX
; using LEA
LEA EBX, [label1] ; stores the effective address of label1 in EBX
MOV [EBX], 100 ; store 100 at the location pointed to by EBX
둘 사이의 차이가 MOV
버전 조립시의 유효 어드레스를 해결하는 반면 LEA
은, 실행시에 실효 어드레스를 계산한다는 것이다.
그래서 기본적으로 LEA를 타이핑하고 프린트한다. 화면의 유효 주소? 거기에 컴퓨터를 사용하여 이것을 수행하는 방법이 있습니다. –
저는 Nasm에 익숙하지 않습니다. MIPS 어셈블러에서 레이블에 대한 점프 명령은 상대 값, 즉 현재 행과 레이블이있는 행 사이의 행 수를 사용합니다. NASM은 비록 단순한 MIPS와는 상당히 다른 것처럼 보입니다. 그리고이 MOV 명령이 레이블로 무엇을하는지조차 알지 못합니다. – melak47
아무런 변화가 없습니다! ** 명령어의 두 번째 부분으로 32 비트 숫자 (0x00D5A360) ** MOV EAX **는 직접 메모리 위치를 가리 킵니다. –