Miten win32asm eroaa tavallisesta assemblystä. Muuttuvatko rekisterit,käskyt,osoitteet jne. ja miten?
"Tavallinen assembler" käsitettä ei oikeastaan olekaan. On olemassa monenmonta konekieltä, onhan prosessorejakin vaikka minkälaisia.
Win32Asm tarkoittaa käytännössä sitä, että ohjelmoidaan Windows -sovelluksia käyttäen (useimmiten) Win32API:a ja x86-konekieltä. Assembleri ja linkkeri pistetään sylkemään PE-sovelluksia.
Eli vastaus kysymykseesi: ei eroa.
Mutta, tietty et voi käyttää mitään DOS:in keskeytyspalveluja (et muitakaan keskeytyksiä) kun Wintoosaa -koodaat (ring3). Windowsia ajetaan lisäksi suojatussa tilassa.. että segmenttihäslingeistä yms. ei myöskään tarvitse välittää.
Bleh, jos jokin on epäselvää kysy pois..
No niinpä...oonkin tähän mennessä lähinnä koodannut debugilla dosille com ohjelmia(todella yksinkertaisia).
Muutamia kysymyksiä ois:
Mitä ovat eax ja esi? Onko eax jokin ax:n korvaaja. Sitten tulis varmaan ebx jne...?
Mitä tekee call ja invoke?
Invokea käytetään näköjään ainakin MASM:lla ohjelmoidessa.
eax, ebx, ecx ja edx ovat ax:n, bx:n, cx:n ja dx:n 32-bittisiä "jatkeita".
Varmaan tiedätkin että ax:aan kuuluu ah ja al, bx:ään bh ja bl jne. Eax:iin kuuluu ax (alempi sana) ja sen lisäksi 16 bittiä joita ei voi suoraan sorkkia.. tai voi, eax:in kautta, mutta niitä ei ole eroteltu ah ja al-tyyliin.
esi ja edi ovat si ja di rekistereiden 32-bittisiä jatkeita.
call kutsuu aliohjelmaa, eli käytännössä tunkee paluuosoitteen pinoon ja hyppää aliohjelmaan.
invoke on masm-makro, jolla helpotetaan aliohjelmien kutsumista. Kun funktiot määritellään PROTO:n avulla, voidaan niiden parametrit tunkea kätevästi.. kääntäjä sitten laajentaa tuon pusheiksi ja calliksi. Parametrejä funktiolle syötetään siis useimmiten push:in avulla (tunkee pinoon dataa).
Invoke on näppärä juuri win32Api:n funktioita kutsuttaessa.
Anteeksi.. tuli hieman sekavaa tekstiä.. ;-)
Joo, no ehkäpä se tästä... Pitääkin lähteä hakemaan joku hyvä win32asm tutoriaali, että oppisi jotain noiden käytöstäkin ;)
Aihe on jo aika vanha, joten et voi enää vastata siihen.