uczę asm na Linuksie (noobuntu 10.04) Mam następujący kod off: http://asm.sourceforge.net/intro/hello.htmlZgromadzenie, hello world pytanie
section .text
global _start ;must be declared for linker (ld)
_start: ;tell linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string
To proste Hello World. Działa na Linuksie + wywołuje jądro bezpośrednio (podobno). Czy ktoś może wyjaśnić, co naprawdę się tutaj dzieje? Myślę, że odczytuje liczby całkowite w rejestrach ebx e2 & ekx, edx danych i określa wywołanie systemowe, gdy wywoływane jest jądro. Jeśli tak, to czy różne kombinacje liczb całkowitych definiują różne wywołania systemowe, gdy int 0x80 jest wywoływane?
Nie jestem dobry ze stronami man, ale przeczytałem wszystkie powiązane, które mogę znaleźć, czy jakakolwiek strona podręcznika mówi mi, jakie kombinacje definiują jakie linie boczne?
KAŻDA pomoc jest doceniana. Linia linią wyjaśnieniem byłoby niesamowite ... -dzięki z góry Jeremy
Bardzo dziękuję, to było moje podejrzenie i niemniej pomocna ... Czy możesz mi powiedzieć, gdzie mogę dowiedzieć się więcej? Czy są to liczby całkowite ze spisu w stronach podręcznika? – Jeremy
Musisz zagłębić się głęboko w pliki nagłówkowe źródła Linux, aby znaleźć numery połączeń systemowych. W tej chwili nie mam pod ręką komputera z systemem Linux, więc nie mogę podać dokładnej lokalizacji, ale jest to coś w rodzaju 'include/asm/syscall.h' w drzewie źródeł jądra. –
dziękuję bardzo, byłeś v. Pomocny. – Jeremy