1 ความคิดเห็น

 
GN⁺ 2024-04-23
ความคิดเห็นจาก Hacker News

หากสรุปความคิดเห็นต่าง ๆ ในคอมเมนต์ของ Hacker News เกี่ยวกับวิธีเรียนภาษาแอสเซมบลี จะได้ดังนี้:

  • หากอยากเรียนพื้นฐานของ ARM assembly แบบเข้าใจได้ง่าย การเล่นเกมออนไลน์ "OFRAK Tetris" จะช่วยได้ บล็อกต่าง ๆ คือคำสั่ง ARM assembly และระหว่างเล่นก็จะได้ฝึกอ่าน disassembly อย่างรวดเร็ว
  • หากมีแค่ x86 instruction reference ก็สามารถใช้ไวยากรณ์ inline assembler ของ D compiler เพื่อคอมไพล์นิพจน์ง่าย ๆ แล้ววิเคราะห์ assembly ที่สร้างขึ้นเพื่อเรียนรู้ได้
  • หนังสืออย่าง "Computer Architecture: A Quantitative Approach", "Getting Started with LLVM Core Libraries", "The Architecture of Open Source Applications" รวมถึงเอกสารทางการ, tutorial และ reference ของ LLVM ก็เป็นแหล่งอ้างอิงที่ดี
  • การอ่าน optimization guide หรือ architecture manual ที่ผู้ผลิต CPU จัดทำไว้ เช่น "Apple Silicon CPU Optimization Guide" ของ Apple หรือ "Software Developer Manuals" ของ Intel ก็ช่วยได้
  • การลองใส่โปรแกรมขนาดเล็กลงใน Ghidra หรือ Godbolt แล้วสังเกตว่าได้ assembly แบบใดออกมาก็เป็นวิธีที่ดีเช่นกัน ควรเข้าใจด้วยว่าโค้ดที่คอมไพเลอร์สร้างขึ้นนั้นมักดีเพราะ optimization pass มากกว่าการเลือก instruction เพียงอย่างเดียว
  • สิ่งสำคัญคือควรเริ่มจากการอ่าน manual ของสถาปัตยกรรมใดสถาปัตยกรรมหนึ่ง เช่น PowerPC, x86, ARM แล้วคอมไพล์โปรแกรม C ขนาดเล็กและวิเคราะห์ disassembly เพื่อทำความเข้าใจความสัมพันธ์ระหว่างโค้ดกับคำสั่ง
  • การอ้างอิงเอกสารของสถาปัตยกรรม "Introduction to 64 Bit Assembly Programming for Linux and OS X", ARMv7, ARMv8, RISC-V, x86 ก็เป็นแนวทางที่ดี และการวิเคราะห์โค้ดตัวอย่างจาก RosettaCode หรือ GitHub ก็ช่วยได้เช่นกัน
  • การลองสร้าง ISA ด้วยตัวเองผ่านเกม "Turing Complete" และแก้ปริศนาด้วย assembly ก็เป็นวิธีที่สนุก
  • การเริ่มจาก NASM tutorial แล้วค่อยอ้างอิง Intel manual ก็เป็นแนวทางที่ดี
  • แนะนำให้ทบทวน assembly และ compiler ผ่านโปรเจ็กต์ "Nand2Tetris" ด้วย