if (study)/기본기 수련
빅 엔디안과 리틀 엔디안의 개념에 대한 설명은 다른 글에서 정리해 두었다. 구글링해서 예제를 찾아보니 구현은 보통 C언어로 된 게 많은 것 같다. 나는 C언어보다 Java가 편해서 Java와 Kotlin으로 한번씩 짜봤다. 예제를 만들면서 새로이 알게 된 사실도 같이 정리하려고 한다. 이 글에서 비트연산자에 대한 설명은 따로 하지 않을 것이다. 네트워크로 데이터를 전송할 때 같은 엔디안 시스템을 사용하는 컴퓨터에서는 호환성 문제가 생기지 않는다. 하지만 서로 다른 엔디안을 사용하는 컴퓨터의 경우 컴퓨터가 데이터를 제대로 읽지 못하는 경우가 생길 수 있다. 때문에 바이트의 정렬 방법을 변환해야 하는 경우가 있다. 변환 방식을 설명하기 위해 0x12345678를 예로 들어보겠다. 이 16진수를 32비트의 이..
CPU가 명령어와 데이터를 처리하려면 먼저 메모리에 적재가 되어야 한다. 엔디안은 이때 메모리 워드에서 바이트를 저장하는 순서인 byte order를 결정한다. 엔디안에 대해 얘기하기 전에 먼저 명령어와 메모리의 논리적 구성에 대해 간단히 정리한다. 메모리의 속성 1) 워드(word) 워드는 명령어와 데이터를 담을 수 있는 메모리 구성 요소 중 하나이다. 워드는 고정된 개수의 bit라는 메모리 소자로 이루어진다. 컴퓨터마다 워드를 구성하는 비트 수는 다르나, 대부분의 컴퓨터에서 하나의 word는 32bit로 구성되어 있다. 2) 주소(address) 메모리는 주소라는 고유의 값을 사용해 명령어나 데이터를 참조한다. 택배 기사가 주소를 보고 배송을 하듯이 메모리에서 특정한 데이터가 저장된 위치를 알아내기 ..
CPU에서 연산을 수행하려면 데이터의 위치를 알아야 한다. 따라서 명령어는 피연산자 필드를 사용해 데이터의 위치에 대한 정보를 제공한다. 주소 지정 방식(Memory Addressing Modes)은 피연산자 필드를 사용해 데이터의 유효 주소를 결정하는 방법이다. 유효 주소는 기억 장치에서 데이터가 실제로 위치한 공간을 의미한다. 명령어에 담을 수 있는 비트 수에는 제한이 있기 때문에 최대한 효율적으로 데이터의 위치를 지정하는 다양한 주소 지정 방식이 사용된다. 주소 지정 방식은 피연산자의 정보로 부터 원하는 데이터를 얻기 위해 거쳐야하는 단계 수에 따라 크게 세가지로 분류할 수 있다. 0-단계 주소 지정 방식 유효 주소를 파악하기 위한 별도의 계산이 필요 없는 방식으로 데이터의 유효 주소를 명시하지 않..