컴퓨터구조 5

[컴퓨터구조] 명령어 형식

명령어 방식 명령어는 명령부(OP Code + Mode)와 자료부(주소필드, Operand)로 구성합니다. 이 중에 자료부(Operand 부)에 올 수 있는 개수에 따라 명령어 방식을 구분합니다. 0주소 명령어(0 Address Instruction) 1주소 명령어(1 Address Instruction) 2주소 명령어(2 Address Instruction) 3주소 명령어(3 Address Instruction) 0주소 명령어(0 Address Instruction) OP Code 부만 있고 주소를 지정하는 자료부(Operand 부)가 없는 명령어 모든 연산은 Stack 메모리의 TOP(Stack 포인터)이 가리키는 Operand를 이용하여 명령을 수행합니다. 스택 기계(Stack Machine)라고 ..

컴퓨터구조 2020.07.22

[컴퓨터구조] 레지스터(Register)

레지스터는 데이터를 저장하고 조작하는 것을 돕는 마이크로프로세서의 메모리 영역이다. 컴퓨팅에서, 하드웨어 레지스터는 다른 종류의 '하드웨어 입출력 (I/O)'를 위한 저장공간이다. 하드웨어 레지스터는 주요 주변장치의 내부에 포함되어 있고, '메모리맵 I/O'나 '포트맵 I/O'의 의미에 따라서 컴퓨터의 '중앙 처리 장치(CPU)'를 나타낸다. 특히 초기화 동안에, "환경설정"과 주기능의 시작을 포함하는 하드웨어 레지스터의 일반적인 사용은, 1. "버퍼 저장공간" (예시로 그래픽 카드 VGA 를 위한 비디오 메모리)과, 2. 하드웨어 장치에 발생되는 주요한 사건 같은 "상황 보고"가 있다. 읽어진 하드웨어 레지스터는 프로세서(Processor, Microprocessor, CPU)에 의한, "읽기"나 "저..

컴퓨터구조 2020.06.22

[컴퓨터구조] 파이프라이닝

[컴퓨터구조] 파이프라이닝 명령어 파이프라인(instruction pipeline)은 명령어를 읽어 순차적으로 실행하는 프로세서에 적용되는 기술로, 한 번에 하나의 명령어만 실행하는 것이 아니라 하나의 명령어가 실행되는 도중에 다른 명령어 실행을 시작하는 식으로 동시에 여러 개의 명령어를 실행하는 기법이다. 하나의 명령어는 여러 개의 단계로 나눌 수 있는데, 이때 하나의 명령어를 처리할 때까지 다음 명령어가 처리되지 않고 기다린다면, 명령어의 특정 단계를 처리하는 동안 다른 단계를 처리하는 부분은 아무 작업도 하지 않게 된다. 이때 파이프라인을 사용하면 한 명령어의 특정 단계를 처리하는 동안 다른 부분에서는 다른 명령어의 다른 단계를 처리할 수가 있게 되므로 속도가 향상될 수 있다. [컴퓨터구조] 파이프..

컴퓨터구조 2020.05.31

[컴퓨터구조] CPU와 파이프라인

[컴퓨터구조] CPU와 파이프라인 여러분이 만든 C소스를 컴파일을 하고 나면 하나의 바이너리가 만들어지겠죠. 이 바이너리를 실행하는 CPU는 8비트씩 바이너리를 읽어와서 실행을 한답니다. 그럼 32비트라면 어떻게 될까요? 아무래도 비트수가 많을 수록 '처리하는 속도'가 빨라지겠죠. 마이크로 프로세서 과목에서 반드시 이해하셔야 될 것은 LED ON/OFF 랍니다. C프로그램으로 LED ON/OFF 프로그램을 만들 수 있다면 임베디드 시스템에서 하드웨어를 제어할 수 있다는 의미죠. 왜냐하면 LED ON/OFF를 하려면 먼저 '회로도'를 보셔야 해요. CPU 어느 핀에 LED를 연결했는지 확인을 한 후 해당 핀에 어떻게 신호를 넣으면 될지 프로그램을 해야 하는데, 그러려면 CPU데이터 시트를 보면서 프로그램을..

컴퓨터구조 2020.05.31

[C/C++] 2의 보수 표현법과 정수 오버플로우

CPU 개발자라면 컴퓨터 상에서 정수 음수를 어떤식으로 표현하도록 만들었을까요? 가장 간단히 생각해보자면 우리가 부호를 통해서 음수 인지 양수 인지 나타내니까, 비슷한 방법으로 부호(sign bit)를 나타내기 위해서 1 비트를 사용하는 것입니다. (예를 들어서 0 이면 양수, 1 이면 음수) 그리고 나머지 부분을 실제 정수 데이터로 사용하면 되겠죠. 예를 들어서 가장 왼쪽 비트를 부호 비트라고 생각하자면 (참고로 아래 표현하는 수들은 모두 이진법으로 작성한 것입니다.) 0111(2)은 7(4+2+1)이 될 것이고 1111(2)은 맨 왼쪽 부호비트(sign bit)가 1 이므로 -7 을 나타내게 됩니다. 꽤나 직관적인 방식이기는 하지만 여러가지 '문제점'이 있습니다. 0000(2)과 1000(2) 둘 다..