Porównanie dyrektyw FASMa i NASMa



(przeskocz różnice składni)
Najważniejsze różnice między dyrektywami FASMa i NASMa
typ dyrektywy NASM FASM
deklaracje danych
NASM: db, dw, dd, dq, dt
FASM: db, dw/du, dd, dp/df, dq, dt
rezerwacja niezainicjalizowanej pamięci
NASM: resb, resw, resd, resq, rest
FASM: rb, rw, rd, rp/rf, rq, rt
deklaracje tablic
NASM: TIMES 10 db "$"
TIMES 25*34 db/dw/dd/dp/df/dq/dt 0
resb/resw/resd/resq/rest 25*34
FASM: TIMES 10 db "$"
TIMES 25*34 db/dw/dd/dp/df/dq/dt 0
rb/rw/rd/rp/rf/rq/rt 25*34
operacje logiczne
NASM: +, -, *, /, %, |, ^, &, <<, >>, ~
FASM: +, -, *, /, mod, or, xor, and, shl, shr, not
deklaracje stałych
NASM: %define, %idefine, %xdefine, %xidefine, equ
FASM: =, equ
etykiety anonimowe
NASM: nie ma
FASM: @@, @b/@r, @f
makra
NASM: %macro, %imacro nazwa ilosc_arg ... %endm
FASM: macro nazwa arg {...}
kompilacja warunkowa
NASM: %if, %if(n)def, %elif, %else, %endif
FASM: if, else if, else, end if
struktury
NASM: struc nazwa ... endstruc
FASM: struc nazwa {...}
symbole zewnętrzne
NASM: extern, global
FASM: extrn, public
segmenty
NASM: segment nazwa, section nazwa
FASM:
ELF: section "nazwa" executable/writeable
ELF executable: segment readable/writeable/executable
typowy początek linkowanego programu linuksowego
NASM:
section .text
global _start

_start:
FASM:
format ELF
section ".text" executable
public _start
_start:
typowy początek nielinkowanego programu linuksowego
NASM: nie ma, zawsze trzeba linkować
FASM:
format ELF executable
segment readable executable


Sposoby kompilacji w kompilatorach FASM i NASM
typ programu NASM FASM
binarny
nasm -f bin -o prog.bin prog.asm
fasm prog.asm prog.bin
obiekt ELF
nasm -f elf -o prog.o prog.asm
fasm prog.asm prog.o
wykonywalny ELF
nasm -f elf -o prog.o prog.asm
ld -s -o prog prog.o
fasm prog.asm prog


Spis treści off-line (Alt+1)
Spis treści on-line (Alt+2)
Ułatwienia dla niepełnosprawnych (Alt+0)