Seiten

Freitag, 29. April 2011

Hard und Software

Hard und Software

Heute möchte ich mich diesen beiden elementaren Bestandteilen widmen. Die klassische Antwort auf die Frage: " Was ist der Unterschied zwischen Hard und Software " lautet: " Hardware ist das, was man Anfassen kann, Software alles, was man eben nicht anfassen kann" selbstverständlich beziehe ich mich hier auf die Bestandteile eines Computers.

Die Hardware sind dabei die mechanischen oder elektronischen Bauteile der Maschine. Momentan wird fieberhaft daran gearbeitet die Quote an mechanischen Bauteilen so weit wie möglich zu senken.
Dabei fällt mir ein, dass das endgültige Ziel der Computerentwicklung sein wird, auch auf elektronsiche Bauteile zu verzichten.
Wie? Nun das steht noch in den Sternen, aber die Technologie, die hierzu in der lage sein wird und deren auftreten das Antlitz der Welt verändern wird ist das Quantum Computing. Ich muss mir merken auch darüber unbedingt noch einmal einen Blogeintrag zu machen.

Nun aber zurück zur konventionellen Computertechnologie.

Also, die Hardware ist der Teil des Computers, der das tut, was Ergebnisse liefert. Die Software ist die notwendige Information dafür.

Auf wikipedia steht der Satz: " Software ist im Voraus geleistete geistige Arbeit ". Formidabel. Genau so habe ich das auch immer empfunden. Bei der Entwicklung von Software überlegt man sich die Arbeitsschritte, die zur Bewältigung einer Aufgabe notwendig sind im vorraus, und versucht dann auf möglichst effiziente Weise der Maschine, die diese Arbeit tun soll zu erklären wie.
Eine KI wie bei Star Trek, der man sagen kann, was man getan haben möchte ( "Computer bitte spring aus dem Fenster") wäre dabei ein großer Fortschritt in sachen Programmentwicklung. Allerdings wäre eine Künstliche Intelligenz, die diese Vorgänge beherrschte wohl in der Lage selbst die Notwendigkeit von Programmen zu erkennen und diese zu schreiben.

Hier haben wir also noch ein Thema: Künstliche Intelligenz ( das mag ich am liebsten!?)

Dienstag, 26. April 2011

Assembler und Maschinensprache

Assembler und Maschinensprache

Teil 2

Gut. Um zu demonstrieren wie zäh die Abarbeitung von Maschinencode erscheint.

Hier ein Programm im Assembler von http://andremueller.gmxhome.de/intro.html#firstprog für den Befehlssatz des x86 Prozessors

TITLE Das erste Programm   ;Diese Zeile ist optional
IDEAL      ;IDEAL-Modus einschalten
MODEL SMALL     ;Speichermodell
STACK 100     ;100 Bytes für den Stack
DATASEG      ;Beginn des Datensegments
 derText db 'Das erste Programm$' ;1.
CODESEG      ;Beginn des Codesegmentes
start:                            ;2.
 STARTUPCODE
   mov ah, 009h                   ;3.
   mov dx, OFFSET derText         ;4.
   int 21h                        ;5.
 EXITCODE
END start                         ;6.
 
Nun noch die Erklärung der einzelnen Zeilen:
  1. Hier wird die Zeichenkette definiert, die ausgegeben werden soll
  2. Dies ist die Anfangsmarke für Code (s. auch weiter unten)
  3. In das Prozessorregister AH den Wert 9 schreiben
  4. Das Prozessorregister DX mit der Adresse des Ausgabestrings beschreiben
  5. Aufruf eines Interrupts;
  6. Die Endmarkierung für die Assemblierung; alles, was jetzt noch kommt, wird vom Assemblierer ignoriert
Wie man erkennen kann wird in jeder Anweisung haarklein erläutert, was derProzessor wann zu tun hat. Da immer nur ein Befehl auf einmal ausgeführt werden kann bemerkt man allerdings wieviel Planung und Kreativität erfordert wird. Werden Operationen häufig ausgeführt um einen Zweck zu erfüllen versucht man sie zu optimieren. Dies geschieht sowohl auf Programmebene als auch auf der Ebene der Prozessorarchitektur.

Das Knobelvergnügen daran war ( oder ist ) die Ressourcen so Optimal wie Möglich zu nutzen und durch einen Programmkniff einen Zyklus zu sparen, oder 2 oder 10. Andererseits erkennt man auf diesem Wege auch Fehler und Probleme in der Archikektur der Prozessors und seiner Befehle.

    Assembler und Maschinensprache

    Assembler und Maschinensprache 


    Teil 1

    Heute möchte ich mich mit dem beschäftigen, was sich die unbedarften von 30 bis 40 Jahren unter einem Computer, beziehungsweise der Arbeit damit vorgestellt haben. Assemblercode hat das erste Klischee der Computernerds geprägt. Hinter ihren grünen Bildschirmen Sitzend und kryptischen unverständlichen Kram lesend.

    Ich gebe zu, Assemblercode ist eine beleidigung für das Auge. Er ist dröge, schwer zu lesen und sogar wenn man sich ein wenig damit auskennt - ein einfacher wechsel des Befehlssatzes und schon ist man wieder vollkommen unbedarft.

    Ein Assembler ist ein "Hilfsprogramm das in Maschinennaher Sprache geschrieben wurde" .  Nun fragt sich, wie dieses Programm geschrieben wurde, da es selbst eben diesem Zweck dient. Es ist ein wenig wie mit dem Huhn und dem Ei.

    Alle heutzutage eher populären Vorstellungen des Programmierens mit Verzweigungen und Schleifen, mit Feldern etc. haben Ihren Ursprung in kompliziert einfachen Vorgängen, die sich sehr kluge Menschen vor langer zeit einmal ausgedacht haben, damit die Maschinen, die sie entwickelten das taten, was sie wollten. Durch die von Neumann - Architektur und der Verwendung einer Zentralen Recheneinheit, sovie Abarbeitungsroutinen bei Speicher - Lese und Schreibzugriffen kristallisierten sich über die Zeit hinweg gewisse Routinen heraus. Diese Routinen verwenden Mikroprozessoren heute, um ihre Opreationen anzustellen.

    Jeder einzelne Assemblerbefehl tut nur unheimlich wenig, wie man hier sehen kann. Die Möglichkeiten daraus faszinierende Anwendungen zu bauen kommt erst durch die oft erwähnte unglaubliche Gewschwindigkeit, mit der Sie ausgeführt werden.