あなたがいる場合か、アセンブラのビットを学ぶことを決定、あなたはおそらくアミーガの6502コモドール64(もちろん、エミュレートされた)上のアセンブラ、または68000のような何かを学ぶ必要があります。
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よりも簡単です-より一般的な命令セットなど
ただし、CPUはハードウェアの1つの側面にすぎません。また、最新のCPUは大きく異なる獣であり、仮想アドレス空間の提示など、コンパイラーの観点からも透過的なことを行います。
C64での6502の特別な利点は、CPUが単純であるだけでなく、ハードウェアで簡単にハックアラウンドできるものがあることです。私はかつてSIDミュージックチップをいじってとても楽しかった。
ですから、あまり時間をかけなければ、おそらく価値のある運動になります。Commodore Basicの直後、14歳のときに6502アセンブラーを第二言語として学びました。しかし、ほとんどの場合、非常にシンプルな作業モデルを取得しているため、誤解を最小限に抑えながら、より洗練されたアイデアを追加できます。
アセンブラでの作業を学ぶことができるいくつかの有用なもの...
- CPUレジスタの動作方法。
- インダイレクションを含むメモリアドレッシングの仕組み。
- CPUスタックの仕組み。
- ビットごとの論理の仕組み。
- CPUがI / Oデバイスを制御する方法。
- 割り込みの仕組み。
私が推奨する特定の理由の1つは、知性や常識がなくても、単純なステップが完全に決定論的かつ機械的かつ完全に動作する方法のより良い直観を得ることです。基本的に、最も純粋で最も頑固に無知な形式の命令型実行モデルに慣れる。
正確にどのようにそれは今それらのもののほとんどを知っている便利な、しかし、難しい質問です。
あなたが学ばないことの1つは、記憶階層でうまく遊ぶ方法です。これらの古いマシンには、キャッシュ層も仮想メモリもないシンプルなメモリモデルがほとんどありました。また、並行性についてはあまり学習しません-それらは確かにそれを処理する方法でしたが、それはほとんど割り込みを意味していました。ミューテックスなどを心配する必要はありませんでした。
時には、これらの事柄がかつてどのように機能したか、またはアセンブラーがどのように機能したかの精神モデルが誤解を招く可能性さえあります。たとえば、Cポインターをアドレスと考えると、未定義の動作の問題が発生する可能性があります。通常、ACポインターはアドレスを含む整数として実装されますが、それが厳密に正しいという保証はありません。たとえば、一部の奇妙なプラットフォームでは、異なるポインターが異なるアドレス空間を指す場合があります。これは、2つのポインターで算術演算またはビットごとの論理演算を行う場合に重要になります。
これらの奇妙なプラットフォームのいずれかを持たない限り、あなたはそれを気にかけないと思うかもしれませんが、最近のコンパイラは最適化のために標準未定義の動作を悪用する可能性がますます高くなっています。
したがって、システムアーキテクチャのメンタルモデルは有用ですが、言語とプラットフォームが尊重しない仮想モデルではなく、言語仕様に合わせてコーディングすることが重要です。
最後に、コンパイラがコードを生成する方法を理解することから、多くの有用なメンタルモデルが得られます。また、現代の言語のコード生成は、当時利用可能な非常に単純なコンパイラとは大きく異なります。
これは私のお気に入りの本です...
http://dickgrune.com/Books/MCD_1st_Edition/
構文解析やASTなどに関するものに加えて、さまざまな言語パラダイム(命令型、OOP、関数型、論理型、並列型、分散型)のコード生成、およびメモリ管理もカバーしています。CPU命令セットの詳細に行き詰まることなく、ポリモーフィックメソッド呼び出しがどのように機能するかを知りたい場合は、このような本があなたの友人です。まもなく公開される新しいエディションがあります。