본문 바로가기
프로그램 개발

[어셈블리어] 3장 명령어: mov

by DRIN 2016. 9. 27.

목차

    반응형

    저번 시간에 예고해드린 것처럼 오늘은 연산자 mov에 대해서 배워보겠습니다. mov연산자의 사용법은 이러합니다. 


    먼저 연산자인 mov가 오고 그 다음으로 레지스터의 이름 ',' 다음에 값을 넣습니다. 이게 무엇을 뜻하느냐하면, 해당 레지스터 이름에 값을 덮어씌워라! 라는 명령하고 같습니다. 왜 덮어씌우는 것이냐 하면 컴퓨터관련을 수업을 들으신 분들이라면 이런 말을 지겹게 들으셨을겁니다. 두 공간에 값이 있는데 이 두공간의 값을 어떻게 교환하느냐?하는 질문을 하면 아무것도 모르는 사람은 그냥 서로 바꾸면 되지요.라고 답변을 합니다. 하지만 교수님은 그것을 틀렸다고 하실 것입니다. 컴퓨터는 멍청하기 때문에 해당 공간안에 새로운 값이 들어오면 원래있던 값은 사라지게 됩니다. 물론 옮기는 공간에는 해당값이 존재하구요. 그러면 두개의 공간이 같은 값을 가지게 되지요. 그래서 두 공간의 값을 교환할때에는 세개의 공간을 필요로 합니다. 값이 들어있는 두개의 공간 그리고 비어있는 한개의 공간을 말이죠. 옮기는 방법은 1번 공간안에 있는 값을 빈공간안에 넣고, 1번 공간에 2번 공간의 값을 넣고, 빈공간에 있는 값을 2번 공간에 넣는 것이죠. 그림으로 설명하면 이렇습니다.

     

    1의값을 빈공간에 넣는다!



    2의 값을 첫번째 방에 넣는다.


    빈공간의 값 1을 두번째 방에 넣는다.


    이런식으로 교환이 이루어져야 제대로 교환이 이루어졌다고 할수있습니다. 설명이 길었는데요. 그럼 본론으로 들어가서 연산자 mov는 해당 레지스터에 해당 값을 덮어씌워라! 라고 설명드렸는데요. 예를 들어서 mov eax, 1이라고 하면, eax라는 레지스터에 1이라는 값을 덮어씌워라! 라는 말입니다. 그럼 이제 올리디버거로 실습해 보겠습니다. 올리디버거는 32비트 실행파일을 지원하기 때문에 32비트 실행파일 없으신 분들은 이 파일을 사용하시면 되겠습니다. 

    빈 파일.exe


    올리디버거를 실행하시면 File에 들어가셔서 open을 클릭해서 자신이 저장해놓은 빈파일.exe를 열어줍니다.

    그럼 위에와 같은 화면이 뜨게 될텐데요. 코드가 많은 것은 신경쓰지마세요. 빈파일인데 왜 저렇게 많은지는 모르겠습니다. 여튼 mov al, 0f1이라고 되어있는 부분을 더블클리하시면 밑에와 같은 창이 뜨게 됩니다. 이제 우리가 배운 mov명령어를 쓸 차례이지요.



    아까 배웠던것처럼 mov eax, 1을 써넣어줍니다. 다 쓰셨다면 Assemble을 클릭하시면 그 다음창과 같이 mov eax, 1이라고 빨간 글씨로 써져있는 것을 확인하실수 있습니다. 그럼 이제 실행을 해보아야겠지요? 옆창 Registers부분을 보면 eax가 00401000으로 되어있습니다. 실행을 하게되면 제일 밑에 있는 사진처럼 eax가 00000001로 변하게 됩니다. 이 mov연산자를 쓸때 굳이 값을 1이런식으로 주지 않고 mov eax, ebx처럼 값에 레지스터를 넣게 되면 해당 레지스터에 있는 값이 넣고자하는 레지스터에 덮어씌워지게 됩니다. 이처럼 값부분에 레지스터를 써넣을 때는 주의해야할 사항이 있는데요. 두 레지스터의 크기가 같아야합니다. 이 레지스터의 크기에 대해서는 다음시간에 자세하게 알아보구요. Registers부분에 있는 E로 시작하는 것들은 모두 레지스터이니 mov연산자를 다양하게 넣어보시기 바랍니다. 컴퓨터는 항상 실습이 주가 되어야합니다. 이론은 둘째구요. 그럼 다음시간에 뵙겠습니다.

    2016/09/26 - [어셈블리어] - [어셈블리어] 어셈블리어는 왜 사용하는 걸까?

    2016/09/26 - [어셈블리어] - [어셈블리어] 1장. 어셈블리어란?



    반응형