it-swarm.com.de

In welcher Beziehung stehen Assembler und Maschinensprache?

Sind Assemblersprache und Maschinensprache (für dasselbe zugrunde liegende System) wirklich gleich? Gibt es Unterschiede zwischen diesen beiden Konzepten?

27
freenight

Assembler ist ein praktischer Mechanismus über der Maschinensprache. Bei der Assembler-Sprache verwenden Sie anstelle von numerischen Operationscodes mnemonische Sequenzen und können anstelle der manuellen Berechnung von Offsets symbolische Bezeichnungen verwenden. Sie schützt Sie auch vor wirklich dummen Fehlern - beispielsweise beim Eingeben einer fehlerhaften Prozessoranweisung.

Ansonsten entspricht die Montagesprache der Maschinensprache. Manchmal haben Sie einen alten Assembler, der für einige Anweisungen der neueren Prozessoren keine Mnemonics unterstützt. Dann können Sie noch Operationscodes direkt in das Programm einfügen.

38
sharptooth

Maschinensprache ist die "Bit-Codierung" der Opcodes einer CPU.

Assembly Sprache ist die "symbolische Codierung" der Opcodes einer CPU.

Also zum Beispiel symbolisch:

loop:  dec R1    # Decrement register R1
       bnq loop  # Branch if not equal to zero to
                 # address "loop"

Wird Bit-Codierung:

# Mythical CPU Machine code 4 bits operation,
#                           4 bit "option"
       0x41      # 4 is a "dec" and represents r1;
       0x7E      # 7 is bnq and E means PC -2;

Im Allgemeinen handelt es sich um eine Eins-zu-Eins-Beziehung, jedoch verfügen einige Assembly-Sprachen über zusätzliche Assembly-Anweisungen, die entweder mehreren Maschinencode-Anweisungen zugeordnet werden oder einen anderen Opcode wiederverwenden. B. den Maschinencode "xor R1, R1" als "clr R1" oder etwas sehr ähnliches verwenden. 

Außerdem unterstützen Assemblersprachen tendenziell die "Makroprogrammierung", die in den 80er Jahren, als Assembly umfassend verwendet wurde, dem Quellcode ein "höheres" Erscheinungsbild verliehen. Ich habe persönlich Assembly-Makros geschrieben, die wie "plot x, y" und "Hex Val" aussahen, um allgemeine Operationen zu vereinfachen.

Zum Beispiel:

# Mythically CPU Macro
.macro spinSleep x,y
            ld #x,y
localLoop:  dec y
            brq localLoop
.endmacro
# Macro invocation
            spinSleep 100,R1
# Macro expantion
            ld #100,R1
localLoopM: dec R1
            brq localLoopM   # localLoopM is "Mangled" for localization.
17
NoMoreZealots

Ich fand eine wirklich gute Erklärung, dachte ich, sie hier zu posten, damit andere sie lesen können:

Maschinensprache sind die eigentlichen Bits zur Steuerung des Prozessors in der Computer, normalerweise als Sequenz angesehen von Hexadezimalzahlen (normalerweise Bytes). Der Prozessor liest diese Bits aus dem Programmspeicher und die Bits Stellen Sie "Anweisungen" dar, was zu tun ist als nächstes tun. Also Maschinensprache bietet eine Möglichkeit zur Eingabe von Anweisungen an einen Computer (ob über Schalter, Lochstreifen oder eine Binärdatei). 

Assemblersprache ist menschlicher lesbare Ansicht der Maschinensprache . Anstatt die Maschine darzustellen Sprache als Zahlen, die Anweisungen und Register erhalten Namen (In der Regel abgekürzte Wörter oder Mnemonics, z. B. bedeutet ld "load"). Nicht wie Assembler ist eine Hochsprache, sehr nahe an der Maschinensprache . Die Hauptabstraktionen (abgesehen von der -Mnemonik) sind die Verwendung von Labels anstelle von festen Speicheradressen und Bemerkungen. 

Ein Assembly-Sprachprogramm (z. B. eine Textdatei) wird in die Maschine Übersetzt. Sprache von einem Assembler. EIN Disassembler führt das Gegenteil aus Funktion (obwohl die Kommentare und die Namen der Labels im Assembler-Prozess gelöscht wurden).

Quelle: Was ist der Unterschied zwischen Maschinensprache und Assembler?

7
Nawaz

In Assembly sind Anweisungen einfacher verständliche Darstellungen von CPU-Anweisungen.

Der Assembler erleichtert aber beispielsweise auch die Adressierung:

  • In Maschinensprache müssen Sie die Entfernung (im Adressraum) zwischen Ihrem Standort und dem Ziel angeben, zu dem Sie springen möchten
  • In der Assemblersprache rufen Sie eine Adresse "iWantToJumpHere" an und können dann "Jump iWantToJumpHere" sagen.

Dies erleichtert die Wartung der Baugruppe, insbesondere wenn sich der Abstand zwischen den Adressen ändert.

5
weiqure

maschinensprache ist, was der Chip versteht Montage ist, was Sie verstehen

Jede Montageanleitung hat ein Maschinensprachenäquivalent. x86 enthält einige Einzelbyte-Anweisungen, die jedoch eine variable Länge haben und bis zu 15 Byte lang sein können (einschließlich optionaler Präfixe)

 machine code bytes |   x86 Assembly language
8D B0 00 36 65 C4    lea    esi, [eax - 1000000000]     
BB 00 FC FF FF       mov    ebx, -1024
43                   inc    ebx
41                   inc    eax
3B CA                cmp    ecx,edx
C3                   ret

C5 F5 72 D2 01       vpsrld ymm1,ymm2,0x1        ; AVX2
C5 F5 D4 6D 88       vpaddq ymm5,ymm1,YMMWORD PTR [ebp-0x78]
C5 CD D4 AD 68 ff ff ff vpaddq ymm5,ymm6,YMMWORD PTR [ebp-0x98]
1
ady

Assembler wird vom Assembler zuerst in Maschinensprache konvertiert. Der Prozessor wird in einem Speicher (RAM) gespeichert. Er wird abgerufen und im Speicher abgelegt, um sich zu registrieren und den Befehlssatz nacheinander zu befolgen. 

0

Maschinensprache:

  1. Es ist die Programmiersprache der ersten Generation 
  2. Es ist viel schwieriger als Assembler
  3. Für den Menschen schwer zu verstehen
  4. Es ist in der Form von 0 und 1
  5. Maschinensprache variiert von Plattform zu Plattform
  6. Es kann nicht leicht geändert werden
  7. Es unterstützt keine Modifikation
  8. Das Fehlerrisiko ist hoch
  9. Der Binärcode kann nicht gespeichert werden
  10. Kein Compiler nötig

Montagesprache:

  1. Es ist eine Programmiersprache der zweiten Generation
  2. Es ist weniger schwierig als Maschinensprache 
  3. Für den Menschen leicht verständlich
  4. Es verwendet symbolische Anweisungen, beschreibende Namen für Datenelemente und Speicherort
  5. Die Assemblysprache ist plattformabhängig
  6. Es ist leicht veränderbar
  7. Es ist Support-Änderungen
  8. Das Fehlerrisiko wird reduziert
  9. Speicherfähigkeit ist hoch
  10. Es wird Compiler benötigt und weiss als Assembler
0
Enaan Farhan

Die Assembler-Sprache ist der erste bewusste Schritt, um die Programmierung zu vereinfachen, indem die Programmierer Mnemonics anstelle von Binärcode (Maschinencode) schreiben können.

0
Pranali Desai