티스토리 툴바


달력

01

« 2012/01 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  
2008/03/26 14:13

ASM 두번째 assembly language2008/03/26 14:13

레지스터
실행중인 명령어를 제어하고, 메모리의 주소지정을 다루고, 산술 연산 능력을 제공하기 위해 사용된다.프로세서는 레지스터의 이름을 통해서 참조 한다.

세그먼트 레지스터
현재 세그먼트라고 하는 메모리의 한 여역에 대한 주소지정을 제공 한다.
CS(코드 세그먼트) 레지스터
프로그램의 코드 세그먼트의 시작주소를 포함한다. 이 세그먼트 주소에 명령어 포인터(IP) 레지스터의 오프셋 값을 더하면, 실행하기 위해 메모리로 부터 가져와야 할 명령어의 주소가 된다.일반적인 프로그래밍에서는 이 레지스터를 직접 참조할 필요가 없다.

DS(데이터 세그먼트) 레지스터
프로그램의 데이터 세그먼트의 시작주소를 포함한다.명령어는 이 주소를 사용하여 데이터의 위치를 알아낸다.이 주소에 명령어의 오프셋 값을 더하면 데이터 세그먼트에 속한 특정 바이트 위치에 대한 참조가 생성된다.

SS(스택 세그먼트) 레지스터
메모리 상에 스택의 구현을 가능하게 한다. 프로그램은 주소와 데이터의 임시 저장 목적으로 스택을 사용한다. 시스템은 프로그램의 스택 세그먼트의 시작 주소를 SS 레지스터에 저장한다.이 세그먼트 주소에 스택 포인터(SP) 레지스터의 오프셋 값을 더하면, 참조되고 있는 스택의 현재 워드를 가리킨다.이반적인 프로그래밍에서는 이 레지스터를 직접 참조할 필요가 없다.

ES(엑스트라 세그먼트) 레지스터
메모리 주소지정을 다루는 스트링 연산에서 사용된다. 이 경우 ES 레지스터는 DI(인덱스) 레지스터와 연관된다. 프로그램이 ES 레지스터를 사용할 경우에, 이 레지스터를 적절한 세그먼트 주소로 초기화해야 한다.

FS와 GS 레지스터
이 레지스터는 기억장소 요구사항을 다루기 위해서, 80386에서 추가로 도입된 여분의 세그먼 레지스터이다.


포인터 레지스터
포인터 레지스터에는 32비트 EIP, ESP, EBP 가 있고, 오른쪽의 16비트 부분은 각각 IP, SP, BP 이다.
IP(명령어 포인터) 레지스터
16비트 레지스터느 다음에 실행될 명령어의 오프셋 주소를 포함한다.IP가 현재 실행중인 코드 세그먼트에 속한 현재 명령어를 가리킨다는 점에서, 이 레지스터는 CS:!P 처럼 CS 레지스터와 연관된다. EIP 레지스터는 확장된 32비트 IP레지스터 이다.실행되는 각 명령어에 대해서, 프로세서는 IP의 오프셋 값을 변경하여 IP가 실제로 실행의 각 단계를 주도하도록 한다.


※SP와 BP 레지스터는 SS 레지스터와 연관되어, 시스템이 스택 세그먼트에 속한 데이터를 엑서스 하는 것을 허용한다. 프로세서는 자동으로 이러한 레지스터를 다룬다.

범용 레지스터
32비트 EAX, EBX, ECX, EDX 레지스터 등이 있다.각각의 레지스터들의 오른쪽 16비트 부분을 AX, BX, CX, DX 레지스터라 부른다.
AX 레지스터
주누산기 (primary accumulator) 인 AX는 입출력과 대부분의 산술 연산에서 사용된다.곱셈, 덧셈, 나눗셈, 변환(translate)명령어들은 AX의 사용을 가정한다.다른 레지스터 보다 AX레지스터를 사용하면 더 효율적인 기계 코드를 생성한다.

BX 레지스터
주소지정을 확장하기 위해 인덱스로서 사용될 수 있는 유일한 범용 레지스터이기 때문에, 베이스 레지스터로 알려져 있다. BX 레지스터의 일반적인 용도는 계산이다.또한 BX는 특정 주소지정을 위해서 베이스 레지스터로서 DI나 SI와 결합될 수 있다.

