728x90
mano의 컴퓨터시스템 구조: 6장 기본 컴퓨터 프로그래밍
6.1 개요
- 대부분 컴퓨터는 포트란 자신이 실행할 수 있는 이진 코드로 번역하는 번역 프로그램(translator program)을 갖고 있다.
- 번역 프로그램은 특정 컴퓨터 하드웨어에 인지되야 하므로 기계 종속적 프로그램이어야 한다.
- 위 표는 사용자의 기호 프로그램을 이진 프로그램으로 번역하는 명령어이다.
- AND, ADD, LDA, STA, BUN, BSA, ISZ은 메모리 참조 명령어 이다.
- CLA, CLE, CMA, CME, CIR, CIL, INC, SPA, SNA, SZA, SZE, HLT는 레지스터 참조 명령어이다.
- INP, OUT, SKI, SKO, ION, IOF는 입출력 명령어이다.
6.2 기계어
- 이진코드: 메모리상 실제로 나타나는 형태의 멸령어
- 8, 16진수: 이진수 코드를 8, 16 진수로 나타낸 것
- 기호 코드: 사용자가 연산, 주소 부분 등에 대하여 기호(문자, 숫자, 특수문자 등)를 사용하며, 각 기호 명령어는 하나의 이진 코드로 번역되는데 이 번역은 어셈블리(assembler)라는 특수한 프로그램이 한다. 이러한 종류의 기호 프로그램을 어셈블리 언어(assembly language)라고 부른다.
- 고급 프로그래밍 언어: 컴퓨터 하드웨어의 동작을 위주로 하지 않고 문제해결에 필요한 과정으 고려히야 개발된 언어이다. 문제 위주의 기호와 형식을 사용하며, 각 문장은 실행 전 여러 개의 이진 명령어로 번역되는데, 이 번역 프로그램을 컴파일어(compiler)라고 부른다.
6.3 어셈블리 언어
언어 규칙
어셈블리 언어는 필드(field)라 불리는 세 개의 부분으로 구성된다.
- 라벨 필드(label field): 기호 주소를 나타내거나 빈칸
- 명령어 필드(instruction field): 기계 명령어나 슈도 명령어
- 코멘트 필드(comment field): 명렁어에 대한 주석이나 해설
명령어 필드(instruction field)
- 메모리 참조 명령어(MRI)
- 레지스터 참조 or 입출력 명령어
- 슈도 명령어(pseudo code)
슈도 명령어의 정의
Symbol | Information for the Assembler |
ORG N | 16진수 N은 다음 줄에 나열된 명령어 또는 피연산자의 메모리 위치 |
END | 기호 프로그램의 끝 |
DEC N | 부호가 있는 십진수 N을 이진수로 변환 |
HEX N | 16진수 N을 이진수로 변환 |
6.4 어셈블러
- 어셈블러(assembler): 기호-언어 프로그램을 읽어서 해당되는 이진 프로그램으로 번역하는 일종의 프로그램
- 소스 프로그램(source program): 입력되는 기호 프로그램
- 목적 프로그램(object program): 결과로 나오는 이진 프로그램
메모리 내 기호 프로그램 표현
- 입력 처리:
- 사용자가 터미널에 입력한 기호 프로그램은 로더(loader) 프로그램을 통해 메모리에 저장
- 각 문자는 ASCII 코드(8비트)로 표현되며, 한 메모리 워드(16비트)에는 두 문자가 저장
- 코드 구문 분석:
- 레이블은 쉼표로 종료, 명령어 및 주소는 공백으로 구분되며, 줄 끝은 캐리지 리턴(CR) 코드로 표시됩니다.
- 주석은 슬래시(/)로 시작하며, 어셈블러는 주석을 무시하고 CR 코드에서 줄 처리를 종료합니다.
어셈블리 프로세스
- First Pass
- 목적: 주소 심볼 테이블(Address Symbol Table) 생성.
- 주요 작업:
- 레이블 탐지: 레이블과 해당 메모리 주소를 테이블에 저장.
- LC(Location Counter): 명령어나 데이터의 메모리 주소를 저장하며, 각 줄 처리 후 1씩 증가.
- ORG 및 END 처리: ORG는 LC를 초기화하며, END는 첫 번째 패스를 종료.
- Second Pass
- 목적: 기호 프로그램을 이진 기계어로 변환.
- 주요 작업:
- 각 줄의 기호를 테이블에서 검색해 이진값을 매칭.
- 명령어 테이블 참조:
- 기계어 참조(MRI), 비기계어 참조(Non-MRI), 의사 명령어 테이블(Pseudoinstruction Table)을 활용.
- 심볼의 이진 번역 및 메모리 저장.
에러 진단
- 유효하지 않은 기계어: MRI 또는 Non-MRI 테이블에 없는 기호.
- 정의되지 않은 심볼: 주소 테이블에 없는 기호 사용.
- 에러 발생 시 메시지를 출력해 프로그래머에게 알려줌.
6.6 산물 및 논리 연산의 프로그래밍
- 컴퓨터는 다양한 명령어 집합을 가짐.
- 일부 컴퓨터는 하드웨어로 ADD, SUB, MUL, DIV 등을 지원.
- 다른 컴퓨터는 일부 연산(예: MUL, DIV)을 소프트웨어로 구현.
- 하드웨어 구현: 추가 회로가 필요해 비용이 높지만 속도가 빠름.
- 소프트웨어 구현: 프로그램으로 연산을 처리하며, 실행 시간이 길고 명령어가 많음.
곱셈 프로그램
- 가정: 두 양수, 각 숫자는 8비트 이내, 결과는 16비트 이내.
- 절차:
- 곱셈은 종이와 펜으로 처리하는 방식과 유사:
- 곱셈기 Y의 각 비트를 확인.
- 비트가 1이면, 피승수 X를 부분 곱(P)에 추가.
- X는 매번 왼쪽으로 이동(Shift) 연산.
- 루프:
- CTR = -8로 초기화, P는 0으로 설정.
- Y의 최하위 비트를 확인하여 X를 P에 추가.
- X를 왼쪽으로 이동하고, CTR이 0이 될 때까지 반복.
- 결과: P에 최종 곱셈 값 저장.
- 곱셈은 종이와 펜으로 처리하는 방식과 유사:
배정밀도 덧셈 (Double-Precision Addition)
- 목적: 16비트 연산의 결과(최대 32비트)를 정확히 처리.
- 방법:
- 하위 16비트 (AL, BL)와 상위 16비트 (AR, BH)를 별도로 처리.
- 하위 비트에서 발생한 캐리를 상위 비트 연산에 반영.
- 최종 결과는 CL, CH에 저장.
논리 연산 (Logic Operations)
- 기본 논리 명령어: AND, CMA(Complement), CLA(Clear AC).
- 모든 논리 연산은 AND와 CMA를 조합해 구현 가능.
시프트 연산 (Shift Operations)
- 논리적 시프트 (Logical Shift):
- 오른쪽: CLE → CIR (E를 0으로 설정 후 AC와 E를 오른쪽 순환).
- 왼쪽: CLE → CIL (E를 0으로 설정 후 AC와 E를 왼쪽 순환).
- 산술 시프트 (Arithmetic Shift):
- 오른쪽: 부호 비트를 유지하며, E를 부호 비트로 설정 후 순환.
- 왼쪽: 부호 비트를 유지하며 순환. 부호 비트와 E를 비교해 오버플로 확인.
6.7 서브루틴 (Subroutine)
- 서브루틴(Subroutine): 프로그램 내에서 반복적으로 사용되는 공통 코드를 모듈화하여 한 번만 작성한 뒤, 필요한 곳에서 호출할 수 있도록 하는 구조
- 서브루틴 호출 시 메인 프로그램은 해당 위치로 분기하며, 수행 후 원래의 실행 위치로 복귀
서브루틴 데이터 전달
- 레지스터를 통해 데이터를 전달
- 메모리에 데이터를 저장하여 서브루틴이 접근할 수 있도록 한다
장점
- 코드 재사용을 통해 작성 및 디버깅 시간을 줄이고, 유지보수를 용이하게 한다.
- 프로그램이 더 간결하고 모듈화되어 가독성이 향상된다.
6.8 입출력 프로그래밍
입력 및 출력 프로그래밍
- 입력 (Input):
- INP 명령어로 이진 코드를 AC(Accumulator)에 저장.
- 입력 플래그 (SKI)를 확인해 입력 가능 여부 체크. 플래그가 1이 아니면 반복해서 확인.
- 출력 (Output):
- AC에 저장된 이진 코드를 OUT 명령어로 출력.
- 출력 플래그 (SKO)가 1이 될 때까지 대기.
문자 조작
- 컴퓨터는 계산기뿐만 아니라 심볼 조작기 역할도 수행.
- 문자 패킹(packing):
- 두 문자를 하나의 16비트 워드로 패킹하여 저장 (문자당 8비트).
- IN2 서브루틴 사용: 두 번 입력받고, SH4 서브루틴으로 8비트씩 이동.
- 버퍼(buffer)에 저장:
- 키보드 입력을 버퍼 메모리에 연속적으로 저장.
- 포인터를 이용해 버퍼 위치 관리.
프로그램 인터럽트
- 필요성:
- 입력/출력 장치의 플래그를 반복적으로 확인하는 대기 시간을 제거.
- 다른 프로그램 실행 중에도 데이터 전송 가능.
- 작동 원리:
- 실행 중인 프로그램이 ION 명령어로 인터럽트를 활성화.
- 플래그가 1이 되면 현재 명령 실행을 마친 뒤 인터럽트 발생.
- 인터럽트 사이클: 현재 프로그램의 반환 주소를 저장하고 서비스 루틴으로 분기.
- 서비스 루틴 작업:
- 프로세서 레지스터 내용 저장.
- 플래그 확인 및 서비스 장치 결정.
- 플래그가 활성화된 장치 서비스.
- 레지스터 복원.
- 인터럽트 재활성화.
- 실행 중인 프로그램으로 복귀.
728x90
반응형
'Mano의 컴퓨터시스템구조' 카테고리의 다른 글
[mano의 컴퓨터시스템 구조] 8장 중앙 처리 장치 (1) | 2025.01.18 |
---|---|
[mano의 컴퓨터시스템 구조] 7장 마이크로 프로그램된 제어 (0) | 2025.01.05 |
[mano의 컴퓨터시스템 구조] 5장 기본 컴퓨터의 구조와 설계 (0) | 2024.11.27 |
[mano의 컴퓨터시스템 구조] 4장 레지스터 전송과 마이크로 연산 (0) | 2024.11.21 |
[mano의 컴퓨터시스템 구조] 3장 데이터의 표현 (0) | 2024.11.15 |