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?
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.
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.
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?
Dans Assembly, les instructions sont des représentations plus faciles à comprendre.
Mais l'assembleur facilite également, par exemple, l'adressage:
Cela facilite beaucoup l’entretien de l’Assemblée, en particulier lorsque la distance entre les adresses change.
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]
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.
Language de machine:
Langue de montage:
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).