Saya belajar dari buku Kip Irvine . Jika Anda mengabaikan kritik (adil) dari perpustakaannya (tidak relevan), saya dapat merekomendasikannya sebagai pengantar yang baik untuk bahasa itu sendiri - meskipun untuk hal - hal yang benar - benar menarik Anda harus mencari obsesif di internet.
Saya pikir akan berguna untuk memahami apa yang terjadi di tingkat yang lebih rendah. Saat Anda meneliti assembler, Anda akan belajar tentang pipelining cpu, prediksi cabang, penyelarasan cache, SIMD, pengurutan ulang instruksi, dan sebagainya. Pengetahuan tentang ini akan membantu Anda menulis kode tingkat tinggi yang lebih baik.
Lebih jauh, kebijaksanaan konvensional adalah untuk tidak mencoba mengoptimalkan perakitan secara manual pada sebagian besar waktu tetapi membiarkan penyusun mengkhawatirkannya. Ketika Anda melihat beberapa contoh dari hal-hal bengkok yang dihasilkan penyusun, Anda akan lebih memahami mengapa kebijaksanaan konvensional berlaku.
Contoh: LFSR bekerja cepat dengan instruksi rotate-with-carry, untuk kasus tertentu seperti ini, menulis versi assembler sama mudahnya dengan untuk mengetahui apakah compiler cukup pintar untuk mengetahuinya atau tidak. Terkadang Anda hanya mengetahui sesuatu yang tidak dimiliki kompilator.
Ini juga meningkatkan pemahaman Anda tentang masalah keamanan - tulis-atau-eksekusi, tumpukan overruns, dll.
Beberapa masalah konkurensi hanya menjadi jelas saat Anda mengetahui apa yang terjadi di tingkat per instruksi.
Terkadang ini berguna saat men-debug jika Anda tidak memiliki kode sumber yang lengkap.
Ada nilai keingintahuan. Bagaimana fungsi virtual diterapkan? Pernah mencoba menulis program DirectX atau COM di assembler? Bagaimana struktur besar dikembalikan, apakah fungsi pemanggil menawarkan ruang untuk mereka atau sebaliknya?
Lalu ada bahasa rakitan khusus untuk perangkat keras grafis, meskipun bahasa shader naik tingkat beberapa tahun yang lalu, apa pun yang memungkinkan Anda memikirkan masalah dengan cara yang berbeda itu bagus.