Assembler und seine Stärken
-
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.