목록전체 글 (167)
GaGe
일단 메모리를 읽는 순서는 주소값이 낮은 것부터 높은 순서대로 읽는 것을 알아야 한다. 메모리를 저장하는 방법에는 리틀엔디언과 빅엔디언이 있다. 둘을 모두 지원하는 것은 미들엔디언이다. 이들은 모두 하드웨어의 구조, 설계의 다름에 차이가 있다. 어떤 값을 저장공간에 저장하라 할 때, 낮은 자릿수부터 저장하면 리틀엔디언, 높은 자릿수부터 저장하면 빅엔디언이다. 따라서 빅엔디언은 앞에서부터 높은자리수라고 이해하며 차례대로 읽으면 되지만 리틀엔디언은 먼저 읽은 것은 낮은 자리수로 이해하면 된다. 3456은 일단 이진수로 00110100 01010110 이다. 3456을 저장할 때 리틀엔디언이면 01101010 00101100 좌우대칭의 56. 좌우대칭의 34 으로 메모리에 들어가게 된다. 또한 3456을 빅엔..
전 시간에서 봤던 byte ptr에 대해서 알아보겠다. byte뿐만 아니라 dword, word도 존재한다. 그렇다면 이것들이 의미하는 바는 무엇일까? 그 전에 공통적으로 들어가는 PTR이 의미하는 바는 무엇일까? ptr은 c언어에서도 배웠듯, 포인터의 줄인 말이다. 어셈블리어에서의 포인터는 메모리의 공간을 가리키는 말이다. DWORD = 4byte (d=double) WORD = 2byte BYTE = 1byte 32비트 구조다라고 했을 때 word(기본)=4byte여야 자연스러운 것 같은데 사실은 2byte인 이유는 원래 16비트였었는데 32비트로 확장이 된 것이기 때문에 word의 의미를 4byte로 바꾸면 헷갈릴까봐 원래의 의미인 2byte로 계속 쓰도록 했기 때문이다. 32비트에서는 확장된 개념..
이번 5단원에서는 메모리를 사용하는 방법에 대해 알아보자. 기본적으로 알아야 할 개념은 하나의 메모리 주소에는 한 바이트를 표현할 수 있다는 점이다. 어셈블리어로 표현하는 방법은 []안에 주소값을 넣는 것이다. 주소값의 숫자는 16진수이며, 해당하는 메모리의 공간을 가리키게 된다. 올리디버그의 왼쪽 아래 공간이 메모리를 나타내는 부분이다. 왼쪽의 Address가 메모리 주소, 오른쪽 Hex dump 부분이 데이터 부분이다. 운영체제가 그 많은 메모리 중에 너 이부분 써라. 해서 우리가 메모리를 사용할 수 있는 부분을 보여주는 것이다. 메모리에 값을 넣는 방법은 명령어 창에서 mov [402000(메모리 주소)], al 이렇게 하면 되는데 이 명령어의 의미는 al에 있는 값을 메모리 402000번지에 넣어..
메인보드이다. 메모리는 CPU에 가까울수록 빠르다고 할 수 있다. 메모리의 특성을 비교해보자면, 용량 : CPU(레지스터,캐시)HDD 용량과 속도는 반대라는 것이다. 예를 들어서 가게에서 두부 2000원을 샀다고 하자, 샀다는 것을 기억하는 것 = 레지스터 기록해놓은 종이, 영수증 = 램 영수증을 모아두는 가계부 = HDD 구조상 SSD를 써도 RAM이 훨씬 빠르다고 한다. CPU의 메모리 구조를 보자. 전기신호가 있으면 1이고 없다면 0이라고 하자. 전구로 비유해서 이렇게 끊어졌다고 하면 0이다. 전구 2개를 이용해서 1과 0을 동시에 표현해 2비트를 표현할 수 있다. CPU로 표현하면 전기신호가 세면 1, 약하면 0으로 한다. 전구를 8개를 한번에 연결한다면 8비트가 되는 것이다. 8비트의 메모리 1..
레지스터와 레지스트리는 비슷한 단어이지만 다른 저장공간이므로 각별히 주의하자. 레지스트리 : 윈도우에서 시스템의 다양한 설정값들을 저장하기 위한 저장 공간 레지스터 : CPU 내에 있는 가장 빠른 저장 공간 앞에 글에서 했던 것처럼 전체를 다시 시작할 수도 있지만 특정 부분에서 다시 시작할 수도 있는데 그 때는 그 특정 부분을 클릭하고 좌클릭해서 new origin here (ctrl+*)을 누르면 된다. 앞에 글에서는 eax라는 레지스터 공간에 값을 저장한다라고 설명했지만 정확히 말하자면 덮어쓰기의 개념으로 설명된다. 이 점은 C언어에서의 변수의 기초 개념으로 많이 다루었기 때문에 자세한 건 생략한다. 명령어를 mov eax,0 mov ecx, 1 mov ebx, 2 mov edx, 3 으로 하고 실행..