web-dev-qa-db-fra.com

Quelle est la relation entre le langage d'assemblage et le langage machine?

Le langage d'assemblage et le langage machine (pour le même système sous-jacent) sont-ils vraiment les mêmes? Existe-t-il des différences entre ces deux concepts?

27
freenight

Le langage d'assemblage est un mécanisme de commodité par rapport au langage de la machine. Avec le langage d'assemblage, vous utilisez des séquences mnémoniques au lieu de codes d'opération numériques et pouvez utiliser des étiquettes symboliques au lieu de calculer manuellement des décalages. Cela vous protège également contre les erreurs vraiment stupides, telles que la saisie d'une instruction de processeur mal formée.

Sinon, le langage d'assemblage est l'équivalent du langage de la machine. Parfois, vous aurez un ancien assembleur qui ne supportera pas la mnémonique pour certaines instructions des processeurs les plus récents. Vous pourrez alors toujours insérer des codes d'opération directement dans le programme.

38
sharptooth

Le langage machine est le "codage en bits" des opcodes d'une CPU.

La langue d'assemblage est le "codage symbolique" des opcodes d'une CPU.

Donc, par exemple symboliquement:

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

Devient encodage en bits:

# 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;

En règle générale, il s'agit d'une relation un à un. Toutefois, certains langages d'assemblage auront nécessairement des instructions d'assemblage supplémentaires mappées sur plusieurs instructions de code machine ou réutilisant un autre code d'opération. Tels que l'utilisation du code machine "xor R1, R1" comme "clr R1" ou quelque chose de très similaire. 

De plus, les langages d'Assembly auront tendance à supporter la "programmation macro" qui, dans les années 80, lorsque l'Assembly était utilisé à fond, donnait au code source un aspect plus "haut niveau". J'ai personnellement écrit des macros Assembly qui ressemblaient à "plot x, y" et "Hex Val" pour simplifier les opérations courantes.

Par exemple:

# 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

J'ai trouvé une très bonne explication, j'ai pensé la poster ici, pour que d'autres puissent la lire:

Le langage machine correspond aux bits réels utilisé pour contrôler le processeur dans le ordinateur, généralement vu comme une séquence de nombres hexadécimaux (typiquement octets). Le processeur lit ces bits dans la mémoire de programme, et les bits représentent des "instructions" quant à quoi faire faire ensuite. Ainsi, le langage machine fournit un moyen d'entrer instructions dans un ordinateur (que ce soit par l'intermédiaire de commutateurs, de bandes perforées ou d'un fichier binaire ). 

Le langage d'assemblage est plus humain affichage lisible du langage machine . Au lieu de représenter la machine la langue sous forme de nombres, les instructions et les registres reçoivent des noms (généralement des mots abrégés, ou mnemonics, par exemple, ld signifie "load"). Contrairement à un langage de haut niveau, assembleur est très proche du langage machine . Les principales abstractions (en dehors des mnémoniques .__) sont l'utilisation d'étiquettes au lieu d’adresses de mémoire fixes, et commentaires. 

Un programme de langue d'assemblage (c'est-à-dire un fichier texte ) Est traduit en machine langue par un assembleur. UNE désassembleur effectue l'inverse fonction (bien que les commentaires et les noms des étiquettes aient été ignorés dans le processus assembleur).

Source: Quelle est la différence entre le langage machine et le langage assembleur?

7
Nawaz

Dans Assembly, les instructions sont des représentations plus faciles à comprendre.

Mais l'assembleur facilite également, par exemple, l'adressage:

  • En langage machine, vous devez connaître la distance (en espace d'adressage) entre l'endroit où vous vous trouvez et l'endroit où vous voulez aller.
  • En langage d'assemblage, vous appelez une adresse "iWantToJumpHere" et vous pouvez ensuite dire "jump iWantToJumpHere"

Cela facilite beaucoup l’entretien de l’Assemblée, en particulier lorsque la distance entre les adresses change.

5
weiqure

le langage machine est ce que la puce comprend L’assemblage est ce que vous comprenez

Chaque instruction d'assemblage a un équivalent en langage machine. x86 contient quelques instructions sur un seul octet, mais leur longueur est variable et peut aller jusqu'à 15 octets (y compris les préfixes facultatifs)

 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

Le langage d'assemblage est d'abord converti en langage machine par l'assembleur. qui est stocké dans la mémoire (RAM) processeur/tasse récupérez-le et enregistrez-le dans la mémoire pour vous inscrire et suivre les instructions un à un. 

0
Riaz Ul Haque Mian

Language de machine:

  1. C'est le langage de programmation de première génération 
  2. C'est beaucoup plus difficile que le langage d'assemblage
  3. Difficile à comprendre par l'humain
  4. C'est sous la forme de 0 et 1
  5. Le langage machine varie d'une plateforme à l'autre
  6. Il ne peut pas être changé facilement
  7. Il ne supporte pas la modification
  8. Le risque d'erreur est élevé
  9. Le code binaire ne peut pas être mémorisé
  10. Pas besoin de compilateur

Langue de montage:

  1. C'est un langage de programmation de deuxième génération
  2. C'est moins difficile que le langage machine 
  3. Facile à comprendre par l'humain
  4. Il utilise des instructions symboliques, des noms descriptifs pour les éléments de données et l'emplacement de la mémoire.
  5. Le langage d'assemblage dépend de la plate-forme
  6. Il est facilement modifiable
  7. Le support change
  8. Le risque d'erreur est réduit
  9. La mémorabilité est élevée
  10. Il est nécessaire compilateur et sait que l'assembleur
0
Enaan Farhan

Le langage d'assemblage est la première étape consciente vers la simplification de la programmation en permettant aux programmeurs d'écrire des mnémoniques au lieu du code binaire (code machine).

0
Pranali Desai