Assembler online
Pisz, uruchamiaj i udostępniaj fragmenty kodu bez żadnej konfiguracji.
Uruchamiaj asembler online w przeglądarce
To darmowy kompilator asemblera online dla kodu x86-64 w składni NASM. Wpisz program, kliknij Uruchom, a Coddy zasembluje go poleceniem nasm -f elf64, zlinkuje przez ld i uruchomi powstały plik wykonywalny Linuksa na serwerze, po czym pokaże stdout, stderr i kod wyjścia. Nie trzeba niczego instalować: ani NASM, ani linkera, ani maszyny wirtualnej, ani cross-kompilatora.
Program startowy to kompletny punkt wejścia _start, który czyta linię ze standardowego wejścia i odpisuje powitanie, używając surowych wywołań systemowych read, write i exit, bez libc. Tak właśnie działa asembler: przenosisz argumenty do rax/rdi/rsi/rdx, wywołujesz syscall, a resztą zajmuje się jądro. Panel stdin pod edytorem pozwala przekazać dane wejściowe do programu przy każdym uruchomieniu, dokładnie jak przy przekierowaniu danych do prawdziwego pliku binarnego.
Dlaczego ten edytor online asemblera się przydaje
- Prawdziwy toolchain x86-64 NASM. Kod źródłowy jest asemblowany przez
nasm -f elf64i linkowany przezldna Linuksie, czyli tymi samymi poleceniami, które wpisujesz lokalnie, więc to, co działa tutaj, działa też na prawdziwej maszynie. - Bezpośrednie wywołania systemowe Linuksa. Program startowy używa
read,writeiexitprzez instrukcjęsyscallbez pośrednictwa libc, więc widzisz dokładnie, jak rejestry przenoszą argumenty i wartości zwracane. - Obsługa standardowego wejścia. Przekaż bajty do programu przez panel stdin i odczytaj je wywołaniem systemowym 0. Przydaje się w klasycznych ćwiczeniach typu 'wczytaj imię, wypisz powitanie' i nie tylko.
- Zero konfiguracji, natychmiastowa informacja zwrotna. Bez instalacji NASM, bez zapamiętywania flag linkera, bez błędów uprawnień: otwierasz stronę i edytor jest gotowy. Błędy asemblera i linkera trafiają prosto do okna wyniku.
Co możesz wypróbować w edytorze online asemblera
- Wypisz stały napis jednym wywołaniem
write, a potem zakończ program czysto przezexit(0). To najmniejszy kompletny program x86-64 i najszybszy sposób, żeby zobaczyć, jak_startisyscalldo siebie pasują. - Wczytaj dane ze stdin do bufora w
.bss, usuń końcowy znak nowej linii i odeślij tekst z powrotem. Ten wzorzec stoi za prawie każdym ćwiczeniem z asemblera opartym na danych wejściowych. - Dodaj dwie liczby w rejestrach i ręcznie zamień wynik na cyfry ASCII, żeby móc go wypisać przez
write. W ten sposób uczysz się, że asembler nie maprint, są tylko bajty i wywołania systemowe.
Kompilator asemblera online: najczęstsze pytania
Jakiego asemblera i jakiej składni używa ten edytor online?
nasm -f elf64 i linkowany przez ld. Jeśli znasz składnię AT&T/GAS (styl %rax, movq), przepisz kod na styl Intela w NASM: mov rax, 1, section .text, global _start.Czy muszę instalować NASM albo linker?
Jak wczytać dane wejściowe w asemblerze?
read (numer 0): wpisz 0 do rax (sys_read), 0 do rdi (stdin), adres bufora do rsi i maksymalną liczbę bajtów do rdx, a potem wykonaj syscall. Wszystko, co wpiszesz w panelu stdin pod edytorem, trafia do programu po uruchomieniu. Program startowy pokazuje cały wzorzec, łącznie z usuwaniem końcowego znaku nowej linii.Dlaczego program potrzebuje _start zamiast main?
ld bez środowiska uruchomieniowego C. main to konwencja libc: kod startowy C wywołuje tę funkcję po wstępnym przygotowaniu. Przy gołym linkowaniu przez ld nie ma libc, więc jądro skacze prosto do etykiety _start i dlatego każdy program tutaj definiuje global _start. Na końcu trzeba samodzielnie zadbać o czyste zakończenie wywołaniem systemowym exit (numer 60).Czy mogę uczyć się asemblera w tym kompilatorze jako początkujący?
Przydatne narzędzia do Assembly
Darmowe narzędzia w przeglądarce, które świetnie działają razem z edytorem Assembly online. Wszystkie w Coddy.