Assembler

Moin Leuts

Wollte mal fragen wofür die einzelnen Assemblesprachen benutzt werden.

Turbo Assembler

Assembler

Microsoft Assembler oder so:D
usw.
 
Moin Leuts

Wollte mal fragen wofür die einzelnen Assemblesprachen benutzt werden.

Turbo Assembler

Assembler

Microsoft Assembler oder so:D
usw.

masochismus ... zumindest wenn's um typische software entwicklung geht

assembler findet meines wissens fast nur noch verwendung bei compiler- und os-entwicklung

mag sein dass ein paar sehr laufzeitkritische algorithmen (webcrawler, kompression, kryptographie...) auch zumindest teilweise in assembler abgefertigt werden - schließlich kann man da per hand sicher noch ein bisschen mehr rausholen als es selbst moderne compiler können

(alle angaben ohne gewähr, da ich nicht im IT bereich tätig bin :rolleyes:)
 
assembler findet meines wissens fast nur noch verwendung bei compiler- und os-entwicklung
Dazu kommen noch:

  • Embedded Systems: Auf Microcontrollern muss man manchmal optimieren oder hat z.T. keine Compiler
  • In 3D-Engines kann man massive Performancegewinne erzielen, wenn man spezielle Extensions benutzt, wie z.B. 3DNow! für x86.
  • In großen Spielen findet man auch oft Teile die von Hand in Assembler geschrieben wurden, wie z.B. Planetside 2, bei dem seit dem letzten Update der Netcode in Assembler geschrieben ist.
  • In seltenen Fällen auch Lehrbücher, wie The Art of Computer Programming, wo MIX bzw MMIX benutzt wird.
 
  • Und es gibt natürlich "verrückte Leute", die zum Spaß in Assembler programmieren ;)

Turbo Assembler, Assembler und Microsoft Assembler ist eine relativ schlechte Auswahl. Denn Turbo Assembler und Microsoft Assembler sind zwei Programme, die Assemblersprache in x86-Maschinencode umwandeln.
Assembler selber ist entweder ein Programm oder die Sprache. Im Englischen wird unterschieden zwischen Assembler (dem Übersetzerprogramm) und Assembly language (die Assemblersprache).

Und es gibt eben auch Assembler, die Assemblersprache nicht in x86-Code übersetzen, sondern in Maschinencode von anderen Prozessoren.

Wenn man Assembler nicht versteht/verstehen kann, versteht man auch nicht den Apparat, vor dem man sitzt. Du musst natürlich keine vollen Kenntnisse von speziell deinem PC haben, aber du lernst vieles allgemein über PCs.
Und du lernst effizienten Code zu schreiben, wenn du dich genug damit beschäftigst.

Edit: Btw. meine Signatur ist z.B. ein Hallo-Welt-Programm für DOS in Hexadezimalzahlen. Es ist schön zu sehen, wie kompakt Code sein kann :D
 
Zuletzt bearbeitet:
Assembly ist vor allem interessant, um ein Gefühl für die "Hintergrundmagie" der höheren Programmiersprachen zu bekommen - Pointer, Referenzen, Pointer-auf-Pointer und weitere "schlimme Dinge" sehen in Assembly ganz anders aus. Das trägt erfahrungsgemäß schon zum Verständnis bei.
Allerdings eignet sich Assembly nicht soo wirklich als Einsteigersprache und/oder um die Konzepte der Programmierung zu erklären ;)

Was die einzelnen Assembler angeht:
Es gibt halt Maschinencode - das ist die Form, die man direkt an die CPU verfüttern kann. Biologische Lebensformen haben aber meist das Manko, sich diese simplen Sachen nicht merken zu können und erfanden sich "Mnemonics" - also lesbare Formen, die (meist) 1:1 auf einen Maschinencode abbilden (z.B ADD Register1, 10 <=> 48 05 0a 00 00 00)

Assembler sind quasi solche Mnemonic->Maschinencode Übersetzer, allerdings oft mit zusätzlichen Features und Syntax (angefangen mit Variablendeklarierung über Prozeduren/Funktionen bis hin zu While/For Macros und weiteren Automatismen wie der Sicherung/Wiederherstellung der Register nach einem Prozeduraufruf)

