Ассемблер это язык программирования. Программировать на нем сложно и он отнимает много времени, но он помогает понять работу компилятора и операционной системы в целом. Самый древний язык программирования, по сравнению с остальными такие как С+, С++, Java, Дельфи, Паскаль. Название ассемблеру дал Морис Уилкс. Он назвал его собирающей системой . Преимущества такого языка состоит в том,что написанная на нем программа будет занимать немного места, но она будет быстро выполняться. А недостатками являются применение огромного количества всевозможных команд. Ассемблер применяется в операционных системах Linux, Windows, Dos. Я бы лучше посоветовала программировать на языке Паскаль. Он, по моему мнению, является самым легким в изучении программирования.
Сам я в дешифровании не разбираюсь (может потому, что нет в этом нужды, поэтому и не изучал усиленно, а посмотрев в книге бегло, особо не разобрался), однако могу порекоммендовать книгу, где написан материал о дешифровании.
Книга называется:
Написал книгу Барри Брей. Издание 2005 года.
В этой книге на странице 473 приведён пример, как можно дешифровать участки памяти, а на страницах с 530 по 538 как дешифровать различные порты ввода-вывода.
Привести пример из книги не могу, так как эта информация защищена законом об авторском праве (о чём в книге и указано).
Полностью с нуля? Вообще, можно "покопать" в сторону микроядра L4, там очень много документации (правда на английском языке), поддерживаются различные архитектуры (правда, ARM на сколько я знаю уже не поддерживается).
А так, Эндрю Таненбаум "Современные операционные системы", Эндрю Таненбаум "Операционные системы: Разработка и реализациая", Макаров, Насыров "Написание собственной операционной системы" (достаточно примитивно, но понятно).
А вообще, есть достаточно неплохая подборка.
Как пример, можно поинтересоваться проектом "Хамелеон" - русской микроядерной операционной системой, на базе L4.
На счет исходников - лучше всего посмотреть исходный код FreeBSD, он достаточно прост и лаконичен, в отличии от Linux (слишком много "наворотов").
В языках ассемблера директивы -- это начинающиеся с "." специальные слова-указатели.
Это не команды, они не компилируются и не выполняются, но являются важными указывающими элементами программы в процессе ее компиляции и сборки.
Директивы зависят от вида ассемблерного языка, а последний зависит от системной архитектуры процессора, особенно в наименовании и количестве регистров.
Сейчас языки ассемблера чаще всего можно встретить при программировании микроконтроллеров.
Самые распространенные директивы позволяют присваивать понятные имена регистрам), определять сегменты памяти для занятия программой, типа памяти (как-то FLASH или EPPROM в микродевайсах), резервировать элемент памяти под переменную, разрешить генерации листинга при сборке и т.п. Т.е. это управляющие элементы, сами кодом не являющиеся.
Примеры:
DEF Name=Register
Мне нравилось в детстве программировать в кодах PDP-11 (у меня был УКНЦ). Прямо из пультового терминала восьмиричными цифрами -- коды в голове -- помнить надо штук 20 опкодов. Самый сложный проект -- интерпретатор самопридуманного языка. Что-то наподобие известного на этой архитектуре "Фокала" (с такими же однобуквенными ключевыми словами), только я еще больше упростил себе задачу, сделав математические выражения в обратном польском виде, плюс еще можно было назначать подпрограммы на свободные буквы. Еще пытался там поддержку двухпроцессорности сделать -- чтобы если в следующей строке нет в качестве аргументов результата предыдущей, передать ее обработку второму процессору. Но как-то это временами странно работало.