알맹이방
어셈블리어 13. 메모리 주소 지정 방식 본문
offset을 이용하여 메모리 공간을 접근하는 방법을 알아보겠다.
offset이란 기준점에서 얼만큼 떨어져있는 메모리의 값을 지칭할 때 쓰는 단어다. (변위차를 나타내는 정수형) 보통 메모리에서 쓰인다.
이렇게 명령어를 적으면 기준점인 ebx 402000에서부터 1, 2, 3, 4먼큼 차례로 커지며 그 자리에 1, 2, 3, 4를 저장한다. 결과를 보면 402000에 0, 402001에 1, 402002에 2 ... 가 저장되어있다.
그렇다면 이 명령어의 결과는 무엇일까? 402000에서부터 ecx만큼을 더한 주소, 처음에 ecx가 0이니까 402000, inc로 ecx가 1이 올라서 402002, inc로 ecx가 또 1이 증가해서 402002를 가리키게 될 것이다.
결과를 확인해보면 402000에 0, 402001에 1, 402002에 2가 들어간 것을 확인할 수 있다.
만약 4바이트의 int 형일 경우 int 형의 크기만큼 증가시켜줘야 한다. dword라면 4*ecx라 하면 된다.
4씩 띄워서 402000, 402004, 402008에 각각 값이 들어간 것을 볼 수 있다.
[base+offset+index*scale] 형식으로 메모리 주소를 지정해주면 된다.
대괄호 안에 쓰는 reg갯수는 최대 2개여야 하며, 대괄호 안에 이중 대괄호는 안 되고, index는 반드시 reg여야하며, scale은 자료형의 크기 즉 해당 요소의 크기라고 보면 된다.
'SISS (2017-2018) > 어셈블리어' 카테고리의 다른 글
어셈블리어 15. 조건분기명령어 JNE JA JB 상태 레지스터 CF (0) | 2018.08.13 |
---|---|
어셈블리어 14. 조건분기명령어 JZ, 상태레지스터 ZF (0) | 2018.08.13 |
어셈블리어 12. 메모리의 간접참조 (0) | 2018.08.05 |
어셈블리어 11. add, sub (0) | 2018.07.30 |
어셈블리어 10. inc, dec (0) | 2018.07.30 |
Comments