C H A P T E R

Chapter 2: 수의 체계

1
ㅔ

어셈블리 언어의 소개

공부할 내용

- 프로세서

- 기계언어

- 어셈블리 언어

- 프로세서와 코프로세서

- 인텔 86 프로세서를 위한 프로그래밍

- 어셈블리 언어의 용도

- 운영체제

- 어셈블리 언어 프로그램의 개발 단계

- 필요한 소프트웨어

프로세서

★ 컴퓨터의 두뇌에 해당

★ IBM PC 호환 기종: 인텔 86계열 프로세서를 사용

- 인텔 86계열 프로세서의 모델번호

8088, 8086, 186, 286, 386, 486, 펜티엄 등

- 인텔 86계열의 프로세서들은 호환되도록 설계되어 있음

기계언어

★ 프로세서의 역할: 주어진 명령을 1개씩 순서대로 수행

★ 명령어 집합:

프로세서가 실행할 수 있는 모든 가능한 명령들

	표 1-1			인텔 86군 프로세서들과 그들의 명령어 집합

프로세서	명령어 집합의 크기
8088 / 8086 186 286 386 486 Pentium(펜티엄)	115 126 142 200 206 216

★ 기계 언어 (machine language)

- 프로세서가 직접 실행할 수 있는 명령어의 집합과 각 명령의 사용규칙

- 기계어로 작성된 프로그램은 긴 숫자열임

★ 컴퓨터 언어 (computer language)

- 프로그램을 작성할 때 우리가 사용하는 언어

- 저급언어, 고급언어로 나눌 수 있음

★ 컴퓨터 언어

- 고급언어: C, C++, PASCAL, BASIC 등

- 저급언어: 사람이 일하기 쉽도록 만들어진 기계 언어의 한 표현

(예, 어셈블리 언어 (assembly language))

★ 컴퓨터 언어로 작성된 프로그램의 실행

- 실행 전에 기계어 명령문으로 변환되어져야 한다.

- 변환 시스템

(1) 컴파일러: 한꺼번에 기계어로 변환함

(2) 인터프리터: 한 줄씩 변환하고 실행함

어셈블리 언어

★ 어셈블러 (assembler)

- 저급언어로 쓰여진 프로그램을 읽어서 그와 동일한 기능을 하는

기계언어 프로그램으로 변환함

★ 저급언어를 사용하여 프로그래밍할 때 프로그래머가 알아야 할 것

- 명령문과 사용규칙

- 프로그램이 실행될 기계의 기본 구조

*  메모리에 자료가 저장되는 방식

*  프로세서가 자료를 처리하는 방식, 등

프로세서와 코프로세서

★ 프로세서 = 범용 프로세서 (표 1-1)

= 주프로세서(main processor)

★ 수학 코프로세서(math coprocessor)

= 실수 계산을 포함한 수학 연산을 할 수 있는 매우

빠른 프로세서

= 독립적인 명령어 집합을 가지고 있음 (표 1-3)

★표 1-2 (22쪽)

- 8088 ~ 386 까지는 독립적인 코프로세서가 있음

8088/8086 (8087), ... , 386(387)

- 486, 펜티엄 = 386+387의 개량된 형태임

인텔 86 프로세서를 위한 프로그래밍

★ 8088에서 실행될 수 있는 모든 프로그램은 그 이후 모델의 프로세서에서도 실행될 수 있다.

★ 각 모델의 특징

- 8088, 8086, 186: 최대 1메가바이트(megabytes) 의 메모리 지원

- 286 : 프로세서의 작동 모드가 2개

(1) 리얼모드(real mode): 8088, 8086, 186처럼 작동함

(2) 보호모드(protected mode)

최대 16MB 메모리 지원, 최대 1GB 가상 메모리 지원

멀티태스킹 (multitasking)지원

- 386

* 가상 86모드를 지원

(1) 여러 개의 DOS  프로그램이 동시에 실행 가능

(2) 각 프로그램은 자신만이 8086 프로세서를 소유한 것으로

간주함.

* 보호 모드에서 4GB 메모리와 64 TB의 가상 메모리 지원

- 486과 펜티엄

* 386 + math coprocessor의 개선된 형태

* cache controller 가 내장되어 있음

- 8088 이후에 추가된 명령들은 대부분 보호모드에서의 프로그래밍

을 위한 것

- 어셈블리 언어의 기초 = 8088의 언어를 배우는 것.

어셈블리 언어를 사용하게 되는 경우

★ 고급언어(저급언어와 비교할 때)

- 개념적이다.

- 대상 컴퓨터의 세부적인 사항을 숨기고 있다.

- 프로그램이 읽기 쉽고 수정하기 편하다.

- 가능한 한 고급언어를 사용하는 것이 좋다.

★ 어셈블리 언어를 사용해야 하는 경우

- 프로세서를 직접 제어하려고 할 때

- 속도 빠른 코드를 생성하려고 할 때

- 프로그램의 크기를 최소화하려고 할 때

운영체제

★ 컴퓨터 전체를 제어하는 프로그램

★ 어셈블리 언어 프로그래머의 운영체제 사용 방식

(1) 운영체제에게 실행할 명령을 직접 입력한다.

예) 파일 복사, 프로그램 실행, 디렉토리 보기, 등

(2) 프로그램 안에서 운영체제를 호출한다.

예) 입력, 출력, 시스템 클록의 사용, 파일과 디렉토리 관련 작업, 등

★ IBM PC 호환 기종의 어셈블리 언어는 그 기종에서 사용하는 운영체    제나 운영환경에 관계없이 동일한 것임.

어셈블리 언어 프로그램의 개발 단계

(1) 에디터(editor): 프로그램을 컴퓨터에 입력하여 디스크 파일에 저장

(2) 어셈블러(assembler): 파일에 저장된 프로그램을 기계어 프로그램으로 변환함

(3) 링커(linker): 기계어로 변환된 프로그램을 실행가능한 상태로 변환

★ 소스 프로그램(source program):

에디터로 만든 어셈블리 언어 프로그램

★ 오브젝트 모듈(object module): 어셈블러가 생성한 프로그램

★ 로드 모듈(load module): 링커가 생성한 프로그램

필요한 소프트웨어

★ 에디터 - 자료를 ASCII 형태로 저장하는 에디터여야 함

예) MS DOS  5.0 이상에서 제공하는 EDIT

★ 어셈블러, 링커, 디버거

- 마이크로소프트사의 MASM

- 볼랜드사의 TASM

에디터, 어셈블러, 링커와 디버거 이외의 유용한 프로그램

(프로그래밍 패키지를 구입할 때 포함되어 있는 것들임)

□ 상호 참조 프로그램, 크로스 레퍼런스 프로그램(cross-reference program)은 프로그램 안에서 사용된 모든 부호(symbol)의 리스트를 알파벳 순서로 나열하고 프로그램에서 그 부호가 사용된 위치를 알려준다.

□ 라이브러리 관리자(library manager)는 어셈블되고 컴파일된 오브젝트 모듈의 집합을 관리한다.

□ 메이크 프로그램(make program)은 어셈블리와 고급 언어 프로그램으로 구성된 시스템을 자동 유지/관리한다.

□ 프로파일러(profiler)는 프로그램이 실행될 때 프로그래머가 성능을 분석하고 측정할 수 있도록 해준다.