Assembler programming (краткое введение или "так с чего же начать?")

Модератор: Модераторы разделов

Аватара пользователя
Stauffenberg
Сообщения: 2041
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Assembler programming

Сообщение Stauffenberg »

First thing you need to know is that Assembly is a great, fast language, but only if you put time and effort in learning it. You must give all or nothing. (I suggest you give all) And remember, the beginning is always borring and hard...so don't give up !

Всем привет.

Не нашел на форуме подобной темы, поэтому решил написать сам.
Вижу, что многие начинающие ассемблерщики-линуксойды задают приблизительно одинаковые вопросы. Связанны они в основном с путаницей в различных синтаксисах этого языка. В ВУЗах преподают в основном MASM, но мы-то, юниксойды, знаем, что этот ассемблер от лукавого (:
Различных ассемблеров много, притом, что язык (даже для различных ОС) один, но есть отличия в оформении кода - синаксисе. Так же не надо забывать, что это аппаратнозависимый язык.
На русском информация есть. Ее немного, но все же найти можно. Естественно львиная доля на английском, и если хотите не просто познакомиться с assembler, а действительно научиться программировать под UNIX/Linux, то придется читать документацию на английском. Если с ним проблем нет, то можно очень много интересного найти на англоязычных asm-форумах.


Кто и зачем учит ASSEMBLER сегодня?

Очень популярный вопрос. Одни считают, что на этом языке уже 20 лет никто ничего не пишет, и изучение его сегодня является бессмысленным занятием. Другие считают, что его должен знать каждый хороший программист. Истина, как говорится, всегда посередине.

Системным программистам безусловно пригодится знание ассемблера. Оно поможет видеть структуру и принципы работы программ и ОС. Но это зависит от того, чем именно занимается системный программист. Без него невозможно программирование микроконтроллеров и создание компиляторов. С/C++ и прочие, это уже "оболочки" над ассемблером.
В архитекрурнозависимых частях ядра без ассемблера так же не обойтись:

Код: Выделить всё

find /usr/src/linux/ -iname *.s

Моё имхо - это процесс загрузки и безопасность. Мне интересны обе эти темы и поэтому я изучаю assembler.
Без ассемблера не написать загрузчик ОС, не перевести 32-битный процессор в защищённый режим, который стартует в реальном 16-битном режиме.
Так же, именно через знание ассемблера лежит дорога к пониманию работы памяти - самому слабому участку программы, с точки зрения безопасности, т.е. без ассемблера нельзя написать эксплойт/шелл_код.

Советую так же заглянть сюда и в вики. Там есть список недостатков и достоинств асма.

==========================================
* GNU Assembler *
License: GPL => OpenSource
OS: UNIX/Linux

Использует так же AT&T синтаксис.

as :: wiki
as :: home
as :: manual
as :: howto

AT&T Syntax versus Intel Syntax
==========================================
* NASM *
License: BSD => OpenSource
OS: Windows, Linux, Mac OS X, DOS, OS/2

The Netwide Assembler project provides cool i386 assembler, written in C, that should be modular enough to eventually support all known syntaxes and object formats.

В числе активных разработчиков далеко небезызвестный H. Peter Anvin :)
Поддерживаемые объектные фотрматы: bin, aout, coff, elf, as86, obj (DOS), win32, rdf.

nasm :: wiki
nasm :: home
nasm :: forum
nasm :: sourceforge.net
PC Assembly Tutorial
==========================================
* FASM *
License: BSD => OpenSource
OS: Windows, DOS, Linux, Unix-like

FASM (flat assembler) is a fast, efficient 80x86 assembler that runs in 'flat real mode'. Unlike many other 80x86 assemblers, FASM only requires the source code to include the information it really needs. It is written in itself and is very small and fast.
fasm :: wiki
fasm :: home
fasm :: forum
==========================================
* YASM *
License: BSD => OpenSource
OS: Windows, DOS, Linux, Mac OS X, Unix-like

YASM is a complete rewrite of the NASM assembler under the GNU GPL (some portions are under the "new" BSD License). It is designed from the ground up to allow for multiple syntaxes to be supported (eg, NASM, TASM, GAS, etc.) in addition to multiple output object formats. Another primary module of the overall design is an optimizer module.

yasm :: wiki
==========================================
* TDASM *
License: GPL => OpenSource
OS: UNIX/Linux

The Table Driven Assembler (TDASM) is a free portable cross assembler for any kind of assembly language. It should be possible to use it as a compiler to any target microprocessor using a table that defines the compilation process.
tdasm :: home
==========================================

О МASM и TASM я думаю писать не стоит, ибо it is evil proprietary software, к тому же нет версий под UNIX/Linux.


*** Общая информация по ASSEMBLER ***

http://wasm.ru -- на сайте находятся различные исходники на ассемблере (как самом понятном и продвинутом языке :) ), а также большое количество инструментов, которые могут пригодиться кодеру: компиляторы, отладчики, дизассемблеры и многое другое.
Это пожалуй центральный русскоязычный asm-портал. Есть forum (UNIX/Linux). Большое количество статей, в том числе и для юниксойдов.

http://programmersforum.ru -- еще один форум программистов с asm-разделом.

http://www.int80h.org/ -- On the Intel family of microprocessors int 80h is the assembly language op code for interrupt 80h. This is the syscall interrupt on a typical Intel-based Unix system. It allows application programmers to obtain system services from the Unix/Linux kernel.

http://www.thefreecountry.com/compilers/assemblers.shtml -- Free Assemblers, Linkers and Object Module Librarians.

http://www.lxhp.in-berlin.de/lhplinks.html#top -- Assembly Programming

http://www.linuxasmtools.net/ -- If you enjoy assembler, this site will provide tools and reference materials for Linux and X86 terminal/console programs.

http://www.janw.dommel.be/ -- various source code examples

http://asm.sourceforge.net/ -- If you are looking for information on assembly programming under UNIX-like operating systems (Linux/BSD/BeOS/etc), this is the right place to be. Here you can find various resources, ranging from tutorials and documentation, to actual programs written in assembly language. As time passes, we will try to provide as much information on the subject as possible, so stay tuned.

http://www.xs4all.nl/~smit/docs.htm#asm -- Assembly Tutorial

http://www.asmcommunity.net -- This community started in the late 90's in order to distribute and discuss information related to Assembly Language programming. There are forum and wiki.

http://sandpile.org/ -- The world's leading source for pure technical x86 processor information.

http://homepage.mac.com/randyhyde/webster....xAsm/index.html -- Linux Assembly Language Programming.

http://www.faqs.org/faqs/assembly-language -- x86 Assembly Language FAQ


*** КНИГИ ***

"Write Great Code: Understanding the machine" Randall Hyde
"The art of assembly language" Randall Hyde


*** Мануалы / Статьи ***

Linux assemblers: A comparison of GAS and NASM
Ассемблер в Linux для программистов C (AT&T синтаксис)



Happy hacking!


p.s. Критика, сообщения об ошибках, опечатках и т.д. приветствуются. Я буду редактировать это сообщение и добавлять информацию.
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Assembler programming

Сообщение eddy »

Спасибо, конечно, но на самом деле ассемблер в наше время используется лишь для написания модулей и платформозависимых кусков ядра... Даже микроконтроллеры программируются на С.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: Assembler programming

Сообщение Crazy »

Еще компиляторы пишут.

Если брать чистый ассемблер, без макросредств, то разница между masm, fasm, nasm невелика.

Desipere in loco
Спасибо сказали:
Аватара пользователя
xaionaro
Сообщения: 42
ОС: FreeBSD 6.2

Re: Assembler programming

Сообщение xaionaro »

Автор, добавьте по возможности в пост статью http://ru.wikibooks.org/wiki/Ассемблер_в_L...программистов_C . По ней легко за один день научиться программировать на ассемблере :)

eddy писал(а):
04.02.2010 00:25
Спасибо, конечно, но на самом деле ассемблер в наше время используется лишь для написания модулей и платформозависимых кусков ядра... Даже микроконтроллеры программируются на С.
Ассемблер просто надо понимать, чтобы уметь правильно писать на языках более выского уровня.
Ingenio stat sine morte decus...
Спасибо сказали:
Аватара пользователя
korvin
Сообщения: 39
ОС: >_<

Re: Assembler programming

Сообщение korvin »

xaionaro писал(а):
08.02.2010 10:54
Ассемблер просто надо понимать, чтобы уметь правильно писать на языках более выского уровня.

интересно как ассемблер помогает писать shell-скрипты?
(© '(define LISP (такой язык-программирования (состоящий-из смайликов (чуть более) (чем целиком)))) lurkmore)
Спасибо сказали:
Аватара пользователя
Stauffenberg
Сообщения: 2041
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: Assembler programming

Сообщение Stauffenberg »

Crazy писал(а):
04.02.2010 16:05
Если брать чистый ассемблер, без макросредств, то разница между masm, fasm, nasm невелика.

masm и fasm это оффтопик, а вот nasm это наше все.
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: Assembler programming

Сообщение rm_ »

А я бы рекомендовал, по крайней мере в случае чисто-академического интереса к ассемблеру, забыть про x86, и обратить внимание на процессоры с гораздо более приятными и "прямыми" архитектурами. Почитайте например "Dandamudi S. P. - Guide to RISC Processors. For Programmers and Engineers(2004)(387).pdf" (гуляет по интернетам-торрентам), оглавление её можно посмотреть тут.
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: Assembler programming

Сообщение Crazy »

rm_ писал(а):
02.03.2010 20:38
А я бы рекомендовал, по крайней мере в случае чисто-академического интереса к ассемблеру, забыть про x86, и обратить внимание на процессоры с гораздо более приятными и "прямыми" архитектурами. Почитайте например "Dandamudi S. P. - Guide to RISC Processors. For Programmers and Engineers(2004)(387).pdf" (гуляет по интернетам-торрентам), оглавление её можно посмотреть тут.

У многих дома процессоры отличные от x86? Из книг по ассемблеру нравится Кип Р. Ирвин "Язык ассемблера для процессоров Intel".

Desipere in loco
Спасибо сказали:
Аватара пользователя
Wagan
Сообщения: 38
ОС: ALT Linux/FreeBSD/uCOS-II/Win

Re: Assembler programming

Сообщение Wagan »

Crazy писал(а):
02.03.2010 21:34
У многих дома процессоры отличные от x86? Из книг по ассемблеру нравится Кип Р. Ирвин "Язык ассемблера для процессоров Intel".

Если оторваться от экрана и увидеть множество сетевых устройств, мобильников, гаджетов и т.п., то можно понять, что не только на десктопах и серверах живет Линукс. Возвращаясь к Вашему вопросу, Интел в очередной раз хочет всех подсадить на свой процессор, а именно Атом, хотя до его выхода в свет была, есть и успешно развивается архитектура ARM, скоро ноутбуки на подобных процессорах появятся у нас. Думаю, стоит обратить внимание на все это заранее, чтобы потом при установке на ноутбук операционки, не задаваться вопросами начального уровня.
С уважением,
Ваган Саруханов
Спасибо сказали: