Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [ASM] Abhängigkeiten der Hardware (https://www.delphipraxis.net/181785-%5Basm%5D-abhaengigkeiten-der-hardware.html)

SyntaxXx 9. Sep 2014 07:27

[ASM] Abhängigkeiten der Hardware
 
Hallo zusammen,
ich habe eine Frage bezüglich ASM.

Ich habe mir hier diverse Tutorials durchgelesen, in denen ASM Code benutzt wurde.
Um diesen Code besser zu verstehen, wollte ich mich ein wenig in ASM einarbeiten.
Doch in allen Tutorials die ich lese, steht immer wieder, dass z.B. eine Intel CPU benötigt wird.
Mal abgesehen von den ganzen Compilern (TASM, NASM, MASM, ...), die offenbar wieder alle eine andere Syntax haben.

Jetzt stellt sich mir die Frage, ob es DAS ASM überhaupt gibt, oder ob es eher vergleichbar (abstrackt) mit C ist (C, C#, C++).
Denn ich bekomme z.B. diesen Code vorgesetzt:

Code:
  mov eax, .codestart
  mov edx, .codeend
  mov ecx, orginal entrypoint
  xor ss[eax], magic
  inc eax
  cmp eax, edx
  jne mainloop
  jmp ecx // springe zum EntryPoint
Gibt es da jetzt irgendwie eine Liste mit Befehlen, die alle gleich sind, oder auf welchen Compiler / hardware bezieht sich dieser Code?

Sherlock 9. Sep 2014 07:39

AW: [ASM] Abhängigkeiten der Hardware
 
Assembler ist vereinfacht gesagt Maschinensprache. Es gibt nur eine handvoll Befehle, dafür werden sie schnell ausgeführt, weil der jeweilige Prozessor sie direkt versteht. Darum gibt es für jede(n) Prozessor(familie) ein eigenes Assembler. Freilich hat man nicht für jeden Prozessor das Rad neu erfunden, und es gibt ähnliche bis gleiche Befehle, aber das wars dann auch schon. Ich habe mitte der 80er noch mit Assembler rumgespielt, mangels guter Alternativen. Heute würde ich sowas nie mehr machen. Viel zu umständlich für minimalen Performancegewinn erkauft mit maximaler Unwartbarkeit.

Und genau deshalb ist Assembler eben NICHT mit C oder irgendeiner anderen standardisierten (Hoch)Sprache vergleichbar.

http://de.wikipedia.org/wiki/Assembler_%28Informatik%29
http://de.wikipedia.org/wiki/Assemblersprache

Sherlock

WM_CLOSE 9. Sep 2014 07:44

AW: [ASM] Abhängigkeiten der Hardware
 
Einige Prozesoren haben Spezialbefehle und -Register für verschiedene Zwecke, z.B. für die Ansteuerung des AES-Beschleunigers von Intel.

Trotzdem kannst du unter jedem Intel-x86-Kompatiblen (Ja, auch AMD) Prozessor die original 8086 Standardbefehle und -Register benutzen. lediglich wenn du auf eine andere Prozessorarchitektur (z.B. ARM) wechselst musst du grundsätzlich umdenken.
Hier ist mal ein Listing aller x86 Befehle.

Mal ganz davon abgesehen ist es meistens Unsinn etwas in ASM einzuhacken (wenn man die Spezialinstruktionen nicht braucht), weil ein moderner Compiler viel besser optimieren kann als ein duchschnittlicher Mensch.

SyntaxXx 9. Sep 2014 07:49

AW: [ASM] Abhängigkeiten der Hardware
 
Der Vergleich mit ASM und C war auch nur so gemeint, das die Syntax zwischen C, C# und C++ sich teilweise ähneln.
Genauso wie du es ja auch gesagt hast :)

Ok, dann nehme ich einfach mal an, dass es sich bei den oben genannten Befehlen um genau diese in allen ASM "Sorten" vorhandenen handelt.
Dann werde ich mir diese einfach mal zu Gemühte führen.


Ich habe auch nicht vor, komplette Anwendungen in ASM zu schreiben, ich möchte nur halbwegs verstehen, was da gerade passiert.
Außerdem liebe ich Delphi viel zu seher ^^

Danke für deine Hilfe.


Edit:
Perfekt, dank euch.
Die Liste werde ich mir mal anschauen :)

Neutral General 9. Sep 2014 08:34

AW: [ASM] Abhängigkeiten der Hardware
 
Ich denke mal mindestens 90% aller Assemblerbefehle die du jemals benutzen/lesen wirst werden sowohl auf AMD als auch auf Intel-Prozessoren funktionieren (vllt. sogar mehr).

Diese speziellen Befehle werden (würde ich mal sagen) in erster Linie vom Betriebssystem oder Treibern benutzt. Du musst dir also im Allgemeinen keine Sorgen darum machen.

TASM, NASM, MASM, etc sind andere Compiler die jeweils ggf. eine leicht unterschiedliche Syntax erwarten. Prinzipiell tun sie aber alle das gleiche und erzeugen auch den gleichen Maschinencode am Ende.

Also ja. Es gibt DAS ASM für eine spezielle Prozessorarchitektur. In dem Fall ist es x86 Assembler.
Und alle genannten Compiler erzeugen (wie gesagt) Code für diese Prozessoren.

Was die Syntax angeht: Such dir die aus die dir am besten gefällt ;)

OlafSt 9. Sep 2014 08:45

AW: [ASM] Abhängigkeiten der Hardware
 
Tatsächlich ist es sogar so, das die genannten 90% der ASM-Befehle bis runter zum 80386 (dem ersten 32-Bit-Prozessor im PC) funktionieren.

Generell kann man sagen: Bleibst du in einer Prozessorfamilie, dann ist der ASM-Code auch nahezu identisch. Im PC-Sektor ist dies x86-Assembler, das von Intel mit dem 8088 aus den späten 70er Jahren eingeführt wurde und seither von Generation zu Generation weiterentwickelt wurde. Verzichtete man auf 32-Bit-Code, würden die 90% sogar noch auf dem 8088 laufen.

Wechselt man die Prozessorfamilie (Motorola, ARM, ATMEL, oder für die ganz alten Hasen, Zilog) wechselt natürlich auch die Assemblersprache.

Namenloser 9. Sep 2014 09:02

AW: [ASM] Abhängigkeiten der Hardware
 
Zitat:

Zitat von SyntaxXx (Beitrag 1271736)
Denn ich bekomme z.B. diesen Code vorgesetzt:

Code:
  mov eax, .codestart
  mov edx, .codeend
  mov ecx, orginal entrypoint
  xor ss[eax], magic
  inc eax
  cmp eax, edx
  jne mainloop
  jmp ecx // springe zum EntryPoint
Gibt es da jetzt irgendwie eine Liste mit Befehlen, die alle gleich sind, oder auf welchen Compiler / hardware bezieht sich dieser Code?

Man muss unterscheiden zwischen dem OP-Code und seiner Darstellung. Der OP-Code ist für alle X86-CPUs und alle Compiler der gleiche. Weil roher Maschinencode aber für einen Menschen schlecht lesbar ist, haben sich Mnemonics wie
Delphi-Quellcode:
inc eax
etabliert. Da gibt es verschiedene Standards, aber am häufigsten findet man die AT&T-Syntax (vor allem bei Unix) und Intel-Syntax (z.B. bei Delphi). Ich finde die Intel-Syntax deutlich besser lesbar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz