Assembler

apropos zeitkritisch und hardwarenah: IDsoft hat, sowit ich weiß die Quake-Softwareengine vollständig in asm gecodet. hat den vorteil, keiner kann den quellcode klaun, weil den sowiso jeder hat(siehe Disassembler) aber (fast) kein schwein den versteht.
 
nun ich persönlich hab assembler immer für relativ schwer gehalten.. nun da ich mich selbst mal hingesetzt hab und es gelernt hab, weiß ich das es nicht so schwer ist wie es scheint...

die grundbegriffe von assembler sind in einer stunde leicht gelernt, da haste sogar noch einige zeit zum übern dabei...

das schwere jedoch an assembler ist, das du kenntnisse brauchst wie ein computer intern funktioniert, wenn du also sagst du willst eine variable von A nach B kopieren, so musst du wissen wie dein rechner das machen kann...
da kannst bei einem PC nicht 2x in einer anweisung auf den hauptspeicher zugreifen, im gegenteil es gibt nur wenige anweisungen die überhaupt zugriff haben...
entsprechen brauchst du nen zwischenspeicher.. die register (mini speicher die direkt auf der CPU sitzen)...

naja du kannst mit assembler so ziemlich alles machen, nur sagst du dann eben nicht du stehst jetzt auf und hohlst dir ne tasse tee, sondern du fängst an deinem fuß zu sagen er soll sich bewegen...irgendwann dann sagst du mal zu willst zucker, also hohlst zu den zucker vom regal, stellst ihn auf dem tisch ab, nimmst einen löffel.... ja..

auf jedenfall ist assebler im großen und ganzen zwar nicht schwer, aber umständlich.. viel schreibarbeit...

aber wenn du assembler richtig beherscht kann es ein segen für einen programmierer sein (ich spreche aus erfahrung..), nimm z.B. eine convertier routine für ASCII nach UTF-8, du musst so viele bits durch die gegend schieben und so viele typecasts machen in C++ das du in assembler mit 10% an arbeit auskommst, (und schneller ists auch noch ;-))

naja für alle die lieber komplette anwendungen in ASM schreiben wie mal ein kleines beispiel...
Code:
bits 32
%include "win32n.inc"
EXTERN ExitProcess
IMPORT ExitProcess kernel32.dll
Extern MessageBoxA
Import MessageBoxA user32.dll
segment .data USE32  
ErrorCode dd 0
MSGBtitel    db "LOL, nice message",0
MSGBInhalt db "Tolle Nachricht, was ?",0
segment .code USE32
..start
push dword MB_OK
push dword MSGBtitel
push dword MSGBInhalt
push dword 0
call [MessageBoxA]
push dword ErrorCode
call [ExitProcess]

hierbei handelt es sich tatsächlich um ein volständiges windows programm, das man mit NASM kompilieren und mit ALINK auch linken kann... die win32asm.inc ist ne include datei die du für windows programmierung benutzt, da werden macros und so weiter definiert (IMPORT z.B.)

nun ich will euch nich endlos langweilen, also häng ich das file mal als kompiliertes (gezipte exe) an... die dateigröße von 2.5kb ergibt sich dadurch das der linker noch die winapi libs dazu linken musste damit es funktioniert, das eigendliche object file hat nur 325byte
 

Anhänge

  • hallo.zip
    479 Bytes · Aufrufe: 36
apropos zeitkritisch und hardwarenah: IDsoft hat, sowit ich weiß die Quake-Softwareengine vollständig in asm gecodet. hat den vorteil, keiner kann den quellcode klaun, weil den sowiso jeder hat(siehe Disassembler) aber (fast) kein schwein den versteht.
Also die Quake2 Engine ist in C programmiert. Evtl. sind einige "Zeitkritische" Abschnitte in Assembler also sog. inline-Funktionen programmiert.
Wie es bei Quake3 oder Quake4 (aka Doom3) aussieht weiss ich nicht, da bekomm ich den Quellcode nicht von ID-Soft. :) :) :)

P.S. der Quellcode zur Quake2-Engine ist völlig legal im Internet verfügbar.

Gruss Homer
 

Neue Beiträge

Zurück