반응형

컴퓨터 49

책 읽기 끝

드디어 프로그래밍 관점에서 바라보는 컴퓨터 구조 라는 책을 다 읽었다. 솔직히 개인적으로 드는 생각은, 블로그 글을 쓰지않고 그냥 편하게 읽었더라면 한달 안에는 다 읽을 수 있지 않았을까 하는 생각이 든다. 그러나, 내가 책 내용을 한파트씩 미리미리 읽고, 다시 읽었던 내용을 되짚어가면서 블로그글을 쓰게되니, 확실히 머리속에 들어왔다는 느낌이 들었다. 혹시 시간이 좀 지나 가물가물할때에도 다시 참고해볼 수 있고 말이다. 시간은 좀 걸렸지만, 이번만큼은 책 한권을 확실히 머리속에 집어넣은거 같아 뿌듯하다. 앞으로도 책을 읽으면서 블로그도 같이 병행해서 쓸 예정이다. 이 책 말고도 읽고 싶은 책들을 많이 기록해 놨었어서(이제 살 예정) 블로그활동은 앞으로도 게속 활발하지 않을까 싶다. ㅋㅋㅋ 부록으로 한 1..

명령어 집합 (3)

(피연산자 주소 지정 방식) 주소 지정 방식(addressing mode) 이란 사용될 피연산자의 위치를 지정하는 방법을 말한다. - 묵시적(implied) - 즉시적(immediate) - 직접(direct) - 간접(indirect) - 레지스터(register) - 레지스터 간접(register indirect) - 계산에 의한 방식(displacement) 등의 주소 지정 방식이 있다. (묵시적 주소 지정 방식) 0-주소 명령 형식 에서와 같이 피연산자 없이 묵시적으로 지정된 주소 를 사용하는 방식. (스택 머신(stack machine)이 대표적인 예) (즉시적 주소 지정 방식) 피연산자 지시자(operand specifier) 의 값이 피연산자가 된다. ex) ADD AC, 5 명령어에 피연산..

명령어 집합 (2)

(명령어 형식) 주소 필드의 개수 에 따라 - 단일 누산기 구조 - 범용 레지스터 구조 - 스택 구조 로 나뉜다. (0-주소 명령 형식(스택 구조)) 연산자 코드(op-code) 만 존재하고 주소가 없는 형식이다. 이 형식은 피연산자(operand) 를 스택(stack) 에 보관한다. D = A + B * C 식을 0-주소 명령 형식으로 나타내면 PUSH A PUSH B PUSH C MUL ADD POP D 위의 명령어가 수행되면서 스택은 위의 사진과 같이 변하게 된다. (1-주소 명령 형식(단일 누산기 구조)) 연산자 코드(op-code) 와 피연산자(operand) 1개로만 이루어진 형식이다. 주기억 장치 내의 데이터와 AC 레지스터 내의 데이터로 연산이 이루어진다. D = A + B * C 식을 1..

명령어 집합

이제 일반적인 컴퓨터 상에서의 기계어 형식에 대한 공부를 할 것이다. (명령어의 구성) 연산자 코드(operation code) : 수행할 연산자의 종류를 나타냄. (op-code) 모드(mode) : 피연산자 지시자에 대한 유효 주소를 결정하는 모드를 나타냄. 피연산자 지시자(operand specifier) : 피연산자에 대한 정보를 표시하는 부분. (연산자 코드) 위의 사진은 일반적으로 많이 사용되는 명령어 집합(instruction set) 이다.

기계어와 어셈블리 언어 (4)

(분기 인스트럭션 종류) 위의 사진은 분기 인스트럭션 종류 표이다. 조건없이 무조권 operand 로 분기하는 BR instruction 과는 달리 위의 분기 인스트럭션은 특정조건이 만족해야 분기하는 인스트럭션들이다. N, Z, V, C 는 예전 내용으로 배웠던 Status bit(상태비트) 이다. C(Carry), V(Overflow), N(Negative), Z(Zero) 를 나타낸다. (절댓값 구하는 프로그램) BR main number: .BLOCK 2 main: DECI number, d BRGE endIf LDA number, d NEGA STA number, d endIf: DECO number, d STOP .END BRGE instruction 은 조건에 따라 분기하는 인스트럭션이다. 이..

기계어와 어셈블리 언어 (3)

(어셈블리 언어) 2진수로 이루어진 기계어를 영어 단어로 바꾸어놓은 언어 예) 50 00 48 => CHARO 0x48, i (mnemonic(니모닉) 인스트럭션) 기계어와 1:1 대응되는 인스트럭션으로 바꾸어놓은 것. 위의 사진은 어셈블리어 인스트럭션 표이다. 진한 회색의 인스트럭션만 예제에 쓰인다. non-unary instruction : 3바이트로 이루어져 있으며 인스트럭션 지시자(instruction specifier) 1바이트, 피연산자 지시자(operand specifier) 2바이트로 구성됨. unary instruction : 1바이트로만 구성됨. (pseudo(ㅍ슈도) 인스트럭션) 프로그래밍의 편의를 위해 추가된 인스트럭션. (실제로 인스트럭션은 아님) dot command (명령어 앞..

기계어와 어셈블리 언어 (2)

("*" 를 출력하는 프로그램) 앞서 배운 인스트럭션을 참고하여 아스키코드가 2A(*) 인 문자를 출력하는 object code 인것을 알 수 있다. (숫자 1을 출력하는 프로그램) Pep/8 가상머신 은 문자를 출력하는 인스트럭션 밖에 지원하지 않아 그냥 1이란 값을 출력하면 해당하는 아스키코드 문자가 출력된다. 첫번째 방법으로 위와같이 object code 를 작성해보았다. 문자 "0" 에 해당하는 아스키코드가 0x30 인것을 참고하여 1을 더하여 문자 "1" 의 아스키코드인 31을 출력하는 object code 이다. 그러나 첫번째 object code 는 1만 출력할 수 있는 코드이다. 따라서 이렇게 효율적인 object code 를 작성해보았다. C1 00 0D => 0x0D 부터 2바이트의 메..

기계어(machine language)와 어셈블리 언어(assembly language)

(기계어) 실습으로 저번 글에서 설명했던 Pep/8 가상머신을 사용한다. 프로그램 속 기능들이나 자세한 사용방법은 설명하지 않는다. 위의 사진처럼 Object Code 를 작성하고 Load 해보면 메모리에 Object Code 가 로드된것을 볼 수 잇다. 이제 Execute 해보면 위의 사진과 같이 Output에 Hi 가 출력 된것을 볼 수 있다. (기계어 해독) 위의 사진은 일반적으로 많이 쓰이는 명령어 집합(instruction set) 이다. 그리고, 위의 사진은 Pep/8 가상머신에서 쓰이는 명령어 집합 이다. (진한 회색으로 칠해진 4개의 인스트럭션이 앞으로 예제에서 사용할 명령어이다.) 따라서, 아까 Hi 라는 문구를 출력하기 위해 쓴 Object Code 를 해석해볼 수 있다. 50 00 4..

가상 머신의 구조

(가상머신) 사용할 가상머신은 Pep/8 이라는 가상머신이다. http://computersystemsbook.com/ 사이트에 들어가면 다운받을 수 있다. (레지스터) Pep/8 가상머신은 6개의 레지스터를 제공한다. Status Bits(상태 레지스터) : 기계어 실행 결과로 발생하는 CPU 내부의 상태를 저장. Accumulator(누산기) : 연산에 사용될 피연산자(opperand) 를 저장. Program Counter : 명령어를 접근할 때 사용된다. Index Register : 배열 등의 연속된 데이터를 사용할 떄 사용된다. Stack Pointer : 런-타임 스택(run-time stack) 을 접근할 떄 주소를 계산하는 용도로 사용된다. (함수 호출 등) Instruction Regi..

(6. 컴퓨터 하드웨어) 입출력 장치 (3)

(인터럽트) CPU가 특정 기능을 수행하던 도중 급하게 다른 일을 처리하고자 할 떄 사용할 수 있는 기능. - 기존의 작업을 수행하던 중, 인터럽트 발생. - 현재 수행하던 작업을 중지하고 컴퓨터 상태 보관. - 해당 인터럽트를 처리하기 위한 인터럽트 서비스 루틴(Interrupt Service Routine) 수행. - 인터럽트 처리 후 저장했던 이전상태를 복원하고 원래 작업 재개. (인터럽트 종류) 외부 인터럽트 : 입출력 장치, 타이밍 장치, 전원 등 외부적인 요인에 의해 발생하는 인터럽트. - 전원 이상 인터럽트 - 기계 고장 인터럽트 - 입출력 인터럽트(I/O Interrupt) 내부 인터럽트 : 잘못된 명령이나 데이터를 사용할 때 발생하는 인터럽트. - 0으로 나누는 경우 - Underflow..

반응형