GaGe

05. 메모리 주소와 접근 본문

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

05. 메모리 주소와 접근

Sorrel 2018. 7. 15. 16:23

이번 5단원에서는 메모리를 사용하는 방법에 대해 알아보자.

기본적으로 알아야 할 개념은
하나의 메모리 주소에는 한 바이트를 표현할 수 있다는 점이다.

어셈블리어로 표현하는 방법은 []안에 주소값을 넣는 것이다. 주소값의 숫자는 16진수이며, 해당하는 메모리의 공간을 가리키게 된다.



올리디버그의 왼쪽 아래 공간이 메모리를 나타내는 부분이다. 왼쪽의 Address가 메모리 주소, 오른쪽 Hex dump 부분이 데이터 부분이다.

운영체제가 그 많은 메모리 중에 너 이부분 써라. 해서 우리가 메모리를 사용할 수 있는 부분을 보여주는 것이다.


메모리에 값을 넣는 방법은 명령어 창에서
mov [402000(메모리 주소)], al

이렇게 하면 되는데 이 명령어의 의미는 al에 있는 값을 메모리 402000번지에 넣어라 라는 의미이다.

저렇게 명령어를 적으면 자동으로 앞에 byte어쩌구가 생기는데 이 부분은 다음시간에 설명하겠다.


al은 위와 같이 91이었으므로 명령어를 실행하면 왼쪽 아래 402000부분의 메모리에 91이 들어가는 것을 볼 수 있다.


반대로도 가능하다. 명령어를 바꿔서 mov cl,402000을 넣으면 사진과 같이 cl의 자리에 402000에 있던 값이 들어가게 되므로 ecx맨 뒤 두자리에 402000 에 있던 91이 들어가는 것을 볼 수 있다.


단, 안 되는 명령어가 있다.
mov 메모리,메모리 (X)

이러한 작업에 대한 기계어는 만들어져있지 않다.
그럼 어떻게 할 것인가?
바로 중간 과정인 레지스터에 잠깐 넣어놓고 복사하는 것이다.

402000의 메모리에 있는 값을 402001에 복사하고 싶으면

mov al,402000
mov 402001,al

이렇게 해주면 된다.


al에 402000값이 잠깐 저장되고


다시 402001에 al의 값을 넣는다.


아까 자동으로 생겼던 BYTE PTR DS : 이 부분은 다음시간에 설명하기로 한다!
Comments