Dobrym, choć trudnym w odbiorze źródłem informacji są: Intel Architecture Software Developer's Manuał (IASDM) dostępny ZA DARMO ze stron Intela oraz DARMOWE podręczniki AMD64 Architecture Programmer's Manuał firmy AMD
Jak pisać programy w asemblerze?
Należy zaopatrzyć się w:
• Edytor tekstu, mogący zapisywać pliki tekstowe (bez formatowania), np. VIM, LPE, Emacs/XEmacs, Joe, Pico, Jed, Kate, KWrite.
• Kompilator języka asembler (patrz dalej)
• Odpowiedni program łączący (konsolidator, ang. linker), chyba że kompilator ma już taki wbudowany, jak np. FASM
Wtedy wystarczy napisać w edytorze tekstu plik zawierający komendy procesora (o tym później), zapisać go z rozszerzeniem .asm lub .s (GNU as), po czym użyć kompilatora, aby przetworzyć program na kod rozumiany przez procesor.
Jakiego kompilatora użyć?
Istnieje wiele kompilatorów języka asembler pod Linuksa. Do najpopularniejszych należą Netwide Asembler Project (NASM), Fiat Asembler (FASM), High-Level Asembler (HLA) i Gnu As.
Można je ściągnąć z intemetu:
• NASM: sf.net/projects/nasm
• FASM: flatasembler.net
• HLA: webster.cs.ucr.edu
• Gnu Asembler znajduje się w pakiecie binutils (powinien być w każdej dystrybucji).
Po skompilowaniu pliku z kodem źródłowym należy użyć programu łączącego - będziemy używać standardowego LD (tego, którego używają inne kompilatory), gdyż również powinien się znajdować w każdej dystrybucji Linuksa. Mamy więc już wszystko, co potrzeba. Zaczynamy pisać. Będę tutaj używał składni NASMa i FASMa (gdyż kompilują one programy w składni Intela, która jest bardziej przejrzysta, mimo iż może się wydawać odwrotna).
Najpierw programy na systemy 32-bitowe:
(przeskocz pierwszy 32-bitQwy program w składni NASM)
; wersja NASM na system 32-bitowy
section .text ; początek sekcji kodu.
global _start ; linker ld chce mieć ten symbol globalny
; punkt startu programu
; numer funkcji systemowej:
; sys_write - zapisz do pliku ; numer pliku, do którego piszemy.
14