게하! 개하! (게임도 하고 개발도 하고)

어셈블리어 13. 메모리 주소 지정 방식 본문

SISS (2017-2018)/어셈블리어

어셈블리어 13. 메모리 주소 지정 방식

Sorrel 2018. 8. 6. 00:31

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은 자료형의 크기 즉 해당 요소의 크기라고 보면 된다.
0 Comments
댓글쓰기 폼