Ich möchte versuchen, ein Betriebssystem in der Montage zu schreiben. BITTE sag nicht einfach "Idiot, du musst viel besser bei% s,% s,% s,% s usw. sein, um überhaupt darüber nachzudenken." Ich weiß, dass es normalerweise keine Learning-by-Doing-Sache ist und es wird Monate dauern, aber ich möchte versuchen, und wenn ich hier keine Antwort bekomme, frage ich einfach woanders. Könnten Sie bitte entweder mich zu einem Einstiegs-Tutorial mit Nasm verbinden, oder einen Weg, um in Assembly auf den Bildschirm zu schreiben, ohne C-Funktionen zu benutzen? Ich kenne so ziemlich alle Hauptbauanweisungen und habe lange kodiert. Edit: Ich möchte nasm und win32Reine Baugruppe - keine verknüpften C-Funktionen
Antwort
Die einzige Möglichkeit, es ohne C-Funktionen oder Systemaufrufe zu tun ist, Ihren Assemblercode ohne ein anderes Betriebssystem ausführen oder in einem Emulator wie Bochs oder QEMU ausgeführt werden.
Here ist ein einfaches Tutorial für Nasm, das auf den Bildschirm schreibt und nicht C-Funktionen verwendet, und auf dieser Ebene ist nicht abhängig von Win32. Wenn Sie etwas schreiben wollen, das solche Dinge macht, während Sie in Windows laufen, dann habe ich Angst, dass die C-Funktion der einzige Weg ist, es sei denn, Sie können eine Software-Interrupt-Schnittstelle dafür lernen.
Nebenbei, osdev.org enthält viele gute Artikel und Tutorials, darunter viele zum Schreiben von Code in Assembly, für viele verschiedene Aspekte der Betriebssystementwicklung.
Neben den anderen ausgezeichneten Vorschläge oben, da ist ein NASM Forum (und Sie können aktuelle Versionen von NASM und das freundliche Handbuch erhalten) an:
Es mag seltsam erscheinen, dass die „Netwide“ Assembler hat einen Ländercode auf seiner Homepage. Denken Sie nicht an "Vereinigte Staaten", denken Sie daran als "Wie, Näsm uns, Alter!" :)
Da BIOS-Interrupts nicht verfügbar sind, sobald Sie zu Pmode wechseln, macht es Sinn zu lernen, wie Sie direkt auf Hardware zugreifen. Schreiben auf den Bildschirm ist ein einfacher Anfang. Sie müssen wissen, dass "der Bildschirm" normalerweise bei 0xB800000 liegt (B800: 0000 im Segment: Offset-Formular - was Sie wahrscheinlich benötigen). Sie müssen wissen, dass das Layout ein (geradzahliges) Byte für das Zeichen und ein (ungeradzahliges) Byte für das "Attribut" (meist Farbe) ist. Obwohl Sie keine Interrupts verwenden, enthält RBIL auch "ports.lst", die Sie möglicherweise hilfreich finden. Wie bereits erwähnt, ist osdev.org Ihr neuer bester Freund!
Glücklich Bootin',
Frank
zu zitieren Nick Morgan, mit denen ich einverstanden:
Nun, ich glaube nicht, das Lernen x86 nützlich ist. Ich glaube nicht, dass du jemals Assemblersprache in deinem Job schreiben musst - dieser [lernende Assembler] ist eine rein akademische Übung, etwas, um deinen Verstand und dein Denken zu erweitern. 6502 [eine Assemblersprache] wurde in einem anderen Zeitalter geschrieben, in einer Zeit, in der die Mehrheit der Entwickler Assembly direkt geschrieben hat, anstatt in diesen neuartigen High-Level-Programmiersprachen. Also wurde es entworfen, um von Menschen geschrieben zu werden. Modernere Assemblersprachen sollen von Compilern geschrieben werden, also überlassen wir es ihnen. Plus, 6502 macht Spaß. Niemand hat jemals x86-Spaß genannt.
ich zur Zeit auch ein „Betriebssystem“ für Spaß, in den DCPU-16 assembly language Schreiben (Sie davon haben könnten gehört). Es macht Spaß, weil ich eine der vielen verfügbaren "IDEs" im Browser verwenden kann, wie zum Beispiel this one, und ich denke, dass die gleichen Prinzipien gelten, die Sie für die x86-Assembly benötigen.
Aber x86 wurde auch in der Zeit entworfen, als die Leute Assembly von Hand schreiben, nur 3 Jahre nach dem 6502. – harold
Ja, ich denke, was er versucht zu sagen, dass es im Laufe der Jahre zu etwas entwickelt hat, das nicht mehr von Hand geschrieben werden soll :) – fresskoma
Nun, das ist ein gültigerer Punkt, würde ich sagen begann mit der PPro, aber IMO, die nicht mehr wahr war, als SSE mit der P3 eingeführt wurde - nach mehr als einem Jahrzehnt habe ich noch einen Compiler zu sehen, der ihn regelmäßig und nicht nur zufällig nutzt . – harold
Wenn Sie Win32 sind tageting, gibt es klassische Win32 Assembly Tutorials von Iczelion: http://win32assembly.online.fr/tutorials.html
www.codeproject.com Suche Versuchen Ich erinnere mich, einmal habe ich einen guten Artikel über das Schreiben eines Bootloader lesen. – valdo
http://wiki.osdev.org/Printing_to_Screen – cnicutar
oder mit dem BIOS http://wiki.osdev.org/BIOS#BIOS_functions –