Terve vaan kaikille!
Elikkäs olen tässä pari päivää jo opiskellut tätä NASMIA ja kaikki muu alkaa olee selvää kuin pullamössö, mutta noita moveja en oikein tajua.
elikkäs
Alla näkyy Hello World koodi ja haluaisin selvennystä mov kohtiin. Eli kohdat jossa siiretään dataa mov:lla niin mistä sen tietää mihin noista rekistereistä pitää muistia siirtää?Kun tuossa siiretään esim mov edx,len nniin miksi juuri tuo len siiretään edx eikä esim ecx??? Mistä sen tietää, että mikä data pitää mihinkin siirtää?
section .text ;section declaration
;we must export the entry point to the ELF linker or
global _start ;loader. They conventionally recognize _start as their
;entry point. Use ld -e foo to override the default.
_start:
;write our string to stdout
mov edx,len ;third argument: message length
mov ecx,msg ;second argument: pointer to message to write
mov ebx,1 ;first argument: file handle (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
;and exit
mov ebx,0 ;first syscall argument: exit code
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data ;section declaration
msg db "Hello, world!",0xa ;our dear string
len equ $ - msg ;length of our dear stringNoille järjestelmän keskeytyksille (int 0x80) argumentit välitetään rekisterien avulla. Esimerkissäsi eax:n pitää sisältää halutun systeemikutsun (system call) numeron, ebx:n kirjoitettavan tiedoston, ecx:n osoitin kirjoitettavaan tietoon ja edx:n kirjoitettavien tavujen määrä. Nyt sitten tuo keskeytys katsoo sitten, että haluat tuossa kirjoittaa stdoutiin (ebx) edx:n verran tavuja osoitteesta ecx.
Jos sinulla on kokemusta muista kielistä, niin voit verrata tuota niiden funktioiden kutsuun. Vertaa tuota käyttämääsi keskeytystä vaikkapa C -kielen standardikirjaston fwrite -funktioon [size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream )]. Siinäkin noilla funktion argumenteilla on tietty järjestys tai ns. "omat paikat".
Noista eri sysmteemikutsuista löytyy varmasti lista internetistä, että mikä on mnkäkin numero ja mitä ne tahtovat mihinkin rekistereihin. Google osannee auttaa.
Toivottavasti selvensi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.