Hacker News 의견
해커뉴스 댓글에서 어셈블리 언어를 배우는 방법에 대한 다양한 의견을 요약하면 다음과 같음:
- ARM 어셈블리 기초를 직관적으로 배우려면 온라인 게임 "OFRAK Tetris"를 해보는 것이 도움됨. 블록이 ARM 어셈블리 명령어이고, 게임을 하면서 빠르게 디스어셈블리를 읽는 법을 익힐 수 있음.
- x86 명령어 레퍼런스만 있으면 D 컴파일러의 인라인 어셈블러 문법을 활용해 간단한 표현식을 컴파일해보고 생성된 어셈블리를 분석하면서 배울 수 있음.
- "Computer Architecture: A Quantitative Approach", "Getting Started with LLVM Core Libraries", "The Architecture of Open Source Applications" 등의 책과 LLVM 공식 문서, 튜토리얼, 레퍼런스를 참고하는 것도 좋음.
- Apple의 "Apple Silicon CPU Optimization Guide"나 Intel의 "Software Developer Manuals"처럼 CPU 제조사에서 제공하는 최적화 가이드나 아키텍처 매뉴얼을 읽는 것이 도움됨.
- Ghidra나 Godbolt에 작은 프로그램을 넣어보고 어떤 어셈블리가 출력되는지 관찰하는 것도 좋은 방법. 컴파일러가 생성하는 코드는 명령어 선택보다는 최적화 패스 때문에 좋은 편이라는 점을 이해해야 함.
- 먼저 PowerPC, x86, ARM 등 특정 아키텍처의 매뉴얼을 읽은 뒤, 작은 C 프로그램을 컴파일해서 디스어셈블리를 분석하면서 코드와 명령어의 대응관계를 이해하는 것이 중요함.
- "Introduction to 64 Bit Assembly Programming for Linux and OS X"이나 ARMv7, ARMv8, RISC-V, x86 아키텍처 문서를 참고하는 것도 좋음. RosettaCode나 GitHub의 예제 코드를 분석해보는 것도 도움됨.
- "Turing Complete" 게임을 통해 직접 ISA를 만들어보고 어셈블리로 퍼즐을 풀어보는 것도 재미있는 방법임.
- NASM 튜토리얼로 시작한 뒤 Intel 매뉴얼을 참고하는 것도 좋음.
- "Nand2Tetris" 프로젝트로 어셈블리와 컴파일러를 복습해보는 것도 추천함.