CX 레지스터
카운터 레지스터로 알려져 있다. 이 레지스터는 루프가 반복되는 횟수를 제어하는 값 또는 왼쪽이나 오른쪽으로 이동되는 비트 수등을 포함하 수 있다. 또한 계산에 CX 레지스터를 사용할 수 있다.

DX 레지스터
데이터 레지스터로 알려져 있다.어떤 입출력 연산에서는 반드시 이 레지스터의 사용을 요구하고, 큰 수의 곱셈과 나눗셈 연산은 DX와 AX의 사용을 가정한다.

인덱스 레지스터
32비트 ESI와 EDI가 있다. 이러한 레지스터의 오른쪽 16비트 부분을 각각 SI ,DI 라 한다.
SI 레지스터
스트링 조작 연산에 필요하다. 이 경우 SI는 DS 레지스터와 연관된다.

DI 레지스터
스트링 연산에 필요하다. 이 경우 DI는 ES 레지스터와 연관된다.


플래그 레지스터
32비트 Eflag는 다양한 컴퓨터의 행동들의 상태를 나타내는 비트들을 포함한다. Eflag의 오른쪽 16비트 부분이 플래그 레지스터이다. 이 16비트 중에서 9개가 컴퓨터의 현재 상태와 결과를 나타낸다.
OF(overflow)
산술연산 후 상위(가장 왼쪽) 비틀의 오버플로우를 나타낸다.

DF(direction)
스트링 데이터를 이동시키거나 비교할 때 왼쪽 또는 오른쪽의 방향을 결정한다.

IF(interrupt)
키보드의 입력과 같은 외부 인터럽트가 처리되어야 하는지 또는 무시 되어야 하는지를 나타낸다.

TF(trap)
단일 단계 모드의 프로세서 연산을 허용한다. 디버거 프로그램은 TF 플래그를 설정해서, 한번에 한번씩  명령어를 실행시키고, 레지스터와 메모리 상에서 그 영향을 조사할 수 있게 한다.

SF(sign)
산술 연산의 결과 값에 대한 부호를 포함한다.(0==양수, 1 == 음수)

ZF(zero)
산술이나 비교 연산의 결과 값에 대한 부호를 포함한다.(0 == 결과 값이 0이 아님, 1 == 결과 값이 0)

AF(auxiiary carry)
특수화된 산술에서 사용되며, 그 산술 연산에서 비트 3에서 비트 4로의 캐리를 포함한다.

PF(parity)
연산 결과 1비트들의 개수를 나타낸다. 그 개수가 짝수인 경우 짝수 패리티라 부르며, 홀수인 경우 홀수 패리티라 부른다.

CF(carry)
산술 연산 후 상위(가장 왼쪽) 비트의 캐리를 포함한다. 또한 shift 또는 rotate 연산 후 가장 마지막 비트 내용을 포함한다.
IBM PC 어셈블리 프로그래밍 5/E(양장) 상세보기
PETER ABEL 지음 | 교보문고 펴냄
어셈블리 언어 프로그래밍을 배우는 독자들을 돕기 위해, 이 책은 먼저 하드웨어와 어셈블리 언어의 쉬운 부분을 살펴본 다음, 어떤 명령어가 필요할 때 그 명령어를 소개한다. 또한 이 책은 프로그램 예제의 명확성을 강조한다.따라서 예제에서는 이해하기에 가장 쉬운 명령어와 접근방법을 사용한다.

※모든글은 'IBM PC 어셈블리 프로그래밍 5th edition'을 참고 하였습니다. 

Posted by 김광민
2008/03/25 02:35

OS 두번째 os2008/03/25 02:35

운영체제라 하면 먼저 생각나는 것은 Windows, Linux, Mac 정도가 떠오릅니다.
아래 표는 08년 데스크 탑에서 운영체제의 점유율 입니다.

Desktop OS market
share as of January, 2008
Windows - 91.46%
Mac - 7.57%
Mac - 7.57%
SunOS - 0.01%
Other - 0.29%

OS의 정의
  • OS is resource allocator.
  • OS is control program.


 ●(Resouce allocator) 운영체제는 '자원할당자'의 역할을 합니다.자원이라 함은 CPU, memory, I/O devieces 등을 뜻합니다. OS는 응용프로그램이 실행될때 요구되어 지는 자원을 효율적으로 할당하여 주는 역할을 합니다. 키보드를 예를 들겠습니다. 문서편집 프로그램과 메신저가 실행되고 있다고 가정할때 두 프로그램은 키보드를 통한 데이터의 입력을 받습니다. 만일 문서 편집 프로그램이 키보드를 독점하고 있다면 메신저 프로그램을 통한 채팅은 이루어 질수 없을 것입니다. 메신저 창에 타이핑을 해도 문서편집 프로그램에 글이 입력이 되겠죠. 이러한 일을 막기 위해 OS가 존재 합니다.이에 OS가 활성화된 프로그램에게 키보드를 사용할수 있도록 자원을 할당 합니다.

●(Control programs) 프로그램의 에러 및 부적절한 실행을 막는 일을 합니다.


OS가 하는일


  • Process Management
  • Memory Management
  • Storage Management
  • I/O Subsystem Management
  • System Protection and Security

●OS는 프로세스를 관리 합니다. 프로세스는 실행되고 있는 프로그램이라고 보면 됩니다.다수의 프로세스에서 요청하는 자원을 효율적으로 할당함으로서 프로세스 수행을 관리 합니다.
●OS는 메모리 관리를 합니다. 여기서 메모리는 메인 메모리 즉 흔히 램이라고 부르는 것을 뜻합니다.프로그램이 실행되기 위해서는 메모리에 해당 코드 및 데이타를 로드하고 수행 도중 데이타를 Road 하거나 Write 하는 작업을 빈번하게 수행 합니다. 만일 하나의 프로세스가 차지하고 있는 메모리에 다른 프로세스가 메모리를 침범하여 데이터를 임의적으로 변경 시킨다면 에러가 일어날 겁니다. 이에 OS는 어느 프로세스가 메모리 어느 영역을 사용하고 있는지 관리합니다. 또한 사용이 끝난 메모리 영역을 사용가능 자원으로 돌리는 일을 합니다.
 ●OS는 저장관리를 합니다. HDD(Second storage)에 물리적으로 뿔뿔히 흩어져 있는 데이터를 논리적으로 엮어(File or Folder) 관리가 수월하도록 도와 줍니다. 파일을 수월하게 생성 혹은 지울 수 있게 해줍니다. 또한 데이터에 엑서스 할수 있는 권한에 대한 관리를 합니다.
●OS는 사용자로 하여금 각각의 hardware 장치들의 특성을 고려치 않게 합니다.다른말로 하드웨어의 사용을 용이 하게 합니다. 데이터 이동이나 처리의 속도가 다른 각각의 장치들을 효율적으로 사용하기 위해 버퍼링이나 캐쉬를 적절히 사용함으로서 작업 시간을 단축합니다.각각의 장치 드라이버를 위한 인터페이스를 제공함으로써 I/O devices 의 관리를 합니다.
●OS는 내외부적 공격에 맞서는 보안의 역할을 합니다.

이와 같은 기능을 담당하고 있는 OS를 기반으로 함으로서 컴퓨터 시스템의 안정적이고 효율적인 사용이 가능 합니다. 응용프로그램을 만들떄 OS가 존재하지 않는 다고 가정해 봅시다.OS기반에서 간단하게 만들수 있는 프로그램이더라도 OS가 없다면 매번 시스템 기반적인 코딩을 함으로서 디바이스들을 컨트롤 해야 할 것 입니다. 이에 따르는 위험성도 큽니다. 장치를 다루다가 에러가 발생하면 시스템 전체가 다운되는 현상이 초래 될 수도 있을겁니다.예를 들자면 윈도우 메모장을 쓰다가 시스템이 다운되어 버리는 현상 같겠네요. 이러한 위험성과 프로그램의 생산성 저하 및 자원의 비효율적인 사용을 막고, 사용자에게 편리한 UI를 제공하기 위해 OS가 사용되고 있습니다. 
Posted by 김광민