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

[어셈블리어] 레지스터(Register)

by DRIN 2016. 9. 27.

목차

    반응형

    오늘은 저번시간에 MOV연산자로 할당하였던 레지스터에 대해서 알아볼까합니다. 우선 레지스터가 무엇인지부터 정의를 내려야 할것같은데요. 레지스터란 CPU내에 있는 장치로 자료를 보관하는 아주 빠른 기억 장소입니다. 레지스터는 메모리 계층중에서 최상위에 위치하며, 가장 빠른 속도로 접근이 가능한 메모리입니다. 이 레지스터는 여러 종류의 레지스터가 존재하는데 오늘은 그 레지스터의 종류중 범용 레지스터에 대해서 알아보려합니니다. 


    범용 레지스터는 데이터와 주소를 모두 저장할 수 있는 레지스터입니다. 저번 어셈블리어 강좌 2016/06/24 - [Software/어셈블리어] - [어셈블리어] 3장 명령어: mov를 진행할때 mov연산자뒤에 레지스터의 주소가 들어갔었습니다. 그 레지스터의 종류가 EAX, EBX, ECX, EDX, EBP, ESP, EDI, ESI, EIP등이 있었는데요. 이 레지스터들마다 사용용도가 있습니다. 사용용도는 오늘의 주제가 아니니 설명하지 않구요. 올리디버거에서 사용하는 이 범용레지스터에 대해서 알아보려고 합니다. 


    원래 기존에는 AX, BX...로 앞에 E가 빠졌었는데요. 386이 나왔을 때 4개의 새로운 레지스터가 추가되었는데 이것을 EAX, EBX, ECX, EDX라고 합니다. EBP, ESP, EDI, ESI, EIP등은 나중에 차차 알아가고 우선은 EAX, EBX, ECX, EDX이 4개의 레지스터에 대해서 알아보려고합니다. 앞에 E가 의미하는 것은 무엇이냐하면 누구나 예상할 수 있듯이 Extended(확장된)을 뜻합니다. 그럼 Extended가 되기전 AX, BX...도 알아봐야겠지요? 먼저 AX레지스터는 수학연산, 1/0연산,등을 다루는 용도로 사용되는 레지스터입니다. BX레지스터는 Base 또는 Pointer의 용도로 쓰이고, CX레지스터는 루프 및 반복의 용도로 쓰이고, DX는 다양한 데이터, 문자 출력의 용도로 사용됩니다. 이것들을 꼭 아실필요는 없고 그냥 이런게 있다라고만 알아두시면 될것 같습니다. 


    이 AX, BX, CX, DX는 두개의 공간으로 또 나누어 지는데 나눠진 공간중에서 앞부분은 high의 h 뒷부분은 low의 l로 표기합니다. 즉, AX=AH+AL이 되는 것이죠. 나머지 레지스터도 BH, BL..이런식으로 나뉘어 집니다. 우리가 문자를 입력할때에는 이 레지스터들의 크기만큼 잘려서 저장이되는데요. 예를 들어서 LIFE라는 단어를 AX레지스터에 저장할 경우에는 AH부분에는 LI, AL부분에는 FE가 저장되는 것입니다. 


    그럼 이제 우리가 저장한 숫자가 어떻게 저장이 되는지 알아보아야겠지요? 올리디버거의 예전 버전에서는 AH AL이 모두 표시가 되었었는데 현재 업데이트된 버전에서는 AH AL정보가 나오지를 않습니다. 하지만 눈으로만 보아도 대충 어디가 AL부분이고 어디가 AH부분인지 알수있습니다. 그럼 직접 보면서 설명을 드리겠습니다. 


    EAX레지스터의 숫자부분을 더블클릭하게 되면,



    와 같은 창이 뜨게 됩니다. 이 창은 직접 레지스터에 값을 넣어주는 것입니다. 창에 있는 요소를 하나하나씩 살펴보면, 먼저 Hexadecimal은 영어뜻 그대로 16진수를 뜻합니다. 레지스터에 저장이 되는 값을 의미하지요. 밑에 Signed, Unsigned는 C언어를 하신분들은 금방 알듯이, 부호가 있는것, 부호가 없는것으로 나뉩니다. +,-라는 부호가 들어가게되면 부호가 없는 수의 절반만 입력할수 있습니다. 쉽게 예를들자면, 10이라는 공간이 존재할때 양수 음수로 나뉘는 수를 넣고자할때에는 +5부터 -4 혹은 +4부터 -5까지 넣을수 있습니다. 숫자 0을 포함해서요. 그러나 부호가 없는 경우에는 0~9까지 숫자를 넣을 수 있습니다. 즉 넣을 수 있는 최대의 수가 2배 증가되는 것이죠. 이정도면 어느정도 이해하셨을거라 생각됩니다. 


    그리고 제일 밑에 Char는 Character의 줄임말입니다. 만화 캐릭터의 캐릭터가 아니라 문자를 뜻하는 말입니다. 이 char부분에는 똑같은 문자 혹은 숫자가 들어가있는 반면에 뒤에 a 와 N은 다르게 입력이 되었습니다. 왜 그런걸까요? 답은 바로 아스키코드(ASCII code)입니다. 오늘은 설명이 길어졌으니 다음강좌에서 아스키코드에 대해 설명드리겠습니다. 궁금하신분들은 미리 검색해보셔도됩니다.

    2016/09/27 - [어셈블리어] - [어셈블리어] 3장 명령어: mov

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

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


    반응형