[사전지식4] 프로그램과 메모리의 관계

VDoring·2021년 8월 24일
0

C언어

목록 보기
4/7

프로그램과 메모리의 관계라는 거창한 제목을 쓰긴 했습니다만.. 이 글에서는 데이터를 저장하고 계산하는 과정을 다룹니다.


메모리는 '바이트'라는 단위를 기준으로 관리된다고 [사전지식2] 시간에 이야기했었습니다.
1바이트는 0에서 255까지의 수를 저장할 수 있죠.

하지만 컴퓨터는 255보다 훨씬 큰 수를 다룰 수 있습니다.

어떻게 그게 가능한 것일까요?

같이 알아보도록 합시다.

메모리에 큰 데이터 저장 시 과정

여기에 메모리가 있습니다.

저는 2번지에 40이라는 수를 저장하고자 합니다.
성공할까요?

성공했습니다!
(1바이트의 범위(0~255) 안이므로 저장할 수 있습니다)

그럼 이번에는 266이라는 수를 저장해봅시다.

실패했습니다..
(1바이트 범위(0~255) 밖이므로 저장할 수 없습니다)

그럼 255보다 큰 수는 어떻게 저장하는 걸까요?

'1바이트'라고 하니 뭔가 아이디어가 떠오르지 않나요?

정답은 여러 개의 바이트를 사용하는 것입니다.

1개의 바이트로 저장할 수 없는 데이터일 경우, 그걸 나누어 여러 개의 바이트에 저장하면 결과적으로 큰 수나 단위를 사용할 수 있습니다.
이때 데이터는 바이트 단위로 나누어집니다.

나누는 작업은 컴퓨터가 담당합니다.
사람이 일일이 나누기 힘들기 때문이죠.

메모리에 저장된 값과 사용자 입력값 연산하기

메모리에 저장되어 있는 데이터를 이용해서 계산을 할 때 어떤 식으로 연산이 이루어지는지 알아봅시다.

메모리 2번지에 40이라는 수가 저장되어 있고, 여기에 10을 더한다고 가정합시다.

그럼 계산을 위한 준비를 해야겠죠?

메모리 2번지의 값을 AX 레지스터로 복사합니다.
(AX 레지스터는 산술, 논리 연산을 할 때 사용됩니다)

10은 사용자가 직접 지정한 상수이기에 메모리를 거치지 않습니다.
(하지만 실제로는 외부 메모리에 있는 값을 연산하기 위해 CPU의 레지스터로 값을 복사하는 과정이 진행됩니다. 여기선 생략했어요)

CPU의 AX 레지스터에서 연산 장치로 옮겨져 계산하고,

계산이 끝나면 그 값을 AX 레지스터를 거쳐 원래 메모리 번지로 복사합니다.

이렇게 계산이 완료되었습니다!

profile
< Beginners Heart >

0개의 댓글