컴퓨터 구조는 크게 두가지로 정리할 수 있다.
컴퓨터가 이해하는 정보
가. 데이터(정보)
나. 명령어(instruction)
컴퓨터의 물리적인 핵심 부품
가. CPU
나. 메모리
RAM
ROM(펌웨어 저장 등)
다. 보조기억
라. IㆍO시스템
메모리 → 현재 실행되는 프로그램의 명령어와 데이터를 저장한다. 이때 저장된 명령어와 데이터에는 모두 주소가 붙어있음
CPU → 산술논리 연산장치(ALU), 레지스터, 제어장치 세 개로 구성되어 있다.
시스템 버스 → 주소버스(주소 주고받음), 데이터 버스(데이터 주고받음), 제어버스(제어신호 주고받음)
💡CPU가 버스를 통해 명령어나 데이터를 읽으려 할 때는 주소버스를 통해 대상 주소와 제어버스를 통해 메모리를 어떻게 할건지 두가지 시그널을 보낸다.
💡저장할 때는 데이터버스를 통해 저장할 데이터 주고 받음.
💡컴퓨터는 x의 2의 보수를 –x로 이해한다. 왜? 우리가 일반적으로 사용하는 -(마이너스)기호컴퓨터 상에서 구현하기 어렵기 때문임
10101은 +0101
00101은 –1011
💡2의 보수를 구하는 방법은 간단함. 이진수 x의 모든 수를 반전시키고, 1을 더해주면 됨
💡이렇게 구한 x의 2의 보수는 실제 음수가 갖는 여러 성질을 비슷하게 가짐. 두 번 음수를 취하면 원래 수가 나오는 것부터, x와 x의 2의 보수를 더하면 한자리수가 반올림 돼서 1000...꼴로 값이 나오는데, 여기서 1만 절삭해주면 0의 값이 나오는 것도 같음.
여기서 생기는 문제는 -1011을 표현하는 음수 0101과 십진수 5를 표현하는 0101을 어떻게 구별할 것인지임. 이는 레지스터에서 플래그를 이용해서 구분함 그래서 C등에서 sign과 unsign을 구별하는 것임.
💡참고로 이런 2의 보수법으로는 –2^n과 2^n은 표현 불가임
명령어를 실행하는 프로그래밍 언어에는 다음 두 가지가 있다.
high-level이 low-levle로 변환되는 데에는 두가지 방식이 사용된다.