логотип нашего сайта о программировании для начинающих

Программирование на ассемблере для начинающих. Ассемблер gas под linux, fasm под windows, tasm под dos, и многое другое.


Сайт для программистов, начинающих кодеров, и людей, желающих заняться программированием.



Меню невыпадающее
Программистам : Другое :

"Hello world!" на ассемблере gas с комментариями

.data

msg:
    .ascii "Hello, world!"
len = . - msg
.text

.global _start
_start:


movl $len,%edx

movl $msg,%ecx

movl $1,%ebx

movl $4,%еах

int $0x80



movl $0,%ebx

movl $1,%еах

int $0x80

# секция данных

# наша строка
# ее длина
# начало секции кода
# метка „start — точка входа,
# то есть
# начало программы для компоновщика

# выводим строку на s t d o u t:

# третий аргумент - длина строки

# второй - указатель на строку

# первый - дескриптор файла STDOUT - 1

# номер системного вызова 'write'

# вызываем ядро

# завершаем работу:

# помещаем код возврата в ЕВХ

# номер системного вызова 'exit' в ЕАХ

# и снова вызываем ядро

Непосредственно вводимый код выделен фиолетовым цветом , все остальное(зеленым) - комментарии.
Компилируем так
as -o helloworld.o helloworld.s
ld -s -o helloworld helloworld.o


скачать архив с исходным кодом и исполняемым файлом этого примера
tar.gz
zip

Как видите здесь используется ядро линукс, вызов к функциям которого осуществляется через прерывание 80h , а параметры передаются через регистры.

Для вызова фнуций ядра Linux надо :

  • поместить в регистр еах номер системного вызова
  • поместить в регистры ebx,ecx,edx,esi,edi параметры системного вызова, в ebx - первый, в ecx - второй и в edx - третий и т.д.
    если параметров 6 и больше, то в еах также номер системного вызова, а параметры в памяти подряд, адрес первого параметра в регистр ebp
  • вызвать прерывание 80h

В данной программе мы используем 2 системных вызова - SYS_write и SYS_exit, в системном вызове write передаются 3 параметра :

  • Дескриптор файла в который производится запись(вывод), в нашем случае мы помещаем стандартный дескриптор для вывода на экран, 1- всегда дескриптор STDOUT,еще в Linux всегда доступну STDIN - ввод с клавиатуры (дескриптор=0) и STDERR - вывод ошибок (дескриптор=3), но также в нашей программе ничего не мешает нам открыть какой-нибудь файл, и указать в вызове его дескриптор, просто тогда наша строка будет не на экран выведена, а записана в открытый нами файл.
  • Адрес строки, которую будем выводить/записывать
  • размер строки, которую выводим/записываем

В системном вызове Exit параметр только один, и он определяет код возвращаемый вызовом, так как в нашем случае нам ничего не нужно возвращать, этот параметр у нас равен 0.

С уважением Pauk_pv


Здесь со времнем появятся ссылки дружественных и понравившихся сайтов

Информер ТИЦ

все самое интересное на - www.ecasoft.ru
типография печать буклет

Сайт создан Pauk_pv // Pauk@paukpv.pp.ru

Rambler's Top100 Каталог@MAIL.RU - каталог ресурсов интернет

При использовании информации с сайта обязательна ссылка на сайт
Pauk_pv ©