9. 주소값 간접 지정
Assembly
2017. 5. 18. 21:47
MOV dword ptr [402000], 0
주소값에 직접 접근하는것이아니라
주소값을 레지스터에 넣은 후 레지스터로 접근한다.
MOV eax, 402000
MOV dword ptr[eax], 0
메모리에 다른 메모리의 주소를 넣는것이 포인터의 개념이다.
int a = 0;
int *p = &a;
*p = 4;
임의로 a의 주소는 402000, *p의 주소는 402004라고 하자.
int a = 0을 어셈블리어로 표현하자면
mov dword ptr[402000], 0
int *p = &a를 어셈블리어로 표현하자면
mov dword ptr[402004], 402000
*p = 4를 어셈블리어로 표현하면
mov ebx, dword ptr[402004]
mov dword ptr[ebx], 4
p 라는 변수에 a의 주소를 저장하고 있다가
쓸 때는 a의 주소안의 데이터에 간접적으로 접근하는 방식이다.
메모리간의 정보교환은 직접적으로 이루어지지못하기 때문에
레지스터를 통하여 정보를 교환하여야한다.
여기서 dword만 쓴 이유는 int 형은 4바이트, 즉 dword의 크기와 같기 때문에
4바이트 크기인 dword만 사용했다.
'Assembly' 카테고리의 다른 글
11. 조건 분기문 (0) | 2017.05.18 |
---|---|
10. 메모리 주소 지정방식 (0) | 2017.05.18 |
8. ADD, SUB (0) | 2017.05.18 |
7. INC, DEC (0) | 2017.05.17 |
6. JMP (0) | 2017.05.14 |