GNU Assembler
Тип | |
---|---|
Разработчик | |
Написана на | |
Операционная система |
кроссплатформенное ПО |
Аппаратная платформа |
кроссплатформенное ПО |
Лицензия | |
Сайт |
[www.gnu.org/software/binutils/ .org/software/binutils/] |
GNU Assembler или GAS (вызывается командой as) — ассемблер проекта GNU; используется компилятором GCC[1]. Входит в пакет GNU Binutils. Кроссплатформенная программа, запускается и компилирует код для многочисленных процессорных архитектур. Распространяется на условиях свободной лицензии GPL 3.
Содержание
Синтаксис
Синтаксис и директивы GAS на всех платформах в значительной степени схожи[2]. Директивы начинаются с точки. Многострочные комментарии обозначаются как в Си (/* … */
). Однострочные комментарии на разных платформах обозначаются по-разному; например, в GAS для x86 и x86-64 они обозначаются как в C++ (// …
) или как в sh (# …
), в то время как в GAS для ARM они обозначаются символом @
.
По умолчанию, GAS использует AT&T-синтаксис для x86 и x86-64, то есть регистры обозначаются префиксом %
и регистр-приёмник указывается после источника; например код
movl $42, %eax
помещает значение 42 в регистр eax.
В версии 2.10 (выпущенной в 2000 году) появилась поддержка варианта более привычного для x86 Intel-синтаксиса[3], вызываемого директивой .intel_syntax noprefix
(директива .intel_syntax
используется для варианта Intel-синтаксиса, в котором регистры обозначаются префиксом %
). Например, код
.intel_syntax noprefix
mov eax, 42
равноценен коду с AT&T-синтаксисом, указанному выше.
Примеры
Ниже приведены примеры программы Hello, world! для GAS под Linux.
.data
msg:
.ascii "Hello, world!\n"
len = . - msg # символу len присваивается длина строки
.text
.global _start # точка входа в программу
_start:
movl $4, %eax # системный вызов № 4 — sys_write
movl $1, %ebx # поток № 1 — stdout
movl $msg, %ecx # указатель на выводимую строку
movl $len, %edx # длина строки
int $0x80 # вызов ядра
movl $1, %eax # системный вызов № 1 — sys_exit
xorl %ebx, %ebx # выход с кодом 0
int $0x80 # вызов ядра
.intel_syntax
.data
msg:
.ascii "Hello, world!\n"
len = . - msg # символу len присваивается длина строки
.text
.global _start # точка входа в программу
_start:
mov %eax, 4 # системный вызов № 4 — sys_write
mov %ebx, 1 # поток № 1 — stdout
mov %ecx, OFFSET FLAT:msg # указатель на выводимую строку
# OFFSET FLAT означает использовать тот адрес,
# который msg будет иметь во время загрузки
mov %edx, len # длина строки
int 0x80 # вызов ядра
mov %eax, 1 # системный вызов № 1 — sys_exit
xor %ebx, %ebx # выход с кодом 0
int 0x80 # вызов ядра
.data
msg:
.ascii "Hello, world!\n"
len = . - msg @ в GAS для ARM комментарии начинаются с @ или заключаются в /* */
.text
.global _start @ точка входа в программу
_start:
mov r7, #4 @ системный вызов № 4 — sys_write
mov r0, #1 @ поток № 1 — stdout
ldr r1, =msg @ указатель на выводимую строку
ldr r2, =len @ длина строки
swi #0 @ вызов ядра
mov r7, #1 @ системный вызов № 1 — sys_exit
mov r0, #0 @ выход с кодом 0
swi #0 @ вызов ядра
Напишите отзыв о статье "GNU Assembler"
Примечания
- ↑ [asm.sourceforge.net/howto/gas.html Linux Assembly HOWTO: GAS] (англ.). Проверено 18 июля 2010. [www.webcitation.org/66MZrpvwo Архивировано из первоисточника 23 марта 2012].
- ↑ [sourceware.org/binutils/docs-2.20/as/GNU-Assembler.html Using as: The GNU Assembler] (англ.). Проверено 18 июля 2010. [www.webcitation.org/66MZsHDgj Архивировано из первоисточника 23 марта 2012].
- ↑ [sourceware.org/cgi-bin/cvsweb.cgi/src/gas/NEWS?rev=1.114&content-type=text/x-cvsweb-markup&cvsroot=src&only_with_tag=MAIN gas/NEWS] (англ.). Проверено 17 июля 2010. [www.webcitation.org/65XG070wP Архивировано из первоисточника 18 февраля 2012].
Ссылки
- [www.gnu.org/software/binutils/ Сайт GNU Binutils] (англ.)
- [asm.sourceforge.net/howto/ Linux Assembly HOWTO] (англ.)
- [www.plantation-productions.com/Webster/www.artofasm.com/Linux/HTML/AoATOC.html The Art of Assembly Language (Linux Version)] (англ.)
- [www.ibm.com/developerworks/ru/library/l-gas-nasm/ Ассемблеры для Linux: Сравнение GAS и NASM]
-
[linux.die.net/man/1/as as(1)]
: the portable GNU assembler — страница справки man по пользовательским командам GNU/Linux (англ.)
Это заготовка статьи о свободном программном обеспечении. Вы можете помочь проекту, дополнив её. |
|
Отрывок, характеризующий GNU Assembler
Князь Андрей, умывшись и одевшись, вышел в роскошный кабинет дипломата и сел за приготовленный обед. Билибин покойно уселся у камина.Князь Андрей не только после своего путешествия, но и после всего похода, во время которого он был лишен всех удобств чистоты и изящества жизни, испытывал приятное чувство отдыха среди тех роскошных условий жизни, к которым он привык с детства. Кроме того ему было приятно после австрийского приема поговорить хоть не по русски (они говорили по французски), но с русским человеком, который, он предполагал, разделял общее русское отвращение (теперь особенно живо испытываемое) к австрийцам.
Билибин был человек лет тридцати пяти, холостой, одного общества с князем Андреем. Они были знакомы еще в Петербурге, но еще ближе познакомились в последний приезд князя Андрея в Вену вместе с Кутузовым. Как князь Андрей был молодой человек, обещающий пойти далеко на военном поприще, так, и еще более, обещал Билибин на дипломатическом. Он был еще молодой человек, но уже немолодой дипломат, так как он начал служить с шестнадцати лет, был в Париже, в Копенгагене и теперь в Вене занимал довольно значительное место. И канцлер и наш посланник в Вене знали его и дорожили им. Он был не из того большого количества дипломатов, которые обязаны иметь только отрицательные достоинства, не делать известных вещей и говорить по французски для того, чтобы быть очень хорошими дипломатами; он был один из тех дипломатов, которые любят и умеют работать, и, несмотря на свою лень, он иногда проводил ночи за письменным столом. Он работал одинаково хорошо, в чем бы ни состояла сущность работы. Его интересовал не вопрос «зачем?», а вопрос «как?». В чем состояло дипломатическое дело, ему было всё равно; но составить искусно, метко и изящно циркуляр, меморандум или донесение – в этом он находил большое удовольствие. Заслуги Билибина ценились, кроме письменных работ, еще и по его искусству обращаться и говорить в высших сферах.
Билибин любил разговор так же, как он любил работу, только тогда, когда разговор мог быть изящно остроумен. В обществе он постоянно выжидал случая сказать что нибудь замечательное и вступал в разговор не иначе, как при этих условиях. Разговор Билибина постоянно пересыпался оригинально остроумными, законченными фразами, имеющими общий интерес.
Эти фразы изготовлялись во внутренней лаборатории Билибина, как будто нарочно, портативного свойства, для того, чтобы ничтожные светские люди удобно могли запоминать их и переносить из гостиных в гостиные. И действительно, les mots de Bilibine se colportaient dans les salons de Vienne, [Отзывы Билибина расходились по венским гостиным] и часто имели влияние на так называемые важные дела.
Худое, истощенное, желтоватое лицо его было всё покрыто крупными морщинами, которые всегда казались так чистоплотно и старательно промыты, как кончики пальцев после бани. Движения этих морщин составляли главную игру его физиономии. То у него морщился лоб широкими складками, брови поднимались кверху, то брови спускались книзу, и у щек образовывались крупные морщины. Глубоко поставленные, небольшие глаза всегда смотрели прямо и весело.
– Ну, теперь расскажите нам ваши подвиги, – сказал он.
Болконский самым скромным образом, ни разу не упоминая о себе, рассказал дело и прием военного министра.
– Ils m'ont recu avec ma nouvelle, comme un chien dans un jeu de quilles, [Они приняли меня с этою вестью, как принимают собаку, когда она мешает игре в кегли,] – заключил он.
Билибин усмехнулся и распустил складки кожи.
– Cependant, mon cher, – сказал он, рассматривая издалека свой ноготь и подбирая кожу над левым глазом, – malgre la haute estime que je professe pour le православное российское воинство, j'avoue que votre victoire n'est pas des plus victorieuses. [Однако, мой милый, при всем моем уважении к православному российскому воинству, я полагаю, что победа ваша не из самых блестящих.]
Он продолжал всё так же на французском языке, произнося по русски только те слова, которые он презрительно хотел подчеркнуть.
– Как же? Вы со всею массой своею обрушились на несчастного Мортье при одной дивизии, и этот Мортье уходит у вас между рук? Где же победа?
– Однако, серьезно говоря, – отвечал князь Андрей, – всё таки мы можем сказать без хвастовства, что это немного получше Ульма…