달력

12

« 2024/12 »

  • 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
2010. 11. 25. 10:22

1125) 어셈블리 기초지식 퍼옴2010. 11. 25. 10:22



1. 어셈블리란?

  - 어셈블리어(assembly, 문화어: 아쎔블러언어) 는 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급언어이다.

기계어는 실제로 컴퓨터 CPU가 읽어서 실행할 수 있는 0 1로 이루어진 명령어의 조합이다. 이러한 각 명령어에 대해 사람이 알아보기 쉬운 니모닉 기호(mnemonic symbol)를 정해 사람이 좀 더 쉽게 컴퓨터의 행동을 제어할 수 있도록 한 것이 어셈블리 언어이다.

예를 들어,

10110000 01100001   

x86 계열 CPU의 기계어 명령이고, 이것을 어셈블리어로 옮겨 쓰면 다음과 같다.

mov  al, 061h

명령어 mov는 영어 move를 변형한 니모닉이며, al CPU안에 있는 변수를 저장하는 레지스터의 하나이다. 그리고, 061h 16진수 61 (즉 십진수 97, 이진수 01100001)이다. 이 한 줄의 뜻은 16진수 61 al레지스터에 넣으라는 뜻이며, 1 0의 반복인 기계어보다 사람이 혼동없이 이해하기 한결 쉽다. 어셈블리어는 이러한 문장들로 구성된다.

어셈블리어를 기계어로 번역하는 것이어셈블러”(assembler)이며, 거꾸로 기계어를 어셈블리어로 바꾸는 것은디스어셈블러”(disassembler)이다. 고급언어와는 달리 어셈블리어는 간단한 문장에 대해 기계어와 일대일 대응 관계가 있지만, 자주 쓰이는 몇 명령은 둘 이상의 기계어 명령을 묶어 하나의 어셈블리 명령어에 대응시키기도 한다.

컴퓨터 아키텍처마다 사용하는 기계어가 달라지며, 따라서 기계어에 대응되어 만들어지는 어셈블리어도 각각 다르게 된다. 컴퓨터 CPU마다 지원하는 오퍼레이션의 타입과 개수는 제각각이며, 레지스터의 크기과 개수, 저장된 데이터 형의 표현도 각기 다르다. 모든 범용 컴퓨터는 기본적으로 동일한 기능을 수행하지만, 기능을 어떤 과정을 거쳐 수행할지는 다를 수 있으며, 이런 차이는 어셈블리어에 반영되게 된다.

게다가 단일 명령 집합에 대해 여러 니모닉과 신택스가 대응될 수 있다. 그런 경우에는 제조사가 만든 문서에서 쓰이는 것이 가장 자주 쓰이게 된다.

 

 2. 어셈블러와 링커

- 어셈블러는 어셈블리 언어로 작성된 소스 코드 프로그램을 기계어로 변환하는 유틸리티 프로그램이다. 링커(linker)는 어셈블러가 생성한 파일들을 하나의 실행 프로그램으로 합치는 유틸리티이다. 디버거(debugger)는 프로그램 실행 동안 프로그램을 단계적으로 실행하고 레지스터와 메모리를 살펴보게 한다.

 

 3. 어셈블리 언어의 이식성

- 고급 언어와 어셈블리 언어의 중요한 차이는 이식성을 다루어야 한다는 것이다. 소스 프로그램을 컴파일하여 다양한 컴퓨터 시스템에서 실행될 수 있는 언어를 이식성이 있다고 말한다.

 어셈블리 언어는 특정 프로세서 계열용으로 만들어 졌기 때문에 이식성이 없다. 오늘날 많은 수의 다른 어셈블리 언어들이 널리 사용되고 있으며 각 어셈블리 언어는 하나의 프로세서 계열에 기반을 두고 있다. 어셈블리 언어에서의 명령어는 컴퓨터의 구조와 직접 대응되거나 마이크로코드 해독기라고 하는 프로세서 내에 있는 프로그램에 의해서 실행되는 동안 번역될 수도 있다.

 

 4. 어셈블리언어의 규칙

- 어셈블리 언어의 대부분의 규칙은 목표 프로세서와 기계어의 물리적 제한에 바탕을 둔다. 따라서 c++이나 java보다 적은 규칙을 가지고 있다. c++ 이나 java는 저수준 데이터 접근을 못하는 대신에 예기치 않은 논리 오류를 줄이도록 하기 위한 구문 규칙을 가지고 있다. 어셈블리 언어는 고급 언어가 가지고 있는 제한을 쉽게 넘어설 수 있다. 예를 들어 java와 어셈블리 언어의 메모리 접근방식은 java JNI클래스를 사용 c서브루틴을 호출하여 자바의 제한을 넘어 작업할 수 있지만 작업한 프로그램은 유지보수에 어려움을 느낀다 하지만 어셈블리 언어는 어떠한 메모리 주소라도 접근할 수 있다. 이러한 이유로 어셈블리 언어 프로그래머가 디버깅에 많은 시간을 소모한다.

 

 5. 가상기계

   - 컴퓨터는 여러 개의 레이어로 구성되는데 각 레이어는 상위 수준 명령어 집합에서 하위 수준 명령어 집합으로 변환하는 레이어를 나타낸다.




 6. 데이터 표현

1) MSB,LSB

  

 - 2진수 한 자리를 비트(bit)라 부르며 비트는 오른쪽에서 0부터 시작하여 왼쪽으로 증가하면서 번호가 부여된다. 왼쪽에 있는 비트를 최상위 비트(most significant bit : MSB)라고 하며 오른쪽에 있는 비트를 최하위 비트(Least significant bit : LSB)라고 한다.

이 포스팅은 어셈블리 언어 제 5판|교보문고 의 내용을 요약한 것입니다. 더 자세한 내용은 서적을 참고하세요
:
Posted by 투잌