GNU 어셈블러: 두 판 사이의 차이
잔글 봇: 문단 이름 변경 (바깥 고리 → 외부 링크) |
InternetArchiveBot (토론 | 기여) 3 개의 출처 구조, 0 개의 링크를 깨진 것으로 표시) #IABot (v2.0.9.2 |
||
(사용자 6명의 중간 판 10개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
{{위키데이터 속성 추적}} |
|||
{{소프트웨어 정보 |
{{소프트웨어 정보 |
||
| name = GNU 어셈블러 |
| name = GNU 어셈블러 |
||
| logo = Heckert GNU white.svg |
|||
| latest release version = 2.27 |
|||
| latest release version = GNU Binutils {{wikidata|property|reference|edit|Q1144975|P348}} |
|||
| latest release date = {{start date and age|{{wikidata|qualifier|Q1144975|P348|P577}}}} |
|||
| developer = [[GNU 프로젝트]] |
| developer = [[GNU 프로젝트]] |
||
| latest release date = {{시작 날짜와 나이|2016|8|3||br=yes}} |
| latest release date = {{시작 날짜와 나이|2016|8|3||br=yes}} |
||
10번째 줄: | 13번째 줄: | ||
| website = {{url|https://www.gnu.org/software/binutils/}} |
| website = {{url|https://www.gnu.org/software/binutils/}} |
||
}} |
}} |
||
'''GNU 어셈블러'''(GNU Assembler, 보통 '''gas''' 또는 간단히 '''as'''로 불리는)는 [[GNU 프로젝트]]에서 사용되는 [[어셈블러]]이다. 이것은 [[GCC]]의 기본 [[백엔드]]이며 [[GNU 운영 체제]]와 [[리눅스 커널]] 그리고 다양한 다른 소프트웨어를 어셈블하는데 사용된다. GNU 어셈블러는 [[GNU 바이너리 유틸리티]]의 한 부분이다. |
'''GNU 어셈블러'''(GNU Assembler, 보통 '''gas''' 또는 간단히 '''as'''로 불리는)는 [[GNU 프로젝트]]에서 사용되는 [[어셈블러]]이다. 이것은 [[GCC]]의 기본 [[백엔드]]이며 [[GNU 운영 체제]]와 [[리눅스 커널]] 그리고 다양한 다른 소프트웨어를 어셈블하는데 사용된다. GNU 어셈블러는 [[GNU 바이너리 유틸리티]]의 한 부분이다. |
||
18번째 줄: | 22번째 줄: | ||
=== 지시자 === |
=== 지시자 === |
||
GAS는 [[C 언어]]에서 전처리문과 비슷하게 동작하는, 키워드인 어셈블러 지시자를 사용한다. 대부분의 사용 가능한 어셈블러 지시자들이 대상 구조와 상관 없이 사용 가능하지만 몇몇 지시자들은 |
GAS는 [[C 언어]]에서 전처리문과 비슷하게 동작하는, 키워드인 어셈블러 지시자를 사용한다. 대부분의 사용 가능한 어셈블러 지시자들이 대상 구조와 상관 없이 사용 가능하지만 몇몇 지시자들은 기계에 의존적이기도 하다.<ref>{{웹 인용 |
||
|title=The GNU Assembler - Assembler Directives |
|title=The GNU Assembler - Assembler Directives |
||
|url=http://sources.redhat.com/binutils/docs-2.12/as.info/Pseudo-Ops.html#Pseudo%20Ops |
|url=http://sources.redhat.com/binutils/docs-2.12/as.info/Pseudo-Ops.html#Pseudo%20Ops |
||
|확인날짜=2016-05-30 |
|||
⚫ | |||
|archive-date=2012-02-22 |
|||
|archive-url=https://web.archive.org/web/20120222005603/http://sources.redhat.com/binutils/docs-2.12/as.info/Pseudo-Ops.html#Pseudo%20Ops |
|||
|url-status= |
|||
⚫ | |||
=== |
=== 지원하는 주석 === |
||
GAS는 두 스타일의 주석을 지원한다:<ref>{{웹 인용 |
GAS는 두 스타일의 주석을 지원한다:<ref>{{웹 인용 |
||
|last=레드햇 |
|last=레드햇 |
||
29번째 줄: | 37번째 줄: | ||
|url=http://sources.redhat.com/binutils/docs-2.12/as.info/Comments.html#Comments |
|url=http://sources.redhat.com/binutils/docs-2.12/as.info/Comments.html#Comments |
||
|accessdate=Jan 10, 2013 |
|accessdate=Jan 10, 2013 |
||
|archive-date=2011-06-20 |
|||
⚫ | |||
|archive-url=https://web.archive.org/web/20110620054223/http://sources.redhat.com/binutils/docs-2.12/as.info/Comments.html#Comments |
|||
|url-status= |
|||
⚫ | |||
==== 다중 라인 주석 ==== |
==== 다중 라인 주석 ==== |
||
C 멀티 라인 |
C 멀티 라인 주석처럼 사선과 별표 쌍을 사용해 시작과 끝을 표시한다: |
||
<nowiki> |
<nowiki> |
||
/* |
/* |
||
40번째 줄: | 51번째 줄: | ||
==== 단일 라인 주석 ==== |
==== 단일 라인 주석 ==== |
||
단일 라인 주석은 어셈블되는 아키텍처에 |
단일 라인 주석은 어셈블되는 아키텍처에 따라서 몇몇의 다른 포맷들이 존재한다. |
||
* [[해시 기호]](#)는 다음과 같은 플랫폼에서 사용된다: [[인텔 80386|i386]], [[x86-64]], [[인텔 i960|i960]], 68HC11, 68HC12, VAX, V850, M32R, [[파워PC]], [[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]]. |
||
50번째 줄: | 61번째 줄: | ||
== 예시 프로그램 == |
== 예시 프로그램 == |
||
[[IA-32]] [[리눅스]]에서 표준 AT&T 문법을 사용하는 표준 “Hello, world!” 프로그램:< |
[[IA-32]] [[리눅스]]에서 표준 AT&T 문법을 사용하는 표준 “Hello, world!” 프로그램:<syntaxhighlight lang="asm"> |
||
.global _start |
.global _start |
||
.text |
.text |
||
_start: |
_start: |
||
movl |
movl $4, %eax |
||
movl |
movl $1, %ebx |
||
movl |
movl $msg, %ecx |
||
movl |
movl $len, %edx |
||
int |
int $0x80 |
||
movl |
movl $1, %eax |
||
movl |
movl $0, %ebx |
||
int |
int $0x80 |
||
.data |
.data |
||
msg: |
msg: |
||
.ascii |
.ascii "Hello, world!\n" |
||
len = |
len = . - msg |
||
</syntaxhighlight> |
|||
</source> |
|||
== 비판 == |
== 비판 == |
||
76번째 줄: | 87번째 줄: | ||
|title=GNU Assembler News |
|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 |
|url=http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/NEWS?rev=1.93&content-type=text/x-cvsweb-markup&cvsroot=src |
||
}}{{깨진 링크|url=http://sourceware.org/cgi-bin/cvsweb.cgi/src/gas/NEWS?rev=1.93&content-type=text%2Fx-cvsweb-markup&cvsroot=src }}</ref><ref>{{웹 인용 |
|||
⚫ | |||
|title=AT&T Syntax versus Intel Syntax |
|title=AT&T Syntax versus Intel Syntax |
||
|url=http://sources.redhat.com/binutils/docs-2.12/as.info/i386-Syntax.html |
|url=http://sources.redhat.com/binutils/docs-2.12/as.info/i386-Syntax.html |
||
|accessdate=28 July 2014 |
|accessdate=28 July 2014 |
||
|archive-date=2011-06-20 |
|||
}}</ref><ref>{{웹 인용 |
|||
|archive-url=https://web.archive.org/web/20110620054249/http://sources.redhat.com/binutils/docs-2.12/as.info/i386-Syntax.html |
|||
|url-status= |
|||
⚫ | |||
|title=Linux assemblers: A comparison of GAS and NASM |
|title=Linux assemblers: A comparison of GAS and NASM |
||
|author=Ram Narayan |
|author=Ram Narayan |
||
99번째 줄: | 113번째 줄: | ||
== 외부 링크 == |
== 외부 링크 == |
||
*{{공식 웹사이트}} |
* {{공식 웹사이트}} |
||
* [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}} |
||
[[분류:어셈블러]] |
[[분류:어셈블러]] |
||
[[분류:GNU 프로젝트 소프트웨어]] |
[[분류:GNU 프로젝트 소프트웨어]] |
||
[[분류:유닉스 프로그래밍 도구]] |
[[분류:유닉스 프로그래밍 도구]] |
||
[[분류:자유 컴파일러와 인터프리터]] |
2022년 11월 14일 (월) 01:02 기준 최신판
개발자 | GNU 프로젝트 |
---|---|
안정화 버전 | GNU Binutils 2.43.1[1]
/ 2016년 8월 3일 |
프로그래밍 언어 | C |
플랫폼 | 크로스 플랫폼 |
종류 | 어셈블러 |
라이선스 | GNU 일반 공중 사용 허가서 v3 |
웹사이트 | www |
GNU 어셈블러(GNU Assembler, 보통 gas 또는 간단히 as로 불리는)는 GNU 프로젝트에서 사용되는 어셈블러이다. 이것은 GCC의 기본 백엔드이며 GNU 운영 체제와 리눅스 커널 그리고 다양한 다른 소프트웨어를 어셈블하는데 사용된다. GNU 어셈블러는 GNU 바이너리 유틸리티의 한 부분이다.
GAS 실행 파일은 이름이 as이며 유닉스 어셈블러의 표준 이름이다. GAS는 크로스 플랫폼이며 여러 다양한 컴퓨터 구조에서 실행되고 어셈블을 할 수 있다. GNU 일반 공중 사용 허가서 v3 하에 배포되며 도한 자유 소프트웨어이다.
일반적인 문법
[편집]GAS는 지원되는 모든 구조에서 동작하는 일반 문법을 지원한다. 이 일반 문법은 어셈블러 지시자와 주석의 방식을 포함한다.
지시자
[편집]GAS는 C 언어에서 전처리문과 비슷하게 동작하는, 키워드인 어셈블러 지시자를 사용한다. 대부분의 사용 가능한 어셈블러 지시자들이 대상 구조와 상관 없이 사용 가능하지만 몇몇 지시자들은 기계에 의존적이기도 하다.[2]
지원하는 주석
[편집]GAS는 두 스타일의 주석을 지원한다:[3]
다중 라인 주석
[편집]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
지시자의 사용을 통해 사용 가능해 졌다.[4][5][6]
같이 보기
[편집]각주
[편집]- ↑ “GNU Binutils 2.43.1 released”. 2024년 8월 17일. 2024년 8월 18일에 확인함.
- ↑ “The GNU Assembler - Assembler Directives”. 2012년 2월 22일에 원본 문서에서 보존된 문서. 2016년 5월 30일에 확인함.
- ↑ 레드햇. “Using as”. 2011년 6월 20일에 원본 문서에서 보존된 문서. 2013년 1월 10일에 확인함.
- ↑ “GNU Assembler News”.[깨진 링크(과거 내용 찾기)]
- ↑ “AT&T Syntax versus Intel Syntax”. 2011년 6월 20일에 원본 문서에서 보존된 문서. 2014년 7월 28일에 확인함.
- ↑ Ram Narayan (2007년 10월 17일). “Linux assemblers: A comparison of GAS and NASM”. IBM DeveloperWorks. 2009년 3월 3일에 원본 문서에서 보존된 문서. 2014년 7월 28일에 확인함.
외부 링크
[편집]- 공식 웹사이트
- Gas manual
- 리눅스 사용자 명령어 매뉴얼 페이지 : the portable GNU assembler –