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