30 | 05 | 2017
Hauptmenü
Anmelden



Wer ist Online
Wir haben 11 Gäste online
Suchen
Assembler und X-Programmierung PDF Drucken E-Mail
Geschrieben von: Administrator   
Freitag, den 06. Februar 2009 um 09:40 Uhr

Assembler und X-Programmierung

Copyright: Entspricht soweit der GNU-Lizenzen. Ausnahme: Wenn Ihr Teile aus dieser Datei und/oder von den Anhängen benutzt, müsst Ihr einen Link auf www.satyria.de in Euren Projekten hinterlassen und verpflichtet diejenigen die Euer Projekt in Teilen oder Insgesamt kopieren, zu diesem Copyright.

Vorwort

Linux ist ein sehr interessantes Betriebssystem. Es ist immer noch stark in der Entwicklung, aber ich selbst sehe darin ein hohes Potential. Es müsste bei der Installation noch so einiges getan werden. Ich selbst hatte so einige Probleme mit meiner Soundkarte, meinen Zusatzlaufwerken auf einem Promise- Kontroller und meiner ISDN-Karte.
Zu mir selbst:
Auf einem VC-20 von Comodore machte ich meine ersten Schritte. In meinem Bekanntenkreis gab es niemanden, der diese Maschine hatte. Dadurch musste ich mich selbst darum kümmern, etwas sinnvolles damit anzustellen. Meine ersten Programmierkenntnisse errang ich auf diesem Computer in BASIC und später kam dann noch Assembler hinzu. Als dann der Amiga auf den Markt kam, wollte ich einen solchen sofort haben. Auch hier gab es das Problem der Softwarebeschaffung, auch hier musste ich mich stark mit dieser Maschine aussetzen. Zunächst Basic, dann „C“ und anschließend Assembler. Besonders interessant war hier mein Projekt eines Compilers. Er war fast fertig gestellt, als dann der Amiga aus der Produktion genommen wurde. Seitdem ist der 386-PC mein Domizil.
Ich selbst benutze den Assembler "GAS", der bei jeder Standard-Distribution mit installiert wird. Der Assembler ist ein Teil des C-Compilers "GCC". Die Syntax der einzelnen Befehlen entspricht den der AT&T-Syntax und nicht der INTEL-Norm!!

In diesem Kurs wird nicht die Grundlage der Assemblerprogrammierung beschrieben. Dazu gibt es genügend Informationen im Internet oder im Buchhandel.

In diesem Tutor werde ich versuchen mit Assembler das X-Windows zu programmieren. Dieser Kurs entstand Zeitgleich mit TuxCom, da dort die grundlegende Programmierung des X-Windows notwendig ist.

Alle Programme, die ich hier vorstelle, müssten auf allen Windowsmanagern laufen. Getestet habe ich sie auf KDE und Gnome.

Das erste Programm

Zunächst ein kleines Programm, welches einfach nur ein Fenster öffnet. Durch anklicken in den Fensterbereich wird das Fenster geschlossen und das Programm beendet.

Hier nun das erste Beispiel:
    .extern XOpenDisplay
    .extern XCreateWindow
    .extern XMapWindow
    .extern XNextEvent
    .extern exit

.globl main

main:
    pushl    %ebp
    movl    %esp, %ebp
   
    pushl    $0
    call    XOpenDisplay
    addl    $4, %esp
    movl    %eax, dpy

    movl    $2048, value_mask
    movl    $4, win_attr+40
    pushl    $win_attr
    pushl    value_mask
    pushl    $0
    pushl    $0
    pushl    $0
    pushl    $4
    pushl    $100
    pushl    $100
    pushl    $0
    pushl    $0
   
    movl    dpy, %ecx
    movl    dpy, %eax
    movl    132(%eax), %edx
    movl    %edx, %eax
    sall    $2, %eax
    addl    %edx, %eax
    movl    %eax, %edx
    sall    $4, %edx
    movl    140(%ecx), %eax
    pushl    8(%eax,%edx)
    pushl    dpy
    call    XCreateWindow
    addl    $48, %esp
    movl    %eax, win
   
    pushl    win
    pushl    dpy
    call    XMapWindow
    addl    $8, %esp
.L2:
    pushl    $event
    pushl    dpy
    call    XNextEvent
    addl    $8, %esp

    movl    event, %eax
    cmpl    $4, %eax
    je    .L7
    jmp    .L2
.L7:
    pushl    $0
    call    exit
.Lfe1:
    .comm    dpy,4,4
    .comm    win,4,4
    .comm    value_mask,4,4
    .comm    win_attr,60,64
    .comm    event,20,4   

Kompiliert wird es so:
gcc mini_prog.s -L/usr/X11/lib -lX11 -o mini_prog
 
Der Parameter "-L/usr/X11/lib " kann von der Distribution (hier Slackware oder LRs) abhängig sein. Sie gibt an, an welcher Stelle die X11 Libarys stehen. Ich werde versuchen die einzelnen Ditributionen im Anhang zu dokumentieren.

Das Programm kann nun einfach in einem Windowmanager (getestet in KDE und Gnome), gestartet werden. Wurde die Konsole aus einem Window-Manager gestartet, kann das Programm mit "./mini_prog" ausgeführt werden. Diese Art des Ausführens, hat den Vorteil, dass Fehlermeldungen direkt in der Konsole angezeigt werden.

Das Programm öffnet nur ein kleines Window, welches von Grund her aussieht, wie es der Windowmanager vorgibt. Da es keine Refrash-Funktion gibt, sieht es aus als ob das Fenster keinen Hintergrund besitzt. Die Funktionen Fenstervergrößern, Iconifizieren und Beenden funktionieren! Wird auf der Fensteroberfläche die linke Taste der Maus gedrückt (die einzige Abfrage!) wird das Programm beendet.