Assembler und seine Stärken
-
es stimmt zwar, dass es heute kaum sinn macht assembler einzusetzen, nicht aber weil die compiler so gut sind (im gegenteil, die generieren sehr oft schlechten code und hängen sehr davon ab was man reinfüttert), sondern weil es zu zeitaufwendig ist. je nachdem was man als "normale programme" ansieht, macht es öfter sogar keinen "Sinn" c++ einzusetzen und man sollte dann irgendwas wie java/c#/VB nehmen, weil die sprachen speziel dafür gemacht sind (heutige 2-3GHz rechner sind eben auch schnell genug;) ).
Zwingend benutzen muss man assembler nur in sehr spezialisierten dingen. manchmal schreibt man Shader in assembler, manchmal spezielle algorithmen bei denen jede % an leistungssteigerung wichtig ist (z.b. flüssigkeitssimulationen,raytracing). zum programmieren von betriebssystemen ist assembler nur an sehr wenigen stellen nötig, meist ist eher das wissen über hardware(architektur) wichtig.
und mit "muss man alles selber machen" meint man die grundlegenden dinge anderer sprachen z.b. aufrufe, virtuelle funktionen, objektorientierung, speicherverwaltung usw. wenn man mit all diesem aufwand einen taschenrechner programmieren möchte, braucht man ein paar wochen denk ich mir (wenn man keine tollen zusatzlibs verwendet), deswegen macht man das in einer interpretierten sprache die von haus aus alle nötigen libs hat und man sich wirklich nur um das nötigste kümmert.
-
Hoi,
Erstmal Danke für die Antowrten.
Ich habe mich mal etwas weiter im Netz über Assembler kundig gemacht und
habe rausgefunde, dass er sehr viel bei Robotorn usw eingesetzt wird.
Mich interessiert dabei aber weniger das zusammebasteln, sonder eg nur die
Programmierung der Dinger. Aber ein paar Fragen habe ich noch vorher.1)Ich habe viel gelesen und rausgefunden, dass man bei ES und Roboter auch oft ein spezielles C verwendet. Nun ist meine Frage sind das so die einzigen "großen" Sprachen dabei, oder gibt es haufenweise Sprachen, mit denen jedes Drecks-Blag nach 5 Min ein funktionsfähiges System hat?
2)Kennt ihr ein paar Foren, die sich speziel mit diesen Themen beschäftigen?
Ich meine ein paar spezielle und nicht soetwas wie "Wer weiß was" oder so.Zu guter letzt bräuchte ich noch einen Rat.
Seit ich angefangen habe zu programmeiren(vor ca. 6 Jahren)
möchte ich immer besser werden und immer mehr alleine machen.
Dadran ist eg nichts verwerfliches, aber bei mir geht es soweit, dass ich immer eine Stufe tiefer gehe.von Basic auf C++ mit Ogre
von C++ mit Ogre auf C++ mit OpenGL
dann war es soweit, dass ich meine eigene API schreiben wollte.
Das habe ich aber erstmal aufs Eis gelegt und wollte stattdessen mein eigenes OS + eigene Programmiersprache machen.
Doch dies ist ja mehr oder weniger Sinnlos, denn man muss das Rad ja nicht zum x-ten mal neu erfinden.
Nun ist meine Frage.
Könnte mir bitte ein erfahrenen Programmierer mehr oder weniger sagen was ich so machen könnte, denn teils ist es richtig Schade.
Zum Beispiel hatte ich mit C++ und OpenGl eine kleine Engine fertig, konnte sie aber nicht an einem Spiel testen, da ich ja unbedingt mit Assembler anfangen wollte.
Es ist schwer zu erklären, aber ich hoffe wenigstens einer versteht undgefähr was ich meine.
Ich glaube ich bin größenwahnsinnig, aber das schlimme dadran ist, da ich ein unglaublicher Dickkopf bin höre ich nicht auf bis ich es kann.
So habe ich z.B. 5 Tage lang nur die SDL Funktionen + Strukturen auswendiggelernt.
Aber deshalb fange ich immer nach ein gewissen Zeit etwas neues an und bekomme so fast nie etwas fertig.Ich würde mich über einen guten Rat sehr freuen.
mfg Nock
-
Nock schrieb:
2)Kennt ihr ein paar Foren, die sich speziel mit diesen Themen beschäftigen?
guckst du: http://www.roboternetz.de/phpBB2/
-
Eine weitere kleine Frage noch.
Warum erstellt eigentlich jedes Assemblerprogramm ne Console?
Selbst wenn ich einfach nur schreibe.MODEL small .Stack 100h .Data .Code Start: END Start
wird beim ausführen ne Konsole geöffnet.
Meine einzige Erklärung wäre, dass Windows automatisch eine erstellt.mfg
-
Nock schrieb:
Meine einzige Erklärung wäre, dass Windows automatisch eine erstellt.
so ist es. dein linker erzeugt eine 'console application' und dafür macht win bei jedem start eine konsolenbox auf.
-
Gibt es auch ne Möglichkeit, dass der Linker keine Console öffnet??
Es soll aber auch keine Win32 Anwendung werden, oder kann ich sie dann nicht
mehr unter Windows starten?
-
Nock schrieb:
Aber deshalb fange ich immer nach ein gewissen Zeit etwas neues an und bekomme so fast nie etwas fertig.
Ich würde mich über einen guten Rat sehr freuen.
mfg NockHallo Nock,
ja ich kenne diesen Wissensdurst auch. Ich habe früher auf dem C64 mit SimonsBasic angefangen, dann später auf dem Amiga mit dem SEKA Assembler Intros geschrieben und bin dann irgendwann beim PC gelandet. Habe mich dann sehr lange um Grafik gekümmert bis ich dann mal eine Job als Webentwickler bekam und dort beruflich in PHP programmieren musste. Jetzt machen ich grad den Admin an einer Grundschule und vor ein paar Wochen habe ich dann mal wieder Lust bekommen mich mit der Programmierung auseinander zu setzen.
Mit JAVA habe ich angefangen und habe so die üblichen Sachen mit der Konsole und per GUI ausprobiert. Habe in den Foren über JAVA selbstverständlich viel Geläster über C++ gehört(Speicherlecks etc..) und mir gedacht das schauste dir mal genauer an und seit dem habe ich kein Eclipse mehr an gehabt und nur noch Infos über C++ gesammelt, gelesen und probiert. So wie es ausschaut bleibe ich erstmal schwerpunkmäßig bei C++, denn als Ziel habe ich mal kleine 2D/3D Spiele zu schreiben. Aber ich weiss das man erst mal klein anfängt, ansonsten ist man schnell überfordert und verliert die Lust.
Wollte Dir nur schreiben, dass es noch mehr Leute gibt die am liebsten alles machen würden und am liebsten sofort. Ich habe da auch noch viel im Hinterkopf halbwegs richtiges OOP, STL, Boost, Entwurfsmuster, WinAPI, wxWidgets, SDL, OpenGL.
*grins damit bin ich erstmal eine ganze Weile beschäftigt...Gruß Chris
-
Um zu verhindern das eine Konsole geöffnet wird wirst du wohl die File-Kennung ändern müssen.
Nach meinem Wissen ist diese standartmässig "MZ".
Du must sie mindestens auf "MZE" ändern.(Der File sollte dann auch den richtigen Aufbau haben)
Google mal unter "FileType" bzw "MZE"
-
Hoi,
Noch mal eine ganz andere Frage.
VGA und VESA sind doch Grafikstandarts, die von fast jeder Grafikkarte unterstüzt werden?Wenn ja, rendern OGL und DX die Frames dann in die Buffer von VESA, oder sind OGL und DX andere eigene Standarts?
mfg Nock
-
VESA ist im Grunde einfach nur ein Interface, um Grafikmodi zu setzen, und Zugriff auf den Grafikspeicher zu bekommen.
Wenn du also mit "die Buffer von VESA" den Grafikspeicher meinst, wird 3D-gerenderte Grafik frueher oder spaeter wohl auch dort landen, ja.
-
Ich denke mal DirectX/OpenGL rendern direkt in den Bildschirm rein.
-
Und noch eine kleine Frage.
Ist es normal, dass der TASM 3.2 das Symbol OFFSET nicht kennt?
Und wie komme ich ohne dieses Symbol an die Offset-Addresse.mfg Nock
-
Und noch eine kleine Frage zum VGA Modus.
Ich habe folgendes simples Programm geschrieben, aber es erzielt nicht den gewünschten Effekt. Es soll einen farbigen Punkt bei 0,0 alo oben links malen..MODEL small ;exe .STACK 100h ;256 Byte .DATA ;Daten .CODE ;Code Start: mov al,13h ;al=13h int 10h ;in den VGA Modus schalten mov ax,0A000h mov es,ax ;Anfang des VGA Segmentes nach es mov ax,0h ;ax=0 mov [es:ax],30h; Punkt mit der Farbe 30h nach [es:ax] also 0A000h:0h malen ... Start END
Aber der Punkt ist in der Mitte des Bildschirms und ich kann mir nicht erklären warum.
-
Praktisch duerfte der Code, den du gepostet hast, gar nicht lauffaehig sein.
1. Du kannst nicht unbedingt davon ausgehen, dass ah beim Programmstart 0 ist.
2. Mit ax kann nicht adressiert werden.
3. "mov [es:ax],30h" enthaelt keine Aussage ueber die Groesse des 2. Operanden und sollte sich so nicht verarbeiten lassen.==> So kann ich dir auch nicht sagen, warum der Punkt auf der Mitte des Schirms gezeichnet wird.
-
Vielen Dank,
hatte "byte ptr" vergessen....
Aber wenn ich mit ax addresiere funktioniert es trotzdem.
Keine Ahnung warum
-
net schrieb:
heutige compiler sind so gut, dass es in 'normalen programmen' kaum noch sinn macht asm einzusetzen...und das hat nix mit der geschwindigkeit des prozessors zu tun.
Dem möchte ich mich uneingeschränkt anschliessen.
Selber verwende ich Assembler beispielsweise auf Architekturen ohne RAM; da mußt Du dann mit einigen wenigen Prozessor-Registern aukommmen. Für diese Architekturen gibt es "normalerweise" auch gar keine C-Compiler.
Auch verwende ich Assembler, wo es auf geringen Stromverbrauch ankommt (bei mir ist das fast immer der Fall). Klar, die meiste Zeit verbringt der Prozessor eh damit, nichts zu tun. In dieser Zeit ist der Prozessor aber in einen stromsparenden Modus geschaltet (und wenn es nur IDLE ist). Wenn ich diese Zeit (in einem Sekunden-Interval) um eine Mikro-Sukunde verlängern kann, geht mir mir einer ab. Ultra-Low Power Anwendungen lassen sich in Assembler dann doch wesentlich feiner steuern. Das kann natürlich auch nur persönliche Spinnerei sein, aber mir geht das so.