Получите себе копию Уильяма Столлингса - Организация и архитектура компьютеров . Это стандартный учебник, охватывающий большинство вопросов, которые вы подняли (и работали на меня!).
Я многому научился отсюда: http://www.asmcommunity.net/board/
Написание различных вещей на ассемблере - отличный способ заставить себя понять, что происходит. Вы можете попробовать FASM или MASM в качестве своего языка (я начинал с MASM, но думаю, что сейчас FASM более популярен).
Даже если вы никогда не будете писать свой собственный код на таком уровне, мне было полезно почитать об ассемблере и машинном языке. Хорошим началом для меня стали книги Джеффа Дантеманна (http://www.duntemann.com/assembly.html) на эту тему.
Если вы программировали в основном в мире .Net, было бы полезно понять управление ресурсами; хороший способ сделать это - перейти на язык более низкого уровня, например, C или C++, и написать что-нибудь нетривиальное, обрабатывающее данные, генерируемые пользователем.
Также может быть полезно почитать об алгоритмах и их сравнении - умение понимать нотацию "Big O" будет очень полезным.
По моему опыту, это также покрывает две распространенные ловушки среднего программиста .Net - веру в то, что фреймворк справляется со всеми проблемами управления памятью (глупо легко создать утечку ресурсов), а также получение правильной производительности алгоритмов (ожидание более быстрого оборудования - это слишком самонадеянно, на мой вкус)
.Разработка мобильных телефонов - Выйдите из своей зоны комфорта (.net) и, возможно, посмотрите на что-нибудь другое, возможно, встроенное программирование на C - это слишком далеко, но как насчет того, чтобы возиться с разработкой мобильных телефонов?
Android - хорошая платформа, все необходимые инструменты бесплатны, вам даже не нужен телефон, поскольку SDK поставляется с эмулятором. Вы многому научитесь, если будете учитывать вещи, о которых вы бы не задумывались дважды на машине с Windows, и переход с .net не так уж велик.
Вы узнаете об ограниченной среде, памяти, циклах процессора и т. Д., Что заставит вас по-новому взглянуть на программирование и, что более важно, это довольно круто!
Вы могли бы даже поэкспериментировать с собственной разработкой на платформе Android / ARM?
Я бы начал с чтения Компьютерные системы: взгляд программиста . Это именно то, что вы ищете. Я люблю эту книгу У меня было первое издание, и я недавно купил второе. Он используется в Карнеги-Меллон в их курсе Введение в компьютерные системы .
Это должно быть ступенькой к общему введению и охватывает широкий круг вопросов. Материал представлен очень хорошо. Прочитав эту книгу, вы сможете перейти к более сложным предметам, касающимся того, что вас интересует.
Вот список глав:
Если говорить с точки зрения опытного профессионального разработчика, а также преподавателя (курсы Comp. Sci.), Я вижу вашу ситуацию. На первый взгляд в голову приходит пара мыслей.
Возможно, вы можете посмотреть
Вы, конечно, знакомы с сайтом MIT Open Courseware . Есть вещи и похуже, чем бродить по разделу Курса 6 (Электротехника и информатика). Если вы настроены серьезно и у вас есть время, начните с 6.001 (что еще?), Затем 6.004 , а затем 6.033 .
Я должен вас предупредить. Этот сайт и изучение его содержимого может вызвать сильное привыкание.
Если у вас есть время и деньги, вы можете даже подумать о посещении колледжа. Имея за плечами четырехлетний опыт работы, у вас не будет проблем с административным цыпленком ****, который случается в каждом колледже и университете, а воспоминания, которые вы получите от него, останутся с вами на всю жизнь. (Несколько лет назад у меня была возможность вернуться в школу на пару семестров, чуть больше двадцати лет после того, как я впервые окончил ее. Я бы не променял этот опыт на НИЧЕГО, даже на Особняк И Девочки по соседству.)
+1 с Ram - на моем курсе cs мы делали операционные системы (посмотрите на pipelining - интересная концепция) и компиляторы. начните с базовых моделей и, если ваш интерес пойдет дальше, увидите, как это скоро станет очень сложным. интересные темы
Короткие книги:
"K&R", он же "Язык программирования Си" Брайана Кернигана и Денниса Ричи, желательно последняя версия (1988), а не издание 1978 года.
Длинные книги:
"Кнут", он же "Искусство компьютерного программирования", автор Дональд Кнут. Удивительно высокий уровень для книги, где все примеры написаны на машинном языке.
"Архитектура компьютера: Количественный подход", авторы Хеннесси и Паттерсон. Возможно, немного слишком низкий уровень - информация о создании собственного процессора.
"AoE", она же "Искусство электроники", авторы Пол Хоровиц и Уинфилд Хилл. Скорее всего, гораздо более низкий уровень, чем вы хотели - цифровая и аналоговая электроника.