# Assembler



## Grunge (14. Mai 2003)

Hi!

Ich möchte mal gerne von euch folgendes wissen:
Was ist Assembler??

Ich lese immer wieder davon kann mir jemand mal ein beispiel programm geben,welchen in dieser sprache entwickelt wurde??? UND: Mit welchem Programm schreibt mal Assembler!!??

Ich danke euch!!!


----------



## Frankdfe (14. Mai 2003)

Hi!

Jeder Source Code, der kompiliert wird, wird in Maschinensprache (in sehr einfache Befehle, die direkt auf dem Prozessor ausgeführt werden können) umgesetzt. 

Maschinensprache nur aus Nullen und Einsen besteht ist Assembler die Übertragung dieser Nullen und Einsen in einfache Befehle.

Ein Maschinensprachenprogramm könnte z.B. so aussehen:

```
54h 85h 3Eh 53h
```

Ein Assemblerprogramm z.B. so:


```
MOV bx,34
MOV [bx],435
INT 32
```

Assembler wird durch ein Programm übersetzt(assembliert), das auch Assembler(das was in C der Complier ist) heißt. 

Da alle Programme(.Exe-Dateien) in Maschinensprache gespeichert sind, kann man auch alle Programme in Assembler-Programme umwandeln(disassemblieren)

Gruß Frank


----------



## Grunge (15. Mai 2003)

THX!! Hast mir glaub ich sehr geholfen.. eine frage noch: Schätzt ihr die Sprache leicht zum lernen ein!?


----------



## Christian Fein (15. Mai 2003)

> _Original geschrieben von Grunge _
> *THX!! Hast mir glaub ich sehr geholfen.. eine frage noch: Schätzt ihr die Sprache leicht zum lernen ein!? *


Wenn du gut in Mathematik bist ist die Sprache nicht so schwer 
ansonsten schon


----------



## Grunge (16. Mai 2003)

also mathe ist bei mir eigentlich kein problem?? aber warum muss mathe wichtig sein!? Kannst du mal nen beispiel nennen!?


----------



## Frankdfe (16. Mai 2003)

Da du in Assembler nur simple Befehle hast, ist es wichtig die mathematisch logische Denkweise zu beherschen(wirklich anwenden mußt du mathe nicht).

Außerdem solltest du allgemeine Informatik- und Logik-Kenntnisse(z.B. was eine AND-Verknüpfung ist) haben. 

Nehmen wir einmal möchtest eine Schleife programmieren, die das Unterprogramm(=Funktion) ABC 100 mal ausführt, dann sieht das in Intel-Assembler so aus:



```
MOV CX, 100

beginn: 
CALL ABC
SUB CX,1
CMP CX,0
JZ beginn
```

MOV CX, 100 bedeutet Register CX = 100.
Ein Register kann man wie eine Variable betrachten.

beginn ist eine Marke(wird intern als Adresse betrachtet)

CALL ABC ruft das Unterprogramm ABC auf

SUB CX,1 bedeutet: CX = CX - 1

CMP CX,0 Vergleicht CX mit dem Wert 0. Ist CX=0 dann wird das Zero-Flag gesetzt.

JZ beginn springt nach beginn, wenn das Zero-Flag gesetzt ist(if (Zero) then goto beginn)

Ich hoffe dieses kurze Programmstück ist noch halbwegs verständlich.


Außerdem hoffe ich, das mir die Assembler-Programmierer das CMP CX,0 und SUB CX,1 verzeihen.


----------



## Grunge (17. Mai 2003)

wie sieht ein kompliertes Programm dann aus?? Ich meine "stylisch" gesehen??? Wie eine normale windows anwendung???


----------



## melmager (17. Mai 2003)

Im Normallfall ist ein Assemblerprogramm eine kleines Programmstückchen , meist bei zeitkritischen oder Hardwarenahen Sachen verwendet.
(z.b Treiber für eine Schnittstellenkarte; oder ein Steuerungsrechner - Kaffee- Wasch- oder sonstige Maschiene)

Aber kein Mensch schreibt heutzutage ein Programm mit grafischer Oberfläche in Assembler, ist einfach zu aufwendig.

Und das schöne ist :
Jede CPU hat ein anderen Assembler :-(

Ich habe jedenfalls beim dritten Assembler aufgehört ....


----------



## Dario Linsky (17. Mai 2003)

Assembler ist eigentlich nichts anderes als eine etwas besser lesbare Form von richtigem Maschinencode. Jede einzelne Anweisung in Assembler entspricht genau einem Takt (also einer einzigen logischen Berechnung) im Prozessor.
Dadurch lassen sich mit Assembler zwar sehr schnelle Anwendungen umsetzen, weil es sehr hardwarenah ist und man auf unnötige Anweisungen verzichten kann. Auch die Hochsprachen-Compiler (beispielsweise GCC) setzen den Code erst in Assembler-Code um, der dann wieder fast 1 zu 1 in Maschinencode übernommen wird. Die compilierten Anwendungen sehen vom Bytecode her eigentlich genau so aus, wie jede andere Anwendung auch.
Aber durch die Tatsache, dass man wirklich immer nur absolute Einzelschritte hat und alles "zu Fuss" machen muss, wird Assembler eigentlich nur noch eingesetzt, wenn es nicht anders geht. Typische Beispiele für Assembler-Programme sind Bootloader, Betriebssysteme oder Hardware-Treiber.


----------



## melmager (17. Mai 2003)

Um es mal deutlicher zu machen:

Hochsprache wie C, Pascal 

Programm Morgens:
 Aufstehen
 Waschen
 Fruhstücken
usw:

das gleiche als Assembler:
Programm Morgens
 Wecker Aus
 Bettdecke Zurück schlagen
 Füsse aus dem Bett
 Körper hoch
usw ..


----------



## Grunge (18. Mai 2003)

ich glaub nun weiß ich bescheid THX!


----------



## IFI ManiA (19. August 2003)

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.


----------



## chibisuke (10. September 2003)

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...

```
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


----------



## Daniel Toplak (11. September 2003)

> 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


----------

