Якщо ви дійсно вирішили дізнатися трохи асемблера, ймовірно , ви повинні дізнатися що - щось на зразок 6502 асемблера на Commodore 64 (емулювати, звичайно), або 68000 на Amiga.
Ви можете ознайомитись з Commodore 64 тут ...
http://thepiratebay.org/torrent/4609238/Tag3-Saal2-Slot16_00--ID2874-the_ultimate_commodore_64_talk-Main
Класична книга все, що вам потрібно знати, - це описана тут ...
http://reprog.wordpress.com/2010/03/12/programming-books-part-3-programming-the-commodore-64/
Ви, ймовірно, можете знайти сканування PDF, якщо оглянетесь.
IMO, 6502 простіше, ніж Z80, а 68000 легше, ніж 8086 - більш регулярні набори інструкцій тощо.
Але процесор - це лише один аспект апаратного забезпечення. Також сучасний процесор є масово іншим звіром, і він робить прозорі навіть з точки зору компіляторів - наприклад, презентацію віртуального адресного простору.
Особлива перевага 6502 на C64 полягає в тому, що не тільки простий процесор, але є і дуже прості для злому апаратне обладнання. Раніше мені було весело грати з музичним чіпом SID.
Отже - це, мабуть, гідна вправа, якщо ви не витрачаєте на це занадто багато часу. Я засвоїв асемблер 6502 як свою другу мову, коли мені було близько 14 років, відразу після Commodore Basic. Але в основному це виходить дуже проста робоча модель, щоб ви могли додати до неї більш складні ідеї з мінімальним непорозумінням.
Деякі корисні речі ви можете дізнатися, працюючи в асемблері ...
- Як працюють регістри процесора.
- Як працює адресація пам'яті, включаючи непряме.
- Як працює стек процесора
- Як працює бітова логіка.
- Як ЦП контролює пристрої вводу / виводу.
- Як працюють переривання.
Один із конкретних причин, який я рекомендую, - це краще зрозуміти, як прості кроки діють цілком детерміновано та механічно та зовсім без інтелекту чи здорового глузду. В основному звикання до імперативної моделі виконання в її найчистішій і впертісінькій формі невігласу.
Точно наскільки корисно знати більшість цих речей зараз, проте це складне питання.
Одне, чого ви не навчитесь, - це як добре грати зі спадщиною пам’яті. Ці старі машини здебільшого мали просту модель пам’яті, без шарів кешу та без віртуальної пам’яті. Ви також багато чого не дізнаєтесь про одночасність - це, безумовно, були способи впоратися з цим, але це переважно означало перебої. Вам не потрібно було турбуватися про мютекси тощо.
Іноді ментальна модель того, як ці речі колись працювали, або про те, як працює асемблер, навіть може ввести в оману. Наприклад, мислення покажчика С як адреси може призвести до невизначених проблем з поведінкою. Покажчик змінного струму зазвичай реалізується як ціле число, що містить адресу, але немає гарантії, що це абсолютно вірно. Наприклад, на деяких химерних платформах різні вказівники можуть вказувати на різні адресні простори. Це стає важливим, коли ви хочете робити арифметичні або бітові логічні з двома вказівниками.
Якщо у вас немає однієї з цих химерних платформ, ви, можливо, не думаєте, що вас це турбує, - але компілятори в наші дні все частіше використовують оптимізовану для стандартів поведінку.
Отже, ментальна модель архітектури системи може бути корисною, але все одно важливо кодувати специфікацію мови, а не гіпотетичну модель, яку ваша мова та платформа можуть не дотримуватися.
Нарешті, багато корисних ментальних моделей походить від отримання уявлення про те, як компілятори генерують код - а генерація коду для сучасних мов сильно відрізняється від досить тривіальних компіляторів, доступних тоді.
Це улюблена моя книга для цього ...
http://dickgrune.com/Books/MCD_1st_Edition/
Поряд із деталями розбору та AST тощо він охоплює генерацію коду для різних мовних парадигм - імперативних, OOP, функціональних, логічних, паралельних та розподілених - а також для управління пам'яттю. Якщо ви хочете знати, як працюють виклики поліморфних методів, не забиваючись у деталі набору інструкцій процесора, така книга, як ця, є вашим другом - і незабаром вийде нове видання.