마이크로 명령-입출력과 인터럽트
입출력 (input/output) 구성
컴퓨터는 사용자와 통신을 하기 위해서 외부 장치, 즉 메모리로 데이터와 명령어를 읽어들일 입력장치(input device)와 계산결과를 사용자에게 표시해 줄 출력장치(output device)를 갖춰야 한다.
입출력 구성
- 키보드의 입력 값이 시리얼 통신 인터페이스를 통해 INPR(Input Register)로 전달
- INPR로 값이 전달될 경우 FGI의 값이 1로 변경
- 해당 레지스터의 값이 차면 FGI의 플래그가 활성화되어 AC로 전달
- AC로 값이 전달되었을 경우 FGI의 값이 0으로 변경
- 마찬가지 방식으로 OUTR, 프린터로 값이 순차적으로 전달
- FGI/FGO : 1일 경우 새로운 입출력 가능 / 0일 경우 컴퓨터 사용중
인터럽트(interrupt)
위와 같이 플래그를 사용한 통신 방법을 프로그램 제어 전송 (program controlled transfer)이라고 하는데 이것은 프로세스와 입출력장치의 속도차이 때문에 매우 비효율적이다.
컴퓨터 실행 속도 대비 외부 입력 장치와의 입출력 속도 차이
- 컴퓨터의 프로세스 처리 속도 : 10 $\mu s$ - fetch and execute cycle time
- 입출력 장치의 처리 속도 : 10 문자/초 = 1문자 당 100,000 $\mu s$
- 매 전송마다 5000번의 flag 검사가 필요 (입/출력 각각 5000번씩)
IEN (Interrupt Enable Flip-flop)
- 프로그램 제어 전송 대신 외부 장치가 전송 준비가 되었을 경우 컴퓨터에 알릴 수 있는 Flip-flop
- 프로그램 실행 도중 flag를 검사하는 대신 flag가 set되는 즉시 실행 중이던 프로그램을 중지하고 flag의 set 정보를 받아 입출력을 실행한 뒤 원 프로그램으로 복귀한다.
인터럽트 사이클 흐름도
인터럽트 사이클 흐름도 설명 | 메모리 상태 |
---|---|
![]() | ![]() |
- 255번지에 있는 명령이 실행되는 도중 Interrupt Flag R=1이 되어 인터럽트가 발생
- 복귀주소가 되는 현재 PC(Program Counter)의 값은 256번지
- before interrupt에서와 같이 입출력 서비스 프로그램은 1120번지에 로드되어 있음
- interrupt execute: M[0] <- 256, PC <- 1, R <- 0 (clear)
- PC가 1이므로 다음 사이클에서 Execute M[1]이 실행되고 이 명령에 따라 1120번지로 분기하여 입출력 프로그램 실행
- BUN(Branch UNconditionally): 프로그램의 흐름을 지정된 유효번지로 이동
- 입출력 프로그램은 마지막에 M[0]에 저장된 값을 PC에 돌려주어 프로그램 복귀가 가능하게 함
- ION Instruction에 의해 IEN을 1로 set하고 프로그램 복귀 시도
기본 컴퓨터 프로그래밍
프로그래밍 일반
일반적으로 컴퓨터는 하드웨어와 소프트웨어로 구성된다. 소프트웨어는 크게 시스템 소프트웨어와 응용 소프트웨어로 나눌 수 있다.
프로그램의 종류
프로그램 처리 과정
프로그램을 작성하는 일은 일련의 기계 명령어를 직, 간접적으로 기술하는 행위로 컴퓨터 내부의 기계어는 이진 형태의 의미 파악이 힘든 형태로 구성되어 있어 프로그래머는 영자, 숫자 형태의 기호 (High Level Language, 일반 고급 언어)로 프로그램을 작성하는 것이 편하다.
하지만 기계는 이러한 형태의 사용자 위주 프로그래밍 언어를 이해할 수 없기 때문에 하드웨어가 인지할 수 있는 이진 프로그램으로 옮길 필요가 있다. 이를 위해 컴파일 언어가 등장하였다.
- 네모닉(mnemonic) : 기억하기 용이한 형태로 이름을 나타내는 기호로 어셈블리 언어에서 주로 사용된다. ex. AND, ADD, LDA
기계어
프로그램이란 컴퓨터로 하여금 원하는 데이터 처리 업무를 시행시키기 위해서 작성된 명령어 또는 문장으로 구성된 리스트이며 다음과 같은 종류가 있다.
- 이진 코드 : 메모리 상에 나타나는 형태의 명령어로 이진수 명령어와 operand의 sequence이다.
- 8/16진수 : 이진 코드를 편의상 8/16진수 형태로 표현
- 기호 코드 : 사용자가 연산 부분, 주소 부분 등에 대하여 기호(문자, 숫자, 특수문자 등)를 사용하게 되며 각 기호 명령어는 하나의 이진 코드로 번역되는데 이러한 번역을 assembler가 담당한다. 이러한 방식의 언어를 assembly language라고 한다.
- 고급 프로그래밍 언어 : 컴퓨터 H/W의 동작을 염두에 두지 않고 문제 해결에 관점을 맞춰서 개발한 인간 중심의 언어로, C, C#, Java 등이 있는데 이러한 언어를 컴파일 언어 (compile language)라고 한다.
프로그래밍 언어간 관계
어셈블리어
- 기계어 1라인당 어셈블리 명령어가 대부분 1라인씩 대응
- CPU가 채택한 ISA (Instruction Set Architecutre)에 따라 기계어가 다르기 때문에 어셈블리어도 다름
어셈블리어의 언어 규칙
- Label Field : 기호 주소를 나타내거나 빈칸. 기호 주소는 세 개 이하의 영자/숫자이며 첫 자는 문자
- Operation Field : 기계 명령어나 슈도 명령어를 기술
- Operand Field : 주소 또는 데이터
- Comment Field : 명령어에 대한 주석이나 해설, 생략 가능
PORTA equ $0000 ; Assembly time constant
Inp ldaa PORTA ; Read data from fixed address I/O data port
프로그래밍 언어의 실행
프로그래밍의 구현 architecture
소프트웨어 개발 Paradigm
References
5.7. Input-Output and Interrupt
Assembly Language Syntax by Valvano