한국   대만   중국   일본 
어셈블리어 - 위키百科, 우리 모두의 百科事典 本文으로 移動

어셈블리어

위키百科, 우리 모두의 百科事典.

어셈블리어
모토로라 MC6800 어셈블리어.
패러다임 命令形 , 非構造적
發表日 1949年

어셈블리어 ( 英語 : assembly language ) 또는 어셈블러 言語 (assembler language) [1] 機械語 와 一對一 對應이 되는 컴퓨터 프로그래밍 低級 言語 이다.

컴퓨터 構造 에 따라 使用하는 機械語가 달라지며, 따라서 機械語에 對應되어 만들어지는 어셈블리어度 各各 다르게 된다. 컴퓨터 CPU마다 支援하는 오퍼레이션의 타입과 個數는 제各各이며, 레지스터 의 크기와 個數, 貯藏된 데이터 兄의 表現도 各其 다르다. 모든 汎用 컴퓨터는 基本的으로 同一한 機能을 遂行하지만, 機能을 어떤 過程을 거쳐 遂行할지는 다를 수 있으며, 이런 差異는 어셈블리어에 反映되게 된다.

게다가 單一 命令 集合에 對해 여러 니모닉과 統辭論 이 對應될 수 있다. 그런 境遇에는 製造社가 만든 文書에서 쓰이는 것이 가장 자주 쓰이게 된다.

槪念 [ 編輯 ]

어셈블러 [ 編輯 ]

어셈블러 (assembler)는 어셈블리어를 機械語 形態의 오브젝트 코드로 解釋해 주는 컴퓨터 言語 飜譯 프로그램을 말한다. 어셈블러는 基本 컴퓨터 命令語들을, 컴퓨터 프로세서가 基本 演算을 遂行하는데 使用할 수 있는 비트 패턴으로 變換시키는 프로그램이다. 몇몇 사람들은 이러한 命令語들을 어셈블러 言語라고 부르며, 어셈블리 言語라고 부르는 사람들도 있다. 니모닉 記號(mnemonics)를 opcode 로 變換하고 메모리 位置와 기타 存在物에 따라 識別子 를 다시 分析함으로써 目的 코드 를 만들어낸다. [2] 거꾸로 機械語를 어셈블리어로 바꾸는 것은 “譯(逆)어셈블러”(disassembler)이다. 高級 言語 와는 달리 어셈블리어는 簡單한 文章에 對해 機械語와 一對一 對應 關係가 있지만, 자주 쓰이는 몇 命令은 둘 以上의 機械語 命令을 묶어 하나의 어셈블리 命令語에 對應시키기도 한다.

이것은 어셈블리 命令 符號를 오피코드 로 解釋할 뿐만 아니라 메모리의 位置들을 이름으로 表示하는 機能, 매크로를 통한 文章 置換 機能 等을 함께 提供한다. 높은 水準의 어셈블러는 高級 制御 救助, 높은 水準의 프로시져/函數 宣言 및 呼出, 높은 水準의 資料型 抽象化 같은 높은 水準의 言語 抽象化 機能을 提供하기도 한다.

MIPS , Sun Sparc , HP PA-RISC 과 같은 RISC 基盤 아키텍처를 위한 現代의 어셈블러는 函數 스케줄링 機能을 가지고 있어서 中央處理裝置 의 파이프라인을 效果的으로 使用할 수 있다. 이 어셈블러는 1950年代부터 繼續 쓰여 왔으며, 高級 言語를 위한 컴파일러에 견주어 보면 構造가 매우 簡單하다. 크로스 어셈블러는 다른 프로세서 를 위한 코드를 만든다. 어셈블러가 實行되는 段階를 어셈블리 타임이라고 한다.

패스의 數 [ 編輯 ]

어셈블러에는 두 가지 種類가 있는데, 實行 프로그램을 만들기 위해 얼마나 많은 패스가 소스를 거치는지에 따라 다르다.

  • 1패스(one-pass) 어셈블러는 소스 코드를 한 番만 거친다.
  • 多重 패스(multi-pass) 어셈블러는 처음 패스들에서 모든 記號와 關聯 값들이 包含된 테이블 하나를 만들고 나중 패스들에서 테이블을 利用하여 코드를 만들어낸다.

1패스 어셈블러들을 利用하는 本來 理由는 어셈블리의 速度 때문이다. 2次 패스가 되돌아가기를 要求할 수도 있기 때문이다. 그러나 現代의 컴퓨터는 納得하기 어려운 地緣 없이 多重 패스 어셈블리를 遂行한다. 多重 패스 어셈블러는 링크 프로세스 를 더 빠르게 한다는 長點이 있다. [3]

高級 어셈블러 [ 編輯 ]

더 複雜한 高級 어셈블러 는 다음과 같은 言語 抽象物을 提供한다:

  • 進步化된 制御 救助
  • 높은 水準의 프로시저/函數 宣言 및 呼出
  • 救助/레코드, 유니언(union), 클래스, 集合을 包含한 높은 水準의 抽象 資料型
  • 複雜한 매크로 處理
  • 클래스, 오브젝트, 抽象畫 , 多形性 , 相續 과 같은 客體 志向 프로그래밍 機能 [4]

어셈블리어 [ 編輯 ]

機械語 는 實際로 컴퓨터의 CPU 가 읽어서 實行할 수 있는 0과 1로 이루어진 命令語의 組合이다. 이러한 各 命令語에 對해 사람이 알아보기 쉬운 니모닉 記號 (mnemonic symbol)를 定해 사람이 좀 더 쉽게 컴퓨터의 行動을 制御할 수 있도록 한 것이 어셈블리 言語이다.

例를 들어,

10110000 01100001

는 x86 系列 CPU의 機械語 命令이고, 이것을 어셈블리어로 옮겨쓰면 다음과 같다.

mov
 al
,
 061
h

命令語 mov는 英語 move를 變形한 니모닉 이며, al은 CPU안에 있는 變數를 貯藏하는 레지스터 의 하나이다. 그리고, 061h는 16眞數 61 (卽 十進數 97, 이진수 01100001)이다. 이 한 줄의 뜻은 16眞數 61을 al레지스터에 넣으라는 뜻이며, 1과 0의 反復인 機械語보다 사람이 混同없이 理解하기 한결 쉽다. 어셈블리어는 이러한 文章들로 構成된다.

헬로 월드 프로그램 [ 編輯 ]

다음은 NASM x86 어셈블리어로 具現한 헬로 월드 프로그램 이다.

adosseg

.model
 small

.stack
 100
h


.data

hello_message
 db
 '
Hello
,
 World
!
'
,
0
dh
,
0
ah
,
'
$
'


.code

main
 proc

      mov
    ax
,
 @
data

      mov
    ds
,
 ax


      mov
    ah
,
 9

      mov
    dx
,
 offset
 hello_message

      int
    21
h


      mov
    ax
,
 4
C00h

      int
    21
h

main
 endp

end
 main

같이 보기 [ 編輯 ]

各州 [ 編輯 ]

  1. Assembler language , IBM Knowledge center
  2. David Salomon (1993). Assemblers and Loaders
  3. Beck, Leland L. (1996). 〈2〉. 《System Software: An Introduction to Systems Programming》. Addison Wesley.  
  4. Hyde, Randall. "Chapter 12 ? Classes and Objects". The Art of Assembly Language, 2nd Edition. No Starch Press. ⓒ 2010.

外部 링크 [ 編輯 ]