TASM/MASM sind jeweilige Programme von Borland/MS mit eigenen Erweiterungen und Syntaxeigenheiten.

TASM lebt nur noch in alten Büchern und Tutorials weiter
wikipedia hat gesagt.:
The latest version of Turbo Assembler is 5.0, with files dated 1996 and patches up to 2002; it is still supplied with Delphi and C++Builder.
sowie in "Kompatibilitätsmodi" anderer Assembler.

MASM wird oft im Zusammenhang mit MASM32 erwähnt - das ist ein "fertiges" Packet für Assembly-unter-Windows. Es "lebt" immer noch (wird mit Microsofts SDKs/Compilern ausgeliefert) und damit lässt sich auch wirklich etwas außerhalb der DOS-Box programmieren ;)

NASM ist der "plattformübergreifende" (im Sinne, dass NASM selbst auch auf Linuxkisten, Mac oder BSD verfügbar ist) Open Source Assembler.

MASM und NASM, sind wie im vorherigen Posting erwähnt, Assembler für die "klassische Desktop/Laptop-CPUs" (also sogenannte "x86, i386, IA-32, AMD64, 0x86-64" - historisch bedingt gibts halt viele Bezeichnungen).

NASM wird auch oft als "Lehrsprache" für Low-Level-Prorgrammierung eingesetzt: PC Assembly Language
für beide findet sich relativ viel Zeug im Netz.

Weitere Assembler wie FASM/WASM oder GAS sind etwas spezifischer - zumindest aber deutlich schlechter dokumentiert und nur für erfahrene Asm-Entwickler vom Interesse.
Comparison of assemblers - Wikipedia, the free encyclopedia

Der praktische Einsatz auf "Desktop" sollten mittlerweile Nischenfälle (z.B Booloader - siehe Grub, TrueCrypt) oder Optimierugen sein.
Optimierungen sind zwar ganz lustig - allerdings oft nur dadurch, dass die "Mainstreamcompiler" die "ich setze es mal in Asm um, ist automatisch schneller!" Illusion schnell wieder zerstören ;).
Um einen aktuellen GCC/Clang/Intel Compiler erfolgreich zu übertrumpfen, muss man in der Regel jede Menge über die konkrete Zielplattform wissen (Pipe, Cache) und braucht die nette "Referenztabelle" (eher ein Buch) vom CPU-Hersteller mit Timings und Abhängigkeiten der einzelnen Anweisungen.
 
Zuletzt bearbeitet:
Bei Fremdwörtern helfen Google und Wikipedia ;)

Und wenn du gerade Java lernst, kann das Verständnis für Assembler noch warten. Wenn es dich interessiert, solltest du vielleicht nicht direkt von Java auf Assembler gehen, sondern vielleicht C als Zwischenschritt einbauen, weil Java doch eher ne eierlegende Wollmilch-Programmiersprache ist.

Wie CDW gesagt hat ist Assembler nicht wirklich für Anfänger geeignet. Es ist viel einfacher zu erklären, was ein:
Code:
#include <stdio.h>

int main(){
    printf("Hallo Welt!\n");
    return 0;
}

macht, als ein:
Code:
; FASM
org 100h
mov ah, 9
mov dx, hallo_string
int 21h
ret

hallo_string db "Hallo Welt!", 13, 10, "$"

Und wieso das untere Programm nur auf DOS funktioniert und was da genau passiert und wieso das Programm auf Windows oder Linux ganz anders aussehen muss...
 
C mit Inline-Assembler in Microsoft Visual Studio ist vielleicht der leichteste Weg, um Assembler zu verstehen:

Schreiben von Funktionen mit der Inlineassembly

PHP:
int power2( int num, int power )
{
   __asm
   {
      mov eax, num    ; Get first argument
      mov ecx, power  ; Get second argument
      shl eax, cl     ; EAX = EAX * ( 2 to the power of CL )
   }
   // Return with result in EAX
}
 
Zurück
Oben