Mietin tossa vaan, että voiko assemblyllä ja C++:salla tehyjä ohjelmia ajaa ilman mitään erikoistapauksia, esim. kone kaatuu tai ram -muisti sotkeentuu.
käytän assemblyä C++:sassta näin:
_asm { ;koodi esim. mov ah, 09h lea dx, "Moikatimoi!!!" int 21h ;tulosta merkkijono }
Jos tiedot ovat tuolla tasolla, ohjelman kaatuminen on hyvin todennäköistä. (Esim. tuo koodi näyttää epäilyttävästi 16-bittiselle MS-DOSille tarkoitetulta.) Käyttöjärjestelmät onneksi tehdään nykyään niin, että tavallinen ohjelma ei voi niitä kaataa, ellei käyttiksessä itsessään ole bugia. Aiemmin, kun ohjelmat vielä toimivat reaalitilassa, oli toki mahdollista vaikka tyhjentää levy ja sammuttaa kone.
Eli voi ajaa, mutta järjetöntä osaksi tommonen.
Sitten jos sen exen ajaa niin tulee joku ihme virhe. Yritin merkkijonon tulostusta BIOS -palvelulla.
Se johtuu siitä, että käyttöjärjestelmät suoritetaan nykyään 32bit suojatussa tilassa, josta ei pääse käsiksi 16bit reaalitilan BIOS palveluihin.
Ja koneeni on 64-bit. Mites noita palveluita voi käyttää? Pitääkö itse käydä käsiksi näyttömuistiin?
Miksi sotkea assemblyä tuohon, jos tarkoituksena on vain saada tekstiä näytölle? C:n standardi kirjasto hoitaa tuon homman paljon paremmin ja joustavammin.
Haluan vain tehdä jotain assemblyllä. Ja nyt jo meinasin saada textiä näytölle, kun päätin vaihtaa koodin näin:
_asm { mov ax, 0B800h mov es, ax xor di,di mov ah, 1Eh mov al, 69 mov cx, 10 cld rep stosw }
ja sitten yritin ajaa exeä yhteensopivuustilassa. Sitten tuli käyttäjätilien valvonnan sanoma ja en suorittanutkaan sitä.
Kannataako tuota ajaa?
Noh, Windows-ohjelmointi assemblyllä on mahdollista. Et kylläkään näytä ymmärtävän aiheesta yhtään mitään. MASMille suunnatut Iczelionin oppaat ovat hyviä.
Tässä yksi (ei julkaistu) yksinkertainen assembly-koodivinkki joka toimii uusissakin Windowseissa: XOR-kryptaus makroilla (FASM)
Siistiä!
Muuten, onkohan 64bit koneissa 32/64bit BIOSit? Sillonhan periaatteessa jos siirtäis koneen assemlyllä reaalitilaan (tai boottais koneen CD:ltä) niin vois noita käyttää!!!
Ei ole 32/64bit BIOS:ia, mutta et sillä 16bit tilassa juuri mitään tekisikään.
On kyllä erittäin kummallista, että tämä on totta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.