Olen harjoitellut ASMia irrallisen testilaitteiston kanssa, mutta nyt kun haluaisin kokeilla ASM koodaamista tietokoneella törmäsin ongelmaan; miten saan käännettyä ASM koodini Linux käyttöjärjestelmässä (Fedora Core 4). Onnistuuko se GCC:llä?
Linuxista yleensä löytyy as. Vaihtoehtoisesti voit ladata NASMin tai jonkin muun. Varmaankin löytyy pakettienhallinnasta useampikin. Pitää muistaa, että NASM käyttää hieman eri syntaksia kuin monet muut.
Myös gcc:llä voi kääntää, nimittäin inline-asmia. Se ei ole ollenkaan huodo idea. Toinen aika kiva idea on kääntää asminsa vaikka NASMilla levyke-imageen ja käyttää jotakin PC-emulaattoria kokeiluissaan. Silloin pääsee käsiksi koko virtuaalilaitteistoon.
Oliskos mitään esimerkkiä tuosta gcc:llä kääntämisestä?
http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
Se on tosiaan inline-asmia, sitä ei ole tarkoitus käyttää paria riviä enempää.
Vielä semmoista että nyt olen tuolla GASilla yrittänyt tehdä mitä tahansa niin aina valittaa joka komennosta
esim. mov al, 01h
{standard input}:1: Error: too many memory references for `mov'
Mikä vikana?
Kuten sanoin: "Pitää muistaa, että NASM käyttää hieman eri syntaksia kuin monet muut." Ne monet muut käyttävät AT&T-syntaksia.
Kirjoittamalla Googleen GAS Assembler löytyy mm. tällainen sivu: http://en.wikibooks.org/wiki/X86_Assembly/
Syntaksia pääsee vilkaisemaan tekemällä C:llä pienen ohjelman ja kääntämällä sen gcc:llä parametrilla -S, jolloin tuloksena on ASM-koodia.
Edelleenkin suosittelen NASMia.
Juu kokeilin jo tota mutta samaa se valittaa.
EDIT: Noniin suurkiitokset Metabolix
Kokeilit mitä? Laitapa tuo ensimmäinen rivi näkyviin.
Kokeilin siis eri syntakseja mutta nyt pelittää. Kiitos
Metabolix kirjoitti:
Kuten sanoin: "Pitää muistaa, että NASM käyttää hieman eri syntaksia kuin monet muut." Ne monet muut käyttävät AT&T-syntaksia.
Sanottakoon vielä, että NASMin syntaksissa on pari merkittävää eroa jopa useisiin Intel-syntaksia käyttäviin assemblereihin verrattuna (mm. suositut Borlandin TASM ja Microsoftin MASM). Tämä on hyvä tietää jos meinaa käyttää webin koodiesimerkkejä hyväkseen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.