ASM ASM ASM
Я учу ассемблер по книге "Ассемблер это просто. Учимся программировать" Калашникова (ТАСМ и МАСМ) , но вот никак не могу компилировать код из книги, походу нужен МС-ДОС. И вот вопрос- нужно ли мне изучать эту книгу, есть ли перспектива? Если нет, то посоветуйте литературу и инструмент.Вот пример
(01) CSEG segment
(02) org 100h
(03)
(04) Begin:
(05)
(06) mov ah,9
(07) mov dx,offset Message
(08) int 21h
(09)
(10) int 20h
(11)
(12) Message db 'Hello, world!$'
(13) CSEG ends
(14) end Begin
Еще на тему
Программирование для 32/64-битного ассемблера принципиально отличается тем, что ты фактически для всего будешь использовать средства WinAPI, а их по большому счету, все равно откуда вызывать.
Разработку собственной ОСи лучше вести на Си, а загрузчиком пользоваться стандартным - посмотри статьи на хабре,
Что касается существующих ОС, то нет, они не на ассемблере, и даже их загрузчик не на ассемблере, и чаще всего это даже не их загрузчик, а один из множества стандартных. Ассемблера в загрузчике первые пару байт, где нужно подогнать всё под фиксированные смещения. Дальше идёт прыжок на скомпилированный C-код. С UEFI и этого не надо.
Если есть желание погонять туда-сюда байтики по регистрам - проще всего делать ассемблерные вставки в готовый высокоуровневый код. Нужно понимать при этом, что на современных суперскалярных процессорах быстрее такой код не будет (как минимум у новичка) - современные компиляторы выворачивают код на изнанку именно так, как нужно для оптимально быстрого выполнения.
Если хочется окунуться в мир, где экономили каждый байтик и регистр - http://store.steampowered.com/app/370360 .
Если есть желание развиваться в этом направлении - надо забыть про "литературу" и идти читать тысячи страниц документации от производителей оборудования, того же Intel, к примеру.
Хочется пожевать "говно мамонта" - виртуалку и старый добрый Intlist Ральфа Баруна в зубы.
Ещё стоит "почитать" код в отладчике/дисассемблере - IDA там, HIEW или что другое - в этом и сила знания ассемблера.
Для особых маньяков есть ещё http://kolibrios.org/ и http://www.menuetos.net/ .
К сожалению (кому и к счастью), сейчас полно уже готового, никто не хочет тратить деньги на высокооплачиваемых специалистов - берут готовую сборку, бац-бац и в продакшен. Получается вот такой гротеск: http://www.geektimes.ru/post/251062/ - фактически писюк, настроенный школьником, в космосе. Или можно вспомнить драйвер дисковода от эмулятора компьютерных игр без всякого ревью воткнутый в критическое по безопасности место системы виртуализации KVM.
Что я могу посоветовать - повторюсь - учить тонны матчасти. Разобраться от начала до конца как каждый байтик в компьютере бегает. Это не значит, что нужно тыкнуться в каждый байтик, это значит накопить достаточно знаний, чтоб тыкнуть в любой и (потратив некоторое время, безусловно), определить - что это, и откуда/куда "бежит". Можно пойти в другие архитектуры - микроконтроллеры, например - там объём знаний меньше, но они не так универсальны, как PC-шные.
Далее - не обязательно быть именно "системным программистом" в узком понимании этого термина (собственно, в советское время он имел широкий смысл). При хорошем базовом багаже знаний и желании учиться дальше можно идти в энтерпрайз сисадмины/сетевые админы, откуда можно вырасти и в специалисты по безопасности. Не путать с эникейщиками и "безопасниками" из ментов или просто из выпускников ВУЗов - это отстой. Работа интересная и хорошо оплачиваемая, а, главное - именно то, что нравится, мне по крайней мере. Пришел я когда-то на предприятие, выучившись (больше самостоятельно, чем в ВУЗе) на системного программиста, фаната ассемблера и низкоуровневых фишек. А мне говорят - хорошо, мы тебя берём [в начале интерном, правда тогда это слово только к врачам применялось], но проект ещё не начался, мы тут вот только помещения обживаем, сеть протянули, сервер и дорогущие энтерпрайзные коммутаторы купили, а настроить - некому. Не посмотришь? - Так я и стал админом, не жалею.
Задача та же - копать и копать в глубину архитектуры, потом "программировать", сводить концы с концами, а также отлаживать в случае сбоев. "Программирование" не ограничивается написанием строчек кода сверху вниз (хоть без этого тоже никак - даже Windows Server теперь настраивается через PowerShell - великолепный язык) - всё намного шире и интересней.
Единственное, если что - предупреждаю - наступают облака и количество админов резко сокращается. Сокращается оно снизу - со слабых танцоров с бубном. Я надеюсь, что запрос на профессионалов всё равно будет. Но если сейчас начинать всё с нуля - можно попасть в ловушку - "верхние" места заняты олдфагами, а на рынке интересных и перспективных "нижних" мест (где можно расти в знаниях - это должен быть главный критерий выбора работы) не протолкнуться. Но тут уж "как потопаешь, так и полопаешь"(с) светлой памяти В.И. Новодворская.
И ещё - переход в менеджеры - это уход с любимой работы в задницу дрязг и интриг. При этом архитектор/CTO может продолжать быть админом. Тут нужно очень хорошо видеть грань. Организовывать джуниоров - это нормально, это часть работы сеньёра. Лезть выше, думать, что можно совместить - не советую. Я три года так совмещал - на любимое дело оставалось всё меньше и меньше времени. И это при том, что бумажками (кроме проектов) не я занимался.
И последнее - избегать как огня "шаманизма с бубном". Нужно вырастить в себе инженера в советском понимании слова (я не фанат совка, просто ещё застал этих великолепных специалистов - не столько даже в объёме знаний - с этим в совке было туго - негде было брать информацию, сколько в грамотном подходе). Метод индукции, а не пляски с бубном. Никаких "маздайка глючит" и "ничего не работает". Компьютер - конечный автомат.
Тяжело отвечать в аноне, если что - коммент 07.Aug.2015 16:12 - мой.