Autor Thema: Assembler in VC++  (Gelesen 3794 mal)

BigBoesche

  • Beiträge: 15
    • Profil anzeigen
Gespeichert
« am: 04. October 2010, 14:41 »
Ich habe volgendes Problem
ich schreibe "int 10h" und der Compliner sagt :
Unbehandelte Ausnahme bei 0x003a13aa in Asm2.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xffffffff.

was mach in falsch.
ps. Ich bebutze Inline Assembler und nomale befehle wie mov funktionieren

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 04. October 2010, 16:25 »
Nochmal langsam...

Du schreibst einen Real-Mode-Kernel in VC++. Du benutzt int 10h und wenn du das Ding kompilieren (nicht ausführen) willst, dann fliegt dir der Compiler um die Ohren? Klingt für mich ehrlichgesagt unwahrscheinlich.

Du versuchst nicht zufällig, den Code unter Windows auszuführen?
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

BigBoesche

  • Beiträge: 15
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 04. October 2010, 17:51 »
Ja is richtig. Aber ich versuch kein kernel ich versuche grad mehr die Routine hin zu basteln und zu verstehen. Ich mache das grad erst in Windows und versuche so eine cout funktion selbst zu machen das geht aber nicht.

DerHartmut

  • Beiträge: 236
    • Profil anzeigen
    • Mein Blog
Gespeichert
« Antwort #3 am: 04. October 2010, 18:02 »
Richtig, denn Interrupts sind dir nicht erlaubt.

Du willst scheinbar eine cout-Funktion (genauer: Eine Funktion, die einen String auf dem Bildschirm ausgibt) in Assembler nachprogrammieren (für eigenes Verständnis?).

Ich persönlich möchte dich ehrlich gesagt in solchen Fragen auf einschlägige Assembler-Foren bzw. Seiten verweisen, da wir hier an und für sich keine Assembler-Schule sind und auch sonst von der Verwendung von Assembler bei trivialen Dingen wie der String-Ausgabe abraten (denn wofür gibt's die Hochsprachen? ;)).

Nichtsdestotrotz: Lad' dir NASM herunter und editiere dein Programm mit einem Editor wie Notepad++. Finde dann heraus, wie es dir unter NASM möglich ist, 16-Bit-Code zu erstellen und wie du diesen unter Windows ausgibst.

Das Googeln sei dir als Hausaufgabe dagelassen ;-)
$_="krJhruaesrltre c a cnp,ohet";$_.=$1,print$2while s/(..)(.)//;
Nutze die Macht, nutze Perl ;-)

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 04. October 2010, 18:04 »
Wie kommst du auf die Idee, du könntest unter Windows int 10h benutzen?

int 10h ist eine BIOS-Routine, aber nachdem du den Code unter Windows laufen lässt, hat Windows selbstverständlich seine eigenen Interrupthandler aufgesetzt. Ein Windows-Programm muss Windows-Syscalls benutzen, um etwas zu erreichen. Zum andere würde BIOS-Code, selbst wenn er noch erreichbar wäre, nur im Real Mode laufen, aber Windows läuft entweder im Protected oder im Long Mode.

Edit: Was Hartmut dir vorschlägt, ist im Grunde, ein DOS-Programm zu schreiben. Das sollte gehen, weil DOS im Real Mode lief und man BIOS-Interrupts benutzen konnte, und Windows dann eine entsprechende Umgebung emulieren muss.
« Letzte Änderung: 04. October 2010, 18:05 von taljeth »
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

BigBoesche

  • Beiträge: 15
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 04. October 2010, 18:29 »
 :-D ok danke hat mir sehr geholfen, ist es möglich mit VC++ ein betriebssystem zu schreiben mit inline assembler ? :? , oder bin auf den Holzweg

Programm Noob

  • Gast
Gespeichert
« Antwort #6 am: 04. October 2010, 18:44 »
Ja aber es macht glaube ich keiner. als Editor kannst du das gerne benutzen aber da würde ich dir auch zu Notepad++ raten. nimm den Cross compiler aus dem Wiki.

PNoob

BigBoesche

  • Beiträge: 15
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 04. October 2010, 18:53 »
Welcher Crosscompliner ist das. Kann mir jemand mal einen Link vielleicht schicken ich find den nicht :?

Programm Noob

  • Gast
Gespeichert
« Antwort #8 am: 04. October 2010, 19:10 »
http://www.lowlevel.eu/wiki/Crosscompiler_f%C3%BCr_Windows#Download
Dort gleich den ersten Link.
Wenn du Fragen oder Probleme mit dem Compiler hast, kannst du dich gerne in #LOST @ irc.euirc.net oder hie rim Forum melden.

Außerdem heißt das Compiler nicht compliner. << Das soll jetzt bitte nicht so aufgefasst werden, wie PNoob ist der Oberlehrer.

PNoob
« Letzte Änderung: 04. October 2010, 19:23 von Programm Noob »

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 04. October 2010, 21:48 »
Außerdem solltest du ein Betriebssystem nicht am Inline-Assembler festmachen. Einerseits geht das auch ohne Assembler (ganz ohne wird allerdings doch wieder schwierig), andererseits musst (und solltest) du den Assemblercode auch nicht unbedingt inline schreiben.

Was den int 10h betrifft, so bringt Windows eigene Grafiktreiber mit, die den BIOS-Treiber kaputtmachen und die du nutzen solltest, wenn dein Programm unter Windows laufen soll. (Ist bei dir ja gerade nicht der Fall.)

Guck dir im Wiki mal das Tutorial an, wenn du ein Betriebssystem schreiben möchtest.

hrungaaz

  • Beiträge: 33
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 20. October 2010, 21:44 »
Ich würde nicht unbedingt VC++ nehmen...
Ich glaube nämlich, dass man damit gar kein OS schreiben kann. MS will sich ja nicht selbst ruinieren.
Die Inline-Assembler sind auch fürn Po.

Ich empfehle dir: Nimm wie schon erwähnt einen Crosscompiler.
Und als Editor kann ich dir nur Notepad++ empfehlen, ist meiner Meinung nach der beste Editor unter Windows.

Wenn du unter Windows arbeitest, kann es durchaus sein, dass du erstmal Stundenlang an deiner Entwicklungsumgebung rumschraubst. Zumindest war es bei mir so. Aber wenn du erstmal verstehst, wie die Zahnräder inneinander greifen, läuft es schon.
Außerdem bringt das ne Menge Erfahrung für dich ein.
Ums Makefiles selberschreiben kommst du früher oder später sowieso nicht rum.
Makefiles sind ein Thema für sich, deswegen, wenns Probleme gibt, oder du was nicht verstehst einfach mal den Link anklicken, wird dich zwar erstmal überrumpeln, aber das wirst du schon verstehen: http://www.ijon.de/comp/tutorials/makefile.html

Und als Tipp, halte dich am besten an die "OS-Dev für Einsteiger"-Reihe.
Viel Glück!

 

Einloggen