(Translated by https://www.hiragana.jp/)
GNU 어셈블러: 두 판 사이의 차이 - 위키백과, 우리 모두의 백과사전 본문으로 이동

GNU 어셈블러: 두 판 사이의 차이

위키백과, 우리 모두의 백과사전.
내용 삭제됨 내용 추가됨
"GNU Assembler" 문서를 번역하여 만듦
 
편집 요약 없음
7번째 줄: 7번째 줄:


=== 지시자 ===
=== 지시자 ===
GAS는 [[C 언어]]에서 전처리문과 비슷하게 동작하는, 키워드인 어셈블러 지시자를 사용한다. 대부분의 사용 가능한 어셈블러 지시자들이 대상 구조와 상관 없이 사용 가능하지만 몇몇 지시자들은 기게에 의존적이기도 하다.<ref>{{틀:웹 인용|title=The GNU Assembler - Assembler Directives|url=http://sources.redhat.com/binutils/docs-2.12/as.info/Pseudo-Ops.html#Pseudo%20Ops}}</ref>
GAS는 [[C 언어]]에서 전처리문과 비슷하게 동작하는, 키워드인 어셈블러 지시자를 사용한다. 대부분의 사용 가능한 어셈블러 지시자들이 대상 구조와 상관 없이 사용 가능하지만 몇몇 지시자들은 기게에 의존적이기도 하다.<ref>{{틀:웹 인용
|title=The GNU Assembler - Assembler Directives
|url=http://sources.redhat.com/binutils/docs-2.12/as.info/Pseudo-Ops.html#Pseudo%20Ops
}}</ref>


=== 주석 ===
=== 주석 ===
GAS는 두 스타일의 주석을 지원한다:<ref>{{틀:웹 인용|last=Red Hat Inc.|title=Using as|url=http://sources.redhat.com/binutils/docs-2.12/as.info/Comments.html#Comments|accessdate=Jan 10, 2013}}</ref>
GAS는 두 스타일의 주석을 지원한다:<ref>{{틀:웹 인용
|last=레드햇
|title=Using as
|url=http://sources.redhat.com/binutils/docs-2.12/as.info/Comments.html#Comments
|accessdate=Jan 10, 2013
}}</ref>


==== 다중 라인 주석 ====
==== 다중 라인 주석 ====
22번째 줄: 30번째 줄:
==== 단일 라인 주석 ====
==== 단일 라인 주석 ====
단일 라인 주석은 어셈블되는 아키텍처에 다라서 몇몇의 다른 포맷들이 존재한다.
단일 라인 주석은 어셈블되는 아키텍처에 다라서 몇몇의 다른 포맷들이 존재한다.
* [[해시 기호]] (#)는 다음과 같은 플랫폼에서 사용된다: [[인텔 80386|i386]], [[x86-64]], [[인텔 i960|i960]], 68HC11, 68HC12, VAX, V850, M32R, [[파워PC|PowerPC]], [[MIPS 아키텍처|MIPS]] 그리고 M880x0.
* [[해시 기호]](#)는 다음과 같은 플랫폼에서 사용된다: [[인텔 80386|i386]], [[x86-64]], [[인텔 i960|i960]], 68HC11, 68HC12, VAX, V850, M32R, [[파워PC]], [[MIPS 아키텍처|MIPS]] 그리고 M880x0.
* [[쌍반점]] (;)은 다음에서 사용된다: AMD 29k 패밀리, ARC, H8/300 패밀리, [[PA-RISC|HPPA]], PDP-11, picoJava, 모토롤라, 그리고 [[르네사스 테크놀로지|M32C]].
* [[쌍반점]](;)은 다음에서 사용된다: AMD 29k 패밀리, ARC, H8/300 패밀리, [[PA-RISC|HPPA]], PDP-11, picoJava, 모토롤라, 그리고 [[르네사스 테크놀로지|M32C]].
* [[골뱅이표]] (@)는 ARM 플랫폼에서 사용된다.
* [[골뱅이표]](@)는 ARM 플랫폼에서 사용된다.
* 쌍 [[빗금]] (//)은 [[ARM 아키텍처|AArch64]] 플랫폼에서 사용된다.
* 쌍 [[빗금]](//)은 [[ARM 아키텍처|AArch64]] 플랫폼에서 사용된다.


== 사용 ==
== 사용 ==
54번째 줄: 62번째 줄:
인텔 문법에 익숙한 이들은 [[x86]]과 [[x86-64]] 플랫폼에서의 어셈블리에 대한 인텔 문법을 지원하지 않는 다는 것이 문제가 된다고 주장한다.
인텔 문법에 익숙한 이들은 [[x86]]과 [[x86-64]] 플랫폼에서의 어셈블리에 대한 인텔 문법을 지원하지 않는 다는 것이 문제가 된다고 주장한다.


그러나 버전 2.10부터 인텔 문법이 <code>.intel_syntax</code> 지시자의 사용을 통해 사용 가능해 졌다.<ref>{{틀:웹 인용|title=GNU Assembler News|url=http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/NEWS?rev=1.93&content-type=text/x-cvsweb-markup&cvsroot=src}}</ref><ref>{{틀:웹 인용|title=AT&T Syntax versus Intel Syntax|url=http://sources.redhat.com/binutils/docs-2.12/as.info/i386-Syntax.html|accessdate=28 July 2014}}</ref><ref>{{틀:웹 인용|title=Linux assemblers: A comparison of GAS and NASM|author=Ram Narayan|date=2007-10-17|publisher=[[IBM DeveloperWorks]]|url=http://www.ibm.com/developerworks/linux/library/l-gas-nasm.html|archiveurl=https://web.archive.org/web/20090303224539/http://ibm.com/developerworks/linux/library/l-gas-nasm.html|archivedate=3 Mar 2009|accessdate=28 July 2014}}</ref>
그러나 버전 2.10부터 인텔 문법이 <code>.intel_syntax</code> 지시자의 사용을 통해 사용 가능해 졌다.<ref>{{틀:웹 인용
|title=GNU Assembler News
|url=http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/NEWS?rev=1.93&content-type=text/x-cvsweb-markup&cvsroot=src
}}</ref><ref>{{틀:웹 인용
|title=AT&T Syntax versus Intel Syntax
|url=http://sources.redhat.com/binutils/docs-2.12/as.info/i386-Syntax.html
|accessdate=28 July 2014
}}</ref><ref>{{틀:웹 인용
|title=Linux assemblers: A comparison of GAS and NASM
|author=Ram Narayan
|date=2007-10-17
|publisher=IBM DeveloperWorks
|url=http://www.ibm.com/developerworks/linux/library/l-gas-nasm.html
|archiveurl=https://web.archive.org/web/20090303224539/http://ibm.com/developerworks/linux/library/l-gas-nasm.html
|archivedate=3 Mar 2009
|accessdate=28 July 2014
}}</ref>


== 같이 보기 ==
== 같이 보기 ==
* [[GNU 툴체인|GNU toolchain]]
* [[GNU 툴체인]]
* 바이너리 파일 디스크립터 라이브러리
* [[바이너리 파일 디스크립터 라이브러리]]


== 각주 ==
== 각주 ==
67번째 줄: 91번째 줄:
* [http://sourceware.org/binutils/docs/as/ Gas manual]
* [http://sourceware.org/binutils/docs/as/ Gas manual]
* {{틀:Man|1|as|die.net|the portable GNU assembler}}
* {{틀:Man|1|as|die.net|the portable GNU assembler}}

[[분류:GNU 프로젝트 소프트웨어]]
[[분류:GNU 프로젝트 소프트웨어]]
[[분류:유닉스 프로그래밍 도구]]
[[분류:유닉스 프로그래밍 도구]]

2016년 5월 30일 (월) 20:54 판

GNU 어셈블러는 (보통 gas 또는 간단히 as로 불리는) GNU 프로젝트에서 사용되는 어셈블러이다. 이것은 GCC의 기본 백엔드이며 GNU 운영 체제리눅스 커널 그리고 다양한 다른 소프트웨어를 어셈블하는데 사용된다. GNU 어셈블러는 GNU 바이너리 유틸리티의 한 부분이다.

GAS 실행 파일은 이름이 as이며 유닉스 어셈블러의 표준 이름이다. GAS는 크로스 플랫폼이며 여러 다양한 컴퓨터 구조에서 실행되고 어셈블을 할 수 있다. GNU 일반 공중 사용 허가서 v3 하에 배포되며 도한 자유 소프트웨어이다.

일반적인 문법

GAS는 지원되는 모든 구조에서 동작하는 일반 문법을 지원한다. 이 일반 문법은 어셈블러 지시자와 주석의 방식을 포함한다.

지시자

GAS는 C 언어에서 전처리문과 비슷하게 동작하는, 키워드인 어셈블러 지시자를 사용한다. 대부분의 사용 가능한 어셈블러 지시자들이 대상 구조와 상관 없이 사용 가능하지만 몇몇 지시자들은 기게에 의존적이기도 하다.[1]

주석

GAS는 두 스타일의 주석을 지원한다:[2]

다중 라인 주석

C 멀티 라인 주석 처럼 사선과 별표 쌍을 사용해 시작과 끝을 표시한다:

 /* 
 주석
 */
 

단일 라인 주석

단일 라인 주석은 어셈블되는 아키텍처에 다라서 몇몇의 다른 포맷들이 존재한다.

  • 해시 기호(#)는 다음과 같은 플랫폼에서 사용된다: i386, x86-64, i960, 68HC11, 68HC12, VAX, V850, M32R, 파워PC, MIPS 그리고 M880x0.
  • 쌍반점(;)은 다음에서 사용된다: AMD 29k 패밀리, ARC, H8/300 패밀리, HPPA, PDP-11, picoJava, 모토롤라, 그리고 M32C.
  • 골뱅이표(@)는 ARM 플랫폼에서 사용된다.
  • 쌍 빗금(//)은 AArch64 플랫폼에서 사용된다.

사용

GCC라는 유명한 컴파일러의 백엔드로서 GNU 어셈블러는 현대 오픈 소스 소프트웨어를 컴파일할 때 매우 폭넓게 사용된다. GAS는 GNU 소프트웨어와 함께 GNU/리눅스 운영 체제에서 어셈블러로 사용된다. GAS의 수정된 버전은 또한 매킨토시 운영 체제의 개발 툴 패키지에서도 볼 수 있다.

예시 프로그램

IA-32 리눅스에서 표준 AT&T 문법을 사용하는 표준 “Hello, world!” 프로그램:

.global	_start

.text
_start:
	movl  $4, %eax
	movl  $1, %ebx
	movl  $msg, %ecx
	movl  $len, %edx
	int   $0x80

	movl  $1, %eax
	movl  $0, %ebx
	int   $0x80
.data
msg:
	.ascii  "Hello, world!\n"
	len =   . - msg

비판

인텔 문법에 익숙한 이들은 x86과 x86-64 플랫폼에서의 어셈블리에 대한 인텔 문법을 지원하지 않는 다는 것이 문제가 된다고 주장한다.

그러나 버전 2.10부터 인텔 문법이 .intel_syntax 지시자의 사용을 통해 사용 가능해 졌다.[3][4][5]

같이 보기

각주

  1. “The GNU Assembler - Assembler Directives”. 
  2. 레드햇. “Using as”. 2013년 1월 10일에 확인함. 
  3. “GNU Assembler News”. 
  4. “AT&T Syntax versus Intel Syntax”. 2014년 7월 28일에 확인함. 
  5. Ram Narayan (2007년 10월 17일). “Linux assemblers: A comparison of GAS and NASM”. IBM DeveloperWorks. 2009년 3월 3일에 원본 문서에서 보존된 문서. 2014년 7월 28일에 확인함. 

바깥 고리