Contacts

Programmation: assembleur langue. Les bases de la langue d'assembleur. Format de données et structure de l'équipe Assembleur de langage Assembler

Sur la destination, vous pouvez sélectionner des commandes (entre parenthèses sont des exemples de codes mnémoniques d'opérations des opérations d'assembleur Type PC de type PC IBM):

l Effectuer des opérations arithmétiques (Ajout et ADC - Ajout et ajouts avec transfert, Sub et SBB - Soustraction et soustraction avec emprunt, Mul et imul - multiplication sans signe et avec signe, div et IDIV - division sans signe et avec signe, CMP - comparaisons etc.);

l Effectuer des opérations logiques (ou et, pas, XOR, test, etc.);

l Expédition (MOV - Pour envoyer, XCHG - Exchange, in - Entrez dans le microprocesseur, sortie - sortie du microprocesseur, etc.);

l Transmission de contrôle (Branches de programme: JMP - transition inconditionnelle, procédure d'appel d'appel, RET retour de la procédure, J * - transition conditionnelle, contrôle de cycle de boucle, etc.);

l Traitement de la ligne de traitement (MOVS - Expédition, CMPS - Comparaison, LODS - Téléchargements, SCAS - SCAS - Numérisation. Ces commandes sont généralement utilisées avec le représentant du préfixe (modificateur de répétition);

l interruption de programme (interruptions int-programme, interruption conditionnelle lorsqu'il est trop débordement, IRET - retour de l'interruption);

l Contrôle du microprocesseur (St * et CL * - Installation et réinitialisation des drapeaux, HLT - Stop, attente - attentes, NOP - Racking, etc.).

Avec une liste complète des commandes d'assembleur, vous pouvez vous familiariser dans les travaux.

Commandes de transfert de données

l MOV DST, SRC - Envoi de données (Move - Envoyer de SRC à DST).

Envoie: Un octet (si SRC et DST ont un format d'octet) ou un mot (si SRC et DST ont un format de texte) entre le registre ou entre le registre et la mémoire, et enregistrent également une valeur directe au registre ou en mémoire.

Les opérandes DST et SRC doivent avoir le même format - octets ou mot.

SRC peut être TYPE: R (Inscrivez-vous) - Enregistrez-vous, M (Mémoire) - Mémoire, I (Impédience) - Valeur directe. DST peut être de type r, m. Il est impossible d'utiliser des opérandes dans une commande: RSEGM avec I; Deux opérandes de type m et deux opérandes de type RSEGM). Opérande, je peux être une expression simple:

mOV AX, (152 + 101B) / 15

Le calcul d'expression n'est effectué que lors de la diffusion. Les drapeaux ne changent pas.

l pousser src - pile de couverture mot (poussoir - pincée Enregistrer sur la pile de İsrc). Il place le contenu de SRC en haut de la pile - tout registre 16 bits (y compris le segment) ou deux cellules de mémoire contenant un mot de 16 bits. Les drapeaux ne changent pas;

l Pop DST - extraire des mots de la pile (pop - push out; compter de la pile en DST). Supprime le mot du haut de la pile et la place dans DST - tout registre 16 bits (segment compris) ou dans deux cellules de mémoire. Les drapeaux ne changent pas.

Sujet 1.4 Assembleur mnémonique. Structure et formats de commandes. Types d'adressage. Système d'équipe de microprocesseur

Plan:

1 assembleur. Concepts de base

2 Symboles des symboles de langue d'assembleur

3 types d'opérateurs d'assembleur

4 directives d'assembleur

5 Système de commande de processeur

1 J.kyk assembleur. Concepts de base

Assembleur - Ceci est une présentation symbolique de la langue de la machine. Tous les processus de la machine au niveau du matériel le plus bas et le matériel ne sont entraînés que par des commandes (instructions) de la langue de la machine. Il est clair que, malgré le nom général, la langue d'assembleur pour chaque type d'ordinateur.

Le programme Assembleur est une combinaison de blocs de mémoire, appelés segments de mémoire.Le programme peut consister en un ou plusieurs segments de blocs. Chaque segment contient un ensemble de suggestions linguistiques, qui occupe chacune une ligne distincte du code de programme.

Les offres d'assembleur sont quatre types:

1) commandes ou instructions, Présenter des analogues symboliques de commandes de la machine. Dans le processus de diffusion, les instructions de l'assembleur sont transformées en commandes correspondantes du système de commande de microprocesseur;

2) macrocomands -décoré d'une certaine manière des propositions de texte du programme, remplacées lors de la diffusion par d'autres propositions;

3) directivesune indication du traducteur d'assembleur pour effectuer certaines actions. Les directives n'ont pas d'analogues dans la représentation de la machine;

4) rangées de commentaire contenant des caractères, y compris les lettres de l'alphabet russe. Les commentaires sont ignorés par le traducteur.

­ Structure du programme sur assembleur. Syntaxe d'assembleur.

Les propositions qui composent le programme peuvent être une conception syntaxique, une équipe correspondante, une macrokomand, une directive ou un commentaire. Pour que le traducteur de l'assembleur puisse les reconnaître, ils doivent être formés par certaines règles syntaxiques. Pour ce faire, il est préférable d'utiliser une description formelle de la syntaxe de la langue comme les règles de la grammaire. Les moyens les plus courants d'une telle description du langage de programmation - Tableaux syntaxiques et formes de Naure Bakusa étendues. Pour une utilisation pratique plus pratique tableaux syntaxiques.Par exemple, la syntaxe des suggestions d'assembleur peut être décrite à l'aide de diagrammes syntaxiques illustrés dans les figures 10, 11, 12.

Figure 10 - Format de l'assembleur


­ Figure 11 - Directives au format

­ Figure 12 - Format d'équipe et macros

Sur ces dessins:

­ Étiquettes de nom - l'identifiant, dont la valeur est l'adresse du premier octet de cette proposition du texte source du programme, qu'elle dénote;

­ nom - L'identifiant distinguant la présente directive d'autres directives des mêmes noms. À la suite de l'assembleur de traitement, une directive spécifique peut être attribuée à certaines caractéristiques;

­ code de fonctionnement (CPA) et directive - Ce sont des désignations mnémoniques de l'équipe de machine, des macros ou des directives des traducteurs concernés;

­ opérandes - Des parties de l'équipe, des macro commandants ou des directives d'assembleur indiquant des objets sur lesquels des actions sont effectuées. Les opérandes d'assembleur sont décrites par des expressions avec des constantes numériques et de texte, des marques et des identificateurs de variables utilisant des opérations et des mots réservés.

Les diagrammes syntaxiques aident recherchez puis parcourez le chemin de la connexion du graphique (à gauche) à sa sortie (à droite). Si ce chemin existe, la proposition ou la conception est syntaxiquement correcte. S'il n'y a pas de tel chemin, cela signifie que le compilateur n'acceptera pas cette conception.

­ 2 symboles de langue assembleur

Symboles autorisés Lorsque vous écrivez des textes de texte sont les suivants:

1) toutes les lettres latines: A-Z., A-Z.. Dans ce cas, les lettres majuscules et minuscules sont considérées comme équivalentes;

2) nombre de nombres de 0 avant que 9 ;

3) Signes ? , @ , $ , _ , & ;

4) diviseurs , . () < > { } + / * % ! " " ? = # ^ .

Les offres d'assembleur sont formées de lexemeReprésentant les séquences syntaxiquement inséparables de symboles autorisés de la langue qui a du sens pour le traducteur.

Lexemes sont:

1) identifiants - Séquences de caractères autorisés utilisés pour désigner de tels objets d'objet tels que des codes de fonctionnement, des noms de variable et du nom de l'étiquette. La règle d'enregistrement d'identifiant est la suivante: l'identifiant peut être constitué d'un ou de plusieurs caractères;

2) chaînes de symboles - Séquences de symboles enfermés dans des citations simples ou doubles;

3) Bulwa entière de l'un des systèmes de surtaxe suivants : binaire, décimal, hexadécimal. L'identification des nombres lors de l'enregistrement dans les programmes d'assembleurs est faite selon certaines règles:

4) Les nombres décimaux ne nécessitent aucun caractère supplémentaire pour identifier des caractères supplémentaires, par exemple 25 ou 139. Pour identifier dans le texte source du programme numéros binaires Il est nécessaire après avoir enregistré des zéros et des unités inclus dans leur composition, mettre latin latin " b.", Par exemple 10010101 b..

5) les chiffres hexadécimaux ont plus de conventions à leur dossier:

Tout d'abord, ils consistent en nombre 0...9 , lettres minuscules et majuscules de l'alphabet latin uNE., B., c., RÉ., E., F. ou alors UNE., B., C., RÉ., E., F..

Deuxièmement, le traducteur peut avoir des difficultés avec la reconnaissance des nombres hexadécimaux du fait qu'ils peuvent être composés de certains numéros 0 ... 9 (par exemple 190845), commencez par la lettre de l'alphabet latin (par exemple, ef15). Afin de "expliquer" le traducteur que ce lexeme n'est pas un nombre décimal ni un identifiant, le programmeur doit spécialement allouer un nombre hexadécimal. Pour ce faire, à la fin de la séquence de nombres hexadécimaux, qui constituent un nombre hexadécimal, écrivez la lettre latine " h.". C'est une condition préalable. Si le numéro hexadécimal commence par la lettre, le zéro principal est enregistré devant lui: 0 ef15 h.

Presque toutes les propositions contiennent une description de l'objet sur lequel ou avec laquelle une action est effectuée. Ces objets sont appelés opérande. Ils peuvent être identifiés comme ceci: opérandes. Ce sont des objets (certaines valeurs, registres ou cellules de mémoire) auxquelles des instructions ou des directives fonctionnent, ou ces objets qui définissent ou spécifient le fonctionnement des instructions ou des directives.

Il est possible d'effectuer la classification suivante des opérandes:

­ opérants constants ou directs;

­ opérandes d'adresses;

­ opérandes transférées;

compteur d'adresses;

­ registre d'opérande;

­ opérandes de base et index;

­ opérandes structurelles;

Entrées.

Les opérandes sont des composants élémentaires à partir de quelle partie de la commande de la machine est formé, désignant des objets sur lesquels l'opération est effectuée. Dans un cas plus général, les opérandes peuvent inclure dans le cadre d'une éducation plus complexe, appelée expressions.

Expressions il existe des combinaisons d'opérandes et d'opérateurs considérés dans son ensemble. Le résultat du calcul de l'expression peut être l'adresse d'une certaine cellule de mémoire ou d'une valeur constante (absolue).

­ 3 types d'opérateurs d'assembleur

Nous énumérons les types possibles opérateurs d'assembleur et règles syntaxiques pour la formation d'expressions d'assembleurs:

­ opérateurs arithmétiques;

­ changements d'opérateurs;

­ des opérateurs de comparaison;

­ opérateurs logiques;

­ opérateur d'index;

­ tapez l'opérateur de redéfinition;

­ redéfinition de l'opérateur du segment;

­ nommer le type de structure de l'opérateur;

­ opérateur d'obtention du composant de segment de l'adresse de l'expression;

­ opérateur pour obtenir un déplacement d'expression.

1 Assembleur Directives

­ Les directives d'assembleur sont:

1) Directives de segmentation. Au cours de la discussion précédente, nous avons trouvé toutes les règles de base pour enregistrer des équipes et des opérandes dans le programme Assembleur. La question est restée la question de savoir comment créer une séquence de commandes correctement, de sorte que le traducteur puisse les traiter et que le microprocesseur doit s'exécuter.

Lorsque vous envisagez l'architecture de microprocesseur, nous avons appris qu'il comporte six registres de segment, à travers lequel il peut travailler simultanément:

­ avec un segment de code;

­ avec un segment de pile;

­ avec un segment de données;

­ avec trois segments de données supplémentaires.

Un segment physiquement est une zone de mémoire, occupée par des commandes et des données (ou), dont les adresses sont calculées par rapport à la valeur du registre de segment correspondant. La description syntaxique du segment sur l'assembleur est une conception illustrée à la figure 13:


­ Figure 13 - Syntaxe Description du segment sur l'assembleur

Il est important de noter que l'objectif fonctionnel du segment est quelque peu plus large que la simple rupture du programme sur des blocs de code, de données et de piles. La segmentation fait partie d'un mécanisme plus général associé à concept de programmation modulaire. Cela implique l'unification de la conception des modules d'objets créés par le compilateur, y compris de différentes langages de programmation. Cela vous permet de combiner des programmes écrits dans différentes langues. Il est destiné à la mise en œuvre de diverses options pour une telle association et les opérandes de la directive segment sont destinées.

2) Directives de gestion de la liste. Les directives de gestion de la liste sont divisées en groupes suivants:

­ directives de gestion des inscriptions générales;

­ directives de sortie dans la liste des fichiers incluse;

­ directives de blocage de l'assemblage conditionnel;

­ directives de sortie dans la liste des macrocomandes;

­ informations de la liste sur la liste des références croisées;

­ directives de changement de format de liste.

2 Système de commande de processeur

Le système de commande de processeur est présenté à la figure 14.

Considérez les principaux groupes d'équipes.

­ Figure 14 - Classification des commandes de l'assembleur

Les équipes sont:

1 Commandes de transfert de données. Ces commandes occupent une place très importante dans le système de commandes de tout processeur. Ils effectuent les principales fonctions suivantes:

­ économiser en mémoire du contenu des registres de processeur interne;

­ copier du contenu d'une zone de mémoire à une autre;

­ Écriture sur les périphériques d'E / S et lire des périphériques d'E / S.

Dans certains processeurs, toutes ces fonctions sont effectuées par une seule équipe.MOV. (pour les envois d'octets -Movb. ) mais avec diverses méthodes d'adressage des opérandes.

Dans d'autres transformateurs, en plus de l'équipeMOV. Plusieurs commandes ont plusieurs commandes pour effectuer des fonctions répertoriées. En outre, les commandes de transfert de données incluent des commandes de partage d'informations (leur désignation est basée sur un motÉchange ). Il peut y avoir un échange d'informations entre les registres internes, entre deux moitiés d'un registre (Échanger ) ou entre le registre et la cellule de mémoire.

2 équipes arithmétiques. Les équipes arithmétiques considèrent les codes d'opérande comme codes numériques binaires ou binaires-décimal. Ces commandes peuvent être divisées en cinq groupes principaux:

­ semicons fixes (addition, soustraction, multiplication, division);

­ semicons flottants (addition, soustraction, multiplication, division);

­ commandes de nettoyage;

­ commandes d'incrément et de décrément;

­ comparer la commande.

3 Semicolons fixes Les commandes de fonctionnement fonctionnent avec des codes dans des registres de processeur ou en mémoire comme codes binaires classiques. Les commandes d'opérations de communion flottante (POINT) utilisent le format de représentation des nombres avec la commande et la mantissie (généralement ces chiffres occupent deux cellules de mémoire consécutives). Dans les transformateurs puissants modernes, un ensemble de points-virgules flottants ne se limite pas à quatre arithmes et contient de nombreuses autres commandes plus complexes, par exemple, le calcul des fonctions trigonométriques, des fonctions logarithmiques, ainsi que des fonctions complexes nécessaires lors du traitement du son et des images.

4 Les commandes de nettoyage sont conçues pour écrire un code zéro dans un registre ou une cellule de mémoire. Ces commandes peuvent être remplacées par des commandes d'expédition de code zéro, mais les commandes de nettoyage spéciales sont généralement plus rapides que les commandes d'expédition.

5 équipes d'incrément (augmentation par unité) et décrément

(Réduire par unité) sont également très confortables. Ils peuvent être en principe en principe pour remplacer les commandes de sommation avec une unité ou une soustraction d'une unité, mais l'incrément et la décrémentation sont plus rapides que la sommation et la soustraction. Ces commandes nécessitent un opérande d'entrée, qui est à la fois l'opérande de sortie.

6 La commande de comparaison est conçue pour comparer deux opérandes d'entrée. En substance, il calcule la différence de ces deux opérandes, mais l'opérande de sortie ne forme pas, mais ne modifie que les bits du registre de l'état du processeur en fonction du résultat de cette soustraction. La commande suivante à la commande de comparaison (généralement, une commande de transition) analysera des bits dans le registre d'état du processeur et effectuera des actions en fonction de leurs valeurs. Certains processeurs fournissent une commande de comparaison de la chaîne de deux séquences d'opérandes en mémoire.

7 commandes logiques. Les commandes logiques sont effectuées sur les opérations sur les opérations logiques (Bitwise), c'est-à-dire qu'ils envisagent des codes d'opérande et non comme un nombre unique, mais comme un ensemble de bits individuels. Ils diffèrent des équipes arithmétiques. Les commandes logiques effectuent les opérations de base suivantes:

­ logique et logique ou addition de module 2 (à l'exclusion ou);

­ changements logiques, arithmétiques et cycliques;

­ vérifiez les bits et les opérandes;

­ installation et nettoyage des bits (drapeaux) d'un registre d'état du processeur (PSW).

Les commandes de fonctionnement de la logique vous permettent de calculer traids de calculer les fonctions de base de la logique à partir de deux opérandes d'entrée. De plus, l'opération et est utilisée pour nettoyer les bits spécifiés (comme l'un des opérandes, le code de masque est utilisé dans lequel les décharges nécessitant un nettoyage sont réglées à zéro). Fonctionnement ou appliqué à l'installation forcée de bits spécifiés (comme l'un des opérandes, le code de masque est utilisé dans lequel les décharges nécessitant une installation par unité sont égales à une). L'opération "Excellinging ou" est utilisée pour inverser les bits spécifiés (comme l'un des opérandes, le code de masque est utilisé, dans lequel les bits soumis à des inversions sont définis par unité). Les commandes nécessitent deux opérandes d'entrée et forment un opérande de sortie.

8 Commandes de changement de vitesse vous permettent de mélanger le code de l'opérande à droite (vers des décharges plus jeunes) ou à gauche (dans la direction des décharges seniors). Le type de décalage (logique, arithmétique ou cyclique) détermine qui sera la nouvelle valeur du bit plus ancien (lorsque le décalage vers la droite) ou le bit plus jeune (pendant le passage à gauche) et détermine également si la valeur la plus ancienne de Le bit plus ancien (lorsque le passage à gauche) est enregistré quelque part ou un peu plus jeune (lors du passage à droite). Les changements cycliques vous permettent de déplacer les bits du code opératoire dans un cercle (dans le sens des aiguilles d'une montre lorsque le décalage est à droite ou dans le sens antihoraire lorsque le changement de vitesse). Dans le même temps, la bague de décalage peut entrer ou ne pas entrer dans le drapeau de transfert. Dans le bit du drapeau de transmission (si utilisé), la valeur du bit antérieur est enregistrée pendant le décalage cyclique vers la gauche et le bit plus jeune pendant le décalage cyclique à droite. En conséquence, la valeur du bit d'indicateur de transfert correspondra à la décharge la plus basse pendant le décalage cyclique à gauche et dans la décharge senior pendant le décalage cyclique à droite.

9 commandes de transitions. Les équipes de complaus sont conçues pour organiser toutes sortes de cycles, de branches, d'appels aux sous-routines, etc., c'est-à-dire qu'ils violent les progrès en série. Ces commandes sont enregistrées dans la commande enregistrent une nouvelle signification et appelez ainsi la transition du processeur non à la commande suivante, mais à toute autre commande à la mémoire des programmes. Certaines commandes de transitions rendent davantage retour au point à partir de laquelle la transition a été faite, d'autres ne le préviennent pas. Si le remboursement est fourni, les paramètres du processeur actuel sont stockés dans la pile. Si le remboursement n'est pas fourni, les paramètres du processeur actuel ne sont pas enregistrés.

Les commandes de comparaison sans remboursement sont divisées en deux groupes:

­ transitions inconditionnelles;

­ Équipes de croisement communes.

Dans les désignations de ces commandes sont des mots utilisésBranche (ramification) et saut (saut).

Les commandes de transitions inconditionnelles entraînent la transition vers une nouvelle adresse, quelle que soit leur. Ils peuvent appeler la transition vers la valeur de déplacement spécifiée (avant ou en arrière) ou à l'adresse de mémoire spécifiée. La valeur de déplacement ou la nouvelle valeur d'adresse est indiquée comme un opérateur d'entrée.

Les commandes de transition conditionnelle font valoir que la transition n'est pas toujours, mais uniquement lors de l'exécution des conditions spécifiées. En tant que telles conditions, les valeurs de drapeau dans le registre des États du processeur agissent généralement.PSW. ). C'est-à-dire que la condition de transition est le résultat de l'opération précédente modifiant les valeurs des drapeaux. Les conditions de transition totales peuvent être de 4 à 16. Plusieurs exemples d'équipes de transition conditionnelle:

­ transition, si zéro;

­ transition, sinon zéro;

­ transition s'il y a un débordement;

­ transition s'il n'y a pas de débordement;

­ transition si plus zéro;

­ transition, si moins ou égale à zéro.

Si la condition de transition est exécutée, elle est téléchargée sur le nouveau registre de la commande de valeur. Si la condition de transition n'est pas exécutée, le compteur de commande augmente et le processeur sélectionne et effectue la commande suivante dans l'ordre.

Surtout pour vérifier les conditions de transition, la commande de comparaison (SMR) est appliquée précédant la commande de transition conditionnelle (ou même plusieurs équipes de transition conventionnelles). Mais les drapeaux peuvent être installés et toute autre commande, telle qu'une commande de transfert de données, toute commande arithmétique ou logique. Il convient de noter que les commandes de transition du drapeau eux-mêmes ne changent pas de manière à mettre plusieurs commandes de transition l'une après l'autre.

Un endroit spécial parmi les équipes de transition est occupé par des commandes d'interruption. Ces commandes comme opérande d'entrée nécessitent un numéro d'interruption (adresse de vecteur).

Production:

La langue d'assembleur est une présentation symbolique de la langue de la machine. Langue d'assembleur pour chaque type d'ordinateur. Le programme Assembleur est un ensemble de blocs de mémoire appelés segments de mémoire. Chaque segment contient un ensemble de suggestions linguistiques, qui occupe chacune une ligne distincte du code de programme. Les suggestions de l'assembleur sont quatre types: équipes ou instructions, macros, directives, lignes de commentaires.

Toutes les lettres latines sont admissibles lors de l'écriture du texte des programmes: A-Z., A-Z.. Dans ce cas, les lettres majuscules et minuscules sont considérées comme équivalentes; Chiffres OT 0 avant que 9 ; panneaux ? , @ , $ , _ , & ; diviseurs , . () < > { } + / * % ! " " ? = # ^ .

Les types suivants d'opérateurs d'assembleurs et de règles syntaxiques pour la formation d'expressions d'assembleurs sont utilisés. Opérateurs arithmétiques, Déclarations de quart, opérateurs de comparaison, opérateurs logiques, opérateur d'index, opérateur de redéfinition de type, opérateur de redéfinition de segment, opérateur de nommage de type structure, opérateur d'obtention d'un composant de segment d'une adresse d'expression, d'un opérateur de déplacement d'expression.

Le système de commande est divisé en 8 groupes principaux.

­ Questions de contrôle:

1 Quelle est la langue d'assembleur?

2 Quels caractères peuvent être utilisés pour enregistrer des commandes sur l'assembleur?

3 Quelles sont les étiquettes et leur rendez-vous?

4 Calculez la structure des commandes de l'assembleur.

5 Liste 4 types de suggestions d'assembleur.

Université nationale d'Ouzbékistan nommée d'après Mirzo Ulugbek

Faculté de technologie informatique

Sur le sujet: analyse sémantique du fichier EXE.

Effectué:

Tachkent 2003.

Préface.

Structure de l'assembleur et de l'équipe.

Structure exe -file (analyse sémantique).

La structure du fichier COM.

Le principe d'action et la propagation du virus.

Désassemble.

Programmes.

Préface

La profession de programmeur est incroyable et unique. De nos jours, la science et la vie ne peuvent être soumises sans la technologie la plus récente. Tout ce qui est associé à l'activité humaine ne se produit pas sans technologie informatique. Et cela contribue à son développement élevé et à son perfection. Laissez le développement des ordinateurs personnels ne commence pas si longtemps, mais pendant cette période, il y avait des étapes colossales sur les produits logiciels et pendant une longue période, ces produits seront largement utilisés. La zone associée aux connaissances des ordinateurs a subi une explosion, ainsi que la technologie correspondante. Si vous ne prenez pas une fête commerciale en considération, nous pouvons dire qu'il n'y a pas d'activités professionnelles dans ce domaine d'activité professionnelle. Beaucoup élèvent des programmes non pas dans des bénéfices ou des gains, mais selon leur propre volonté, par passion. Bien entendu, cela ne devrait pas affecter la qualité du programme, et dans cette affaire, afin de parler de «entreprise» de la qualité de la qualité de l'exécution, dans un travail stable et répond à toutes les exigences de la modernité. Ici, il convient également de noter l'apparition de microprocesseurs dans les années 60, qui sont venus remplacer le grand nombre de lampes. Certaines variétés de microprocesseurs sont très différentes les unes des autres. Ces microprocesseurs sont différents des uns des autres des équipes de décharge et de systèmes intégrés. Le plus courant tel que: Intel, IBM, Celeron, AMD, etc. Tous ces processeurs sont liés à l'architecture développée des processeurs Intel. La propagation des micro-ordinateurs était la raison de la révision de l'attitude envers la langue d'assembleur pour deux raisons principales. Premièrement, les programmes écrits dans la langue d'assembleur nécessitent beaucoup moins de mémoire et de temps d'exécution. Deuxièmement, la connaissance de la langue d'assembleur et du code de machine résultant donne une compréhension de l'architecture de la machine, qui est peu susceptible d'être fournie lors de son travail dans une langue de haut niveau. Bien que la plupart des spécialistes de logiciels se développent dans des langages de haut niveau, tels que Pascal, C ou Delphi, ce qui est plus facile lorsque les programmes d'écriture, le logiciel le plus puissant et efficace est entièrement ou partiellement écrit dans la langue des assembleurs. Les langues de haut niveau ont été conçues pour éviter des caractéristiques techniques spéciales d'ordinateurs spécifiques. Et la langue d'assembleur, à son tour, est conçue pour des spécificités de processeur spécifiques. Par conséquent, afin d'écrire un programme dans la langue d'assembleur pour un ordinateur particulier, vous devez connaître son architecture. De nos jours, le type de logiciel principal est le fichier EXE. Compte tenu des aspects positifs de cela, l'auteur du programme peut être confiant dans son intégrité. Mais souvent parfois ce n'est pas le cas. Il y a aussi un désassembly. Avec l'aide d'un désassembleur, vous pouvez apprendre les interruptions et les codes de programme. Une personne désassemblée dans l'assembleur ne sera pas difficile de refaire tout le programme à son goût. Peut-être donc le problème le plus non résolu - le virus. Pourquoi les gens écrivent-ils un virus? Certains posent cette question avec surprise, certaines avec colère, mais néanmoins, les gens continuent d'exister, qui sont intéressés par cette tâche qui ne sont pas du point de vue de causer des dommages, mais d'intérêt pour la programmation systémique. Cruses d'écriture pour diverses raisons. Un ressemble à des défis du système, d'autres améliorent leurs connaissances dans l'assembleur. Je vais essayer de définir tout cela dans mon travail de cours. Il a également déclaré non seulement la structure du fichier EXE, mais également sur la langue des assembleurs.

^ Langage assemblant.

Il est intéressant de suivre, à partir du moment de l'apparition des premiers ordinateurs et de se terminer par la journée d'aujourd'hui, pour la transformation des idées sur la langue des assembleurs des programmeurs.

Une fois que l'assembleur a été la langue, sans savoir qu'il était impossible de faire un ordinateur pour faire quelque chose d'utile. Progressivement, la situation a changé. Des moyens plus pratiques de communication avec un ordinateur sont apparus. Mais, contrairement à d'autres langues, l'assembleur n'est pas mort, il ne pouvait donc pas le faire en principe. Pourquoi? À la recherche de la réponse, nous allons essayer de comprendre quel type de langage assembleur est en général.

Si brièvement, la langue d'assembleur est une présentation symbolique de la langue de la machine. Tous les processus de la machine au niveau du matériel le plus bas et le matériel ne sont entraînés que par des commandes (instructions) de la langue de la machine. Il est clair que, malgré le nom général, la langue d'assembleur pour chaque type d'ordinateur. Ceci s'applique à l'apparition de programmes écrits dans l'assembleur et des idées, le reflet dont cette langue est.

Pour résoudre réellement les problèmes associés à l'équipement (ou même, en outre, en fonction de l'équipement, comme par exemple, d'améliorer la vitesse du programme), il est impossible sans la connaissance de l'assembleur.

Un programmeur ou tout autre utilisateur peut utiliser des outils de haut niveau, jusqu'aux programmes destinés à la construction de mondes virtuels et, peut-être, pas même à soupçonner que l'ordinateur n'effectue réellement les commandes de langue sur lesquelles son programme est écrit et leur présentation transformée. sous forme de séquences de communication ennuyeuses et tristes d'une machine de langue complètement différente. Et maintenant, nous allons imaginer qu'un tel utilisateur a un problème non standard ou tout simplement pas détenu quelque chose. Par exemple, son programme devrait fonctionner avec un dispositif inhabituel ou effectuer d'autres actions nécessitant une connaissance des principes de l'équipement informatique. Peu importe comment Smart est un programmeur, peu importe la qualité de la langue dans laquelle il a écrit son merveilleux programme, sans connaître l'assembleur, il ne pouvait pas faire. Et ce n'est pas par hasard que presque tous les compilateurs de langages de haut niveau contiennent les moyens de communication de leurs modules avec des modules sur l'assembleur ou supportent l'accès au niveau de programmation d'assembleur.

Bien sûr, l'heure de l'universal de l'ordinateur a déjà été adoptée. Comme ils disent qu'il est impossible de discuter de l'immense. Mais il y a quelque chose de commun, une sorte de fondation sur laquelle une formation informatique grave est en construction. Cette connaissance des principes de l'ordinateur, de son architecture et de la langue d'assembleur en tant que réflexion et incarnation de ces connaissances.

Un ordinateur moderne typique (basé sur I486 ou Pentium) est constitué des composants suivants (Fig. 1).

Figure. 1. Dispositifs informatiques et périphériques

Figure. 2. Schéma structurel d'un ordinateur personnel

À partir de la figure (figure 1), on peut voir que l'ordinateur est composé de plusieurs périphériques physiques, chacun d'entre eux étant connecté à un bloc appelé le système. Si vous discutez logiquement, il est clair qu'il joue le rôle d'un certain périphérique de coordination. Regardons à l'intérieur de l'unité système (vous n'avez pas besoin d'essayer de pénétrer à l'intérieur du moniteur - il n'y a rien d'intéressant, en plus de cela est dangereux): ouvrez le boîtier et voyez des planches, des blocs, des câbles de connexion. Pour comprendre leur objectif fonctionnel, examinons le schéma structurel d'un ordinateur typique (Fig. 2). Il ne revendique pas une précision inconditionnelle et est destinée à montrer l'objectif, la relation et la composition typique des éléments de l'ordinateur personnel moderne.

Discutons du schéma de la Fig. 2 dans plusieurs styles non conventionnels.
C'est typique, rencontrant quelque chose de nouveau, recherchez certaines associations qui peuvent l'aider à connaître l'inconnu. Quelles associations est un ordinateur? Par exemple, l'ordinateur est souvent associé à la personne lui-même. Pourquoi?

Homme créant un ordinateur quelque part dans les profondeurs d'elle-même pensa qu'il créerait quelque chose comme lui-même. L'ordinateur a la perception des informations du monde extérieur - est un clavier, une souris, des périphériques de stockage sur des disques magnétiques. En figue. 2 Ces organes sont situés à droite des pneus système. L'ordinateur dispose des organes "digestifs" que les informations reçues sont un processeur central et une RAM. Et enfin, l'ordinateur a des organes vocaux qui représentent les résultats du traitement. Ce sont également certains des appareils à droite.

Les ordinateurs modernes, bien sûr, loin d'une personne. Ils peuvent être comparés aux créatures interagissant avec le monde extérieur au niveau d'un grand nombre de réflexes inconditionnels mais limités.
Cet ensemble de réflexes forme un système de commandes de la machine. Sur le niveau élevé, vous ne communiquez pas avec l'ordinateur, en fin de compte, tout se présente à la séquence ennuyeuse et monotone des commandes de la machine.
Chaque équipe de machine est une sorte d'irritant pour exciter un ou plusieurs réflexes inconditionnels. La réaction à ce stimulus est toujours sans ambiguïté et «cousue» dans le bloc de microcomandie sous la forme d'un micrologiciel. Ce micrologiciel implémente des actions à mettre en œuvre la commande de la machine, mais déjà au niveau du signal soumis à certains circuits logiques de l'ordinateur, entraînant ainsi divers sous-systèmes informatiques. C'est le principe de gestion dite du micrologiciel.

Continuer l'analogie avec une personne, nous notons: Pour que l'ordinateur soit bien manger correctement, de nombreux systèmes d'exploitation sont inventés, des compilateurs de centaines de langages de programmation, etc. Mais tous sont, en fait, seulement un plat, sur lequel de la nourriture (Programmes) est livré par des règles définies estomac (ordinateur). Seul l'estomac de l'ordinateur aime la nourriture diététique et monotone - donnez-lui des informations structurées, sous la forme de séquences strictement organisées de zéros et d'unités dont les combinaisons et constituent la langue de la machine.

Ainsi, à l'extérieur, étant un polyglot, l'ordinateur ne comprend qu'une seule langue - la langue des commandes de la machine. Bien sûr, pour communiquer et travailler avec un ordinateur, il n'est pas nécessaire de connaître cette langue, mais presque tout programmeur professionnel plus tôt ou ultérieur est confronté à la nécessité d'étudier. Heureusement, le programmeur n'a pas besoin d'essayer de compromettre la valeur de diverses combinaisons de nombres binaires, car dans les années 50, les programmeurs ont commencé à utiliser l'analogue symbolique de la langue de la machine pour la programmation, qui s'appelait la langue d'assembleur. Cette langue reflète avec précision toutes les caractéristiques de la langue des moteurs. C'est pourquoi, contrairement aux langues de haut niveau, la langue des assembleurs pour chaque type d'ordinateur est la vôtre.

Parmi tout ce qui précède, nous pouvons conclure que, depuis la langue d'assembleur de l'ordinateur "Native", le programme le plus efficace ne peut être écrit que sur celui-ci (à condition qu'il écrive un programmeur qualifié). Il y a un petit "mais": c'est très laborieux, nécessitant une grande attention et une expérience pratique dans le processus. Par conséquent, l'assembleur est écrit dans le programme principal qui devrait assurer un travail efficace avec le matériel. Parfois, l'assembleur est écrit au moment de l'exécution ou de la mémoire de dépenser. Par la suite, ils sont établis sous la forme de sous-routines et sont combinés avec le code dans la langue de haut niveau.

Pour étudier la langue d'assembleur de tout ordinateur, il est logique de démarrer uniquement après avoir découvert que la partie de l'ordinateur est laissée visible et accessible à la programmation dans cette langue. Il s'agit du modèle logiciel dite informatique, dont une partie est un modèle de logiciel de microprocesseur contenant 32 registres d'une manière ou d'une autre disponible pour une utilisation par le programmeur.

Ces registres peuvent être divisés en deux grands groupes:

^ 16 registres d'utilisateur;

16 registres du système.

Dans les programmes de la langue des assembleurs, les registres sont utilisés de manière très intensive. La plupart des registres ont un objectif fonctionnel défini.

Comme le nom suit, les registres de l'utilisateur sont appelés car le programmeur peut les utiliser lors de la rédaction de ses programmes. Ces registres comprennent (fig. 3):

Huit registres 32 bits pouvant être utilisés par les programmeurs pour stocker des données et des adresses (elles sont également appelées registres à usage général (RON)):

six registres de segment: CS, DS, SS, ES, FS, GS;

registres de statut et de gestion:

Les drapeaux EFlags / drapeaux Registre des drapeaux;

Registre du pointeur du pointeur EIP / IP.

Figure. 3. Registres utilisateur des microprocesseurs I486 et Pentium

Pourquoi beaucoup de ces registres sont montrés avec une caractéristique de séparation inclinée? Non, ce ne sont pas des registres différents sont des parties d'un grand registre 32 bits. Ils peuvent être utilisés dans le programme comme des objets individuels. Ceci est fait pour assurer la performance des programmes écrits pour les plus jeunes modèles de microprocesseurs Intel de 16 bits, à partir de I8086. Les microprocesseurs I486 et Pentium ont principalement des registres 32 bits. Leur nombre, à l'exception des registres segments, les mêmes que dans I8086, mais la dimension est plus grande, qui se reflète dans leurs désignations - elles ont
préfixe E (prolongé).

^ Général registres
Tous les registres de ce groupe vous permettent de contacter nos parties "plus jeunes" (voir Fig. 3). Compte tenu de ce dessin, remarquez qu'il est possible d'utiliser uniquement pour l'auto-adressage des parties plus jeunes et 8 bits de ces registres. Les 16 plus âgés de ces registres tels que des objets indépendants ne sont pas disponibles. Ceci est fait comme indiqué ci-dessus, pour la compatibilité avec les modèles plus jeunes de microprocesseurs Intel de 16 bits.

Nous énumérons les registres appartenant au groupe de registres à usage général. Étant donné que ces registres sont physiquement situés dans un microprocesseur à l'intérieur d'un appareil arithmétique et logique (AllU), ils sont également appelés registres par allu:

eAX / AX / AH / AL / AL (Enregistrement de l'accumulateur) - Batterie.
Il est utilisé pour stocker des données intermédiaires. Dans certaines équipes, l'utilisation de ce registre est requise;

eBX / BX / BH / BL (registre de base) - registre de base.
Il est utilisé pour stocker l'adresse de base d'un objet en mémoire;

eCX / CX / CH / CL (registre de comptage) est un compteur de registre.
Utilisé dans les commandes qui produisent des actions répétables. Son utilisation est souvent implicitement et cachée dans l'algorithme de l'équipe concernée.
Par exemple, l'organisation du cycle de boucle, en plus de transmettre la gestion de la commande, située à une autre adresse, analyse et réduit la valeur du registre ECX / CX;

eDX / DX / DH / DL (Registre des données) - Registre des données.
Tout comme le registre EAX / AX / AH / AL, il stocke des données intermédiaires. Dans certaines équipes, son utilisation est obligatoire; Pour certaines commandes, cela est implicitement.

Les deux registres suivants sont utilisés pour soutenir les opérations dites de la chaîne, c'est-à-dire des opérations produisant un traitement séquentiel des chaînes d'éléments, chacun pouvant avoir une longueur de 32, 16 ou 8 bits:

eSI / SI (registre d'index de source) - index source.
Ce registre dans les opérations de chaîne contient l'adresse actuelle de l'élément de la chaîne source;

eDI / DI (registre d'index de destination) - Index du récepteur (destinataire).
Ce registre dans les opérations de chaîne contient l'adresse actuelle dans la chaîne du récepteur.

Dans l'architecture des microprocesseurs, une telle structure de données est prise en charge sur le niveau logiciel et matériel comme pile. Pour travailler avec une pile dans le système de commande de microprocesseur, il existe des commandes spéciales et dans le modèle logiciel de microprocesseur, il existe des registres spéciaux:

eSP / SP (Enregistrement du pointeur de pile) - Enregistrement du pointeur de pile.
Contient le sommet de pile dans le segment de pile actuel.

eBP / BP (Enregistrement de pointeur de base) - Inscrivez-vous du pointeur de la base du cadre de la pile.
Conçu pour organiser l'accès arbitraire aux données à l'intérieur de la pile.

La pile s'appelle la zone de programme pour un stockage temporaire de données arbitraires. Bien sûr, les données peuvent également être enregistrées dans le segment de données, mais dans ce cas, il est nécessaire de démarrer une cellule de mémoire nommée distincte pendant cette période, ce qui augmente la taille du programme et le nombre de noms utilisés. La commodité de la pile est que sa zone est utilisée à plusieurs reprises et les sauve de là à l'aide de commandes de pression et de pop efficaces sans spécifier de noms.
La pile est traditionnellement utilisée, par exemple, pour enregistrer le contenu des registres utilisés par le programme, avant d'appeler le sous-programme, qui utilisera à son tour les registres du processeur "à titre personnel". Le contenu initial des registres est projeté de la pile après son retour du sous-programme. Une autre réception commune est le transfert du sous-programme des paramètres requis par celui-ci à travers la pile. Le sous-programme, sachant, dans quel ordre sont placés sur la pile de paramètres, peuvent les choisir à partir de là et l'utiliser lors de l'exécution. Une caractéristique distinctive de la pile est l'ordre particulier de l'échantillon des données contenues, seul l'élément supérieur est disponible sur la pile à tout moment, c'est-à-dire. L'élément chargé dans la pile en dernier. Le déchargement de la pile de l'élément supérieur rend l'élément suivant disponible. Les éléments de la pile sont situés dans la zone de mémoire attribuée sous la pile, à partir du bas de la pile (c'est-à-dire de son adresse maximale) sur des adresses réduites systématiquement. L'adresse de l'élément supérieur et disponible est stockée dans le registre des indicateurs de pile SP. Comme toute autre zone de la mémoire du programme, la pile doit entrer dans un segment ou former un segment distinct. Dans tous les cas, l'adresse de segment de ce segment est placée dans le registre du segment SS Stack. Ainsi, une paire de registres SS: SP décrivent l'adresse d'une cellule de pile abordable: l'adresse de segment de la pile est stockée dans SS et dans SP - le déplacement de ce dernier stocké dans la pile de ceci (Fig. 4, a ). Veuillez noter que dans l'état initial, le pointeur de pile SP indique une cellule sous le bas de la pile et non incluse.

Figure 4. Organisation de la pile: A - Etat initial, B - Après chargement d'un élément (dans cet exemple - le contenu de l'enregistrement AH), lors de la chargement du deuxième élément (le contenu du registre DS), g - après déchargement Un élément, D - après déchargement de deux éléments et retourner à son état d'origine.

Chargement de la pile est effectué par une commande spéciale de fonctionnement avec pile push (poussée). Cette commande réduit d'abord le contenu du pointeur de pile à 2, puis place l'opérande à l'adresse de SP. Si, par exemple, nous voulons enregistrer temporairement le contenu de l'enregistrement AH sur la pile, vous devez exécuter la commande.

La pile va à l'état montré à la Fig. 1.10, b. On peut voir que le pointeur de la pile est décalé sur deux octets vers le haut (vers des adresses plus petites) et cette adresse enregistre la commande d'opérande poussant. Commande de téléchargement suivante sur la pile, par exemple,

sera la pile dans l'état montré à la Fig. 1.10, c. La pile stockera maintenant deux éléments et seul le supérieur sera abordable, ce qui indique le pointeur de pile SP. Si, après un certain temps, nous devions restaurer le contenu d'origine enregistré dans la pile de registres, nous devons exécuter des commandes de déchargement de la pile pop (Push Out):

pop ds.
pop Axe.

Quelle taille devrait être la pile? Cela dépend de la manière dont il est utilisé de manière intensive dans le programme. Si, par exemple, il est prévu de stocker un tableau de 10 000 octets dans la pile, la pile ne doit pas être inférieure à cette taille. Dans le même temps, il convient de garder à l'esprit que, dans certains cas, la pile est automatiquement utilisée par le système, en particulier, lors de l'exécution de la commande INT de 21h d'interruption. Selon cette commande, le processeur place d'abord l'adresse de retour sur la pile, puis DOS envoie le contenu du même registre et d'autres informations relatives au programme interrompu. Par conséquent, même si le programme n'utilise pas du tout la pile, il devrait toujours être présent dans le programme et n'avoir pas moins de plusieurs dizaines de mots. Dans notre premier exemple, nous avons pris sous la pile de 128 mots, ce qui est certainement suffisant.

^ Structure du programme sur assembleur

Le programme Assembleur est un ensemble de blocs de mémoire appelés segments de mémoire. Le programme peut consister en un ou plusieurs segments de blocs. Chaque segment contient un ensemble de suggestions linguistiques, qui occupe chacune une ligne distincte du code de programme.

Les offres d'assembleur sont quatre types:

commandes ou instructions qui sont des analogues symboliques de commandes de la machine. Dans le processus de diffusion, les instructions de l'assembleur sont transformées en commandes correspondantes du système de commande de microprocesseur;

macrocomands - la proposition définie des propositions de texte du programme remplacées lors de la diffusion par d'autres propositions;

directives qui constituent une indication d'un traducteur d'assembleur pour effectuer certaines actions. Les directives n'ont pas d'analogues dans la représentation de la machine;

rangées de commentaires contenant des caractères, y compris les lettres de l'alphabet russe. Les commentaires sont ignorés par le traducteur.

^ Syntaxe d'assembleur

Les propositions qui composent le programme peuvent être une conception syntaxique, une équipe correspondante, une macrokomand, une directive ou un commentaire. Pour que le traducteur de l'assembleur puisse les reconnaître, ils doivent être formés par certaines règles syntaxiques. Pour ce faire, il est préférable d'utiliser une description formelle de la syntaxe de la langue comme les règles de la grammaire. Les moyens les plus courants d'une telle description du langage de programmation sont des graphiques syntaxiques et des formes étendues de Bakusa Naur. Pour une utilisation pratique, les diagrammes syntaxiques sont plus pratiques. Par exemple, la syntaxe des suggestions d'assembleur peut être décrite à l'aide de diagrammes syntaxiques indiqués dans les figures suivantes.

Figure. 5. Format d'offre d'assembleur

Figure. 6. Directive Format

Figure. 7. Format de commande et macros

Sur ces dessins:

le nom de l'étiquette est l'identifiant, dont la valeur est l'adresse du premier octet de la proposition du texte source du programme, qu'elle dénote;

le nom est un identifiant qui distingue la présente directive d'autres directives du même nom. À la suite de l'assembleur de traitement, une directive spécifique peut être attribuée à certaines caractéristiques;

le code de fonctionnement (CPC) et la directive sont des désignations mnémoniques de l'équipe de machine, des macros ou des directives de traducteur concernées;

opérances - Parties de l'équipe, des macro commandants ou des directives d'assembleur indiquant des objets sur les actions effectuées. Les opérandes d'assembleur sont décrites par des expressions avec des constantes numériques et de texte, des marques et des identificateurs de variables utilisant des opérations et des mots réservés.

^ Comment utiliser des graphiques syntaxiques? C'est très simple: pour cela, il vous suffit de trouver, puis de passer à travers le chemin de la connexion du graphique (à gauche) à sa sortie (à droite). Si ce chemin existe, l'offre ou la conception est syntaxiquement correcte. S'il n'y a pas de tel chemin, cela signifie que le compilateur n'acceptera pas cette conception. Lorsque vous travaillez avec des graphiques syntaxiques, nous accordons une attention particulière à la direction du contournement, indiquée par les flèches, car parmi les chemins, il peut y avoir celles-ci pour lesquelles vous pouvez aller à droite. En substance, les graphiques syntaxiques reflètent la logique du traducteur lorsque les propositions d'entrée du programme isolent.

Symboles autorisés Lorsque vous écrivez des textes de texte sont les suivants:

Toutes les lettres latines: A-Z, A-Z. Dans ce cas, les lettres majuscules et minuscules sont considérées comme équivalentes;

Nombres de 0 à 9;

Signes ?,, $, $, _ et;

Diviseurs ,. ()< > { } + / * % ! " " ? \ = # ^.

Les suggestions de l'assembleur sont formées à partir de la Lexeme, qui sont des séquences syntaxiquement inséparables de symboles autorisés de la langue qui ont du sens pour le traducteur.

Les lexes sont:

identificateurs - Séquences de caractères autorisés utilisés pour désigner de tels objets d'objet tels que des codes de fonctionnement, des noms de variable et du nom de l'étiquette. La règle d'enregistrement d'identifiant est la suivante: l'identifiant peut être constitué d'un ou de plusieurs caractères. En tant que caractères, vous pouvez utiliser les lettres de l'alphabet, des numéros et de certains signes spéciaux - _ ,?, $, @. L'identifiant ne peut pas démarrer le symbole du chiffre. La longueur de l'identifiant peut comporter jusqu'à 255 caractères, bien que le traducteur ne perçoit que les 32 premiers, et le reste ignore. Vous pouvez régler la longueur d'identificateurs possibles à l'aide de l'option d'invite de commande MV. En outre, il est possible de spécifier le traducteur pour distinguer les lettres majuscules et minuscules ou ignorer leur différence (ce qui est fait par défaut).

^ Commandes d'assembleur.

Les commandes d'assembleur divulguent la possibilité de transférer leurs besoins à l'ordinateur, le mécanisme de gestion du programme (cycles et transitions) pour les comparaisons logiques et l'organisation logicielle. Cependant, les tâches programmables sont rarement si faciles. La plupart des programmes contiennent un certain nombre de cycles dans lesquels plusieurs commandes sont répétées jusqu'à ce qu'une certaine exigence soit accomplie, et diverses vérifications qui déterminent lesquelles de plusieurs actions doivent être effectuées. Certaines commandes peuvent transmettre le contrôle en modifiant la séquence normale des étapes modifier directement la valeur de décalage dans le pointeur de commande. Comme mentionné précédemment, il existe différentes équipes pour divers processeurs, nous examinerons un certain nombre de commandes pour les processeurs 80186, 80286 et 80386.

Pour décrire le statut des drapeaux après avoir effectué une équipe, nous utiliserons l'échantillon de la table reflétant la structure des drapeaux EFLAGS:

En bas de cette table, les valeurs des drapeaux sont données après exécution de la commande. Dans le même temps, la notation suivante est utilisée:

1 - Après avoir exécuté la commande, le drapeau est défini (égal à 1);

0 - Après avoir exécuté la commande, le drapeau est réinitialisé (égal à 0);

r - la valeur du drapeau dépend du résultat du travail de l'équipe;

Après avoir exécuté la commande, le drapeau n'est pas défini;

espace - Après avoir exécuté la commande, le drapeau ne change pas;

Pour représenter les opérandes des diagrammes syntaxiques, la notation suivante est utilisée:

r8, R16, R32 - Opérande dans l'une des registres de taille d'octets, mot ou double mot;

m8, m16, m32, m48 - opérande dans la taille de l'octet de mémoire, mot, mot double ou 48 bits;

i8, I16, I32 - Taille d'octets d'opérande directe, mot ou double mot;

a8, A16, A32 - adresse relative (décalage) dans le segment de code.

Equipes (ordre alphabétique):

* Ces commandes sont décrites en détail.

Ajouter.
(Une addition)

Une addition

^ Diagramme d'équipe:

ajouter un récepteur, source

Objet: Ajout de deux opérandes Source and Récepteur octet, mot ou double mot.

Algorithme de travail:

pliez les opérandes source et récepteur;

enregistrer le résultat de l'ajout au récepteur;

installer des drapeaux.

Statut du drapeau après exécution de la commande:

Application:
La commande Ajouter est utilisée pour ajouter deux opérandes entier. Le résultat de l'addition est placé à l'adresse du premier opérande. Si le résultat de l'addition est sur la bordure du récepteur d'opérande (débordement), considérez cette situation en analysant le drapeau CF et l'application possible possippée de la commande ADC. Par exemple, des valeurs posées dans le registre de la hache et la zone de mémoire ch. Lors de l'addition, vous devez envisager la possibilité de débordement.

Inscrivez-vous plus Registre ou Memory:

| 000000DW | MODREGR / RM |

Register Ax (Al) Plus Valeur directe:

| 0000010W | --Data-- | Données, si w \u003d 1 |

Inscrivez-vous ou mémoire plus valeur directe:

| 100000SW | mod000r / m | --Data-- | Données, si bw \u003d 01 |

Appel
(Appel)

Procédure d'appel ou tâche

^ Diagramme d'équipe:

Objectif:

transfert du contrôle d'une procédure étroite ou à long terme avec mémorisation dans la pile d'adresses de point de retour;

tâches de commutation.

Algorithme de travail:
déterminé par le type d'opérande:

Étiquette Messenger - Le contenu du pointeur de commande EIP / IP est entré dans la pile et la nouvelle adresse d'adresse est chargée dans le même registre, l'adresse correspondant à l'étiquette;

Étiquette d'étiquette - Le contenu du pointeur de commande EIP / IP et CS est entré dans la pile. Ensuite, les mêmes registres sont chargés de nouvelles valeurs d'adresses correspondant à la balise longue;

R16, 32 ou M16, 32 - Déterminez le registre ou la cellule de mémoire contenant des décalages dans le segment de commande actuel où le contrôle est transmis. Lors du contrôle du contrôle, le contenu du pointeur de commande EIP / IP est entré;

Pointeur de mémoire - Définit une cellule de mémoire contenant 4 ou 6 octets sur la procédure appelée. La structure d'un tel pointeur 2 + 2 ou 2 + 4 octets. L'interprétation d'un tel pointeur dépend du mode de fonctionnement du microprocesseur:

^ Drapeau STATLA Après avoir exécuté la commande (sauf pour la tâche de commutation):

l'exécution de l'équipe n'affecte pas les indicateurs

Lorsque vous changez la tâche, les valeurs d'indicateur sont modifiées conformément aux informations de registre EFLAGS dans le segment d'état TSS de la tâche à laquelle la commutation.
Application:
La commande d'appel vous permet d'organiser une commande flexible et multivariée au sous-programme tout en enregistrant l'adresse du point de retour.

À propos de D (quatre formats):

Adresse directe dans le segment:

| 11101000 | Disp-Bas | Diep-High |

Adresse indirecte dans le segment:

| 11111111 | MOD010R / M |

Adresse indirecte entre les segments:

| 11111111 | MOD011R / M |

Adresse directe entre segments:

| 10011010 | Offset-Low | Offset-High | SEG-LOW | SEG-HIGH |

Cmp
(Comparer les opérandes)

Comparaison des opérandes

^ Diagramme d'équipe:

cMP Operand1, Opérande2

Objet: Comparaison de deux opérandes.

Algorithme de travail:

effectuer la soustraction (opérande1 operand2);

selon le résultat, installez des indicateurs, de l'opérande1 et de l'opérande2 ne pas changer (c'est-à-dire que le résultat n'est pas mémorisé).

Application:
Cette commande est utilisée pour comparer les deux opérandes en soustrayant, tandis que les opérandes ne changent pas. Selon les résultats de la commande, les drapeaux sont installés. La commande CMP s'applique aux commandes de transition conditionnelle et à la commande d'installation d'octet par la valeur SETCC.

À propos de K o D (trois formats):

Inscrivez-vous ou enregistrez la mémoire:

| 001110DW | MODREGR / M |

Valeur directe avec Register Ax (al):

| 0011110W | --Data-- | Données, si w \u003d 1 |

Valeur directe avec registre ou mémoire:

| 100000SW | MOD111R / M | --DATA-- | DATA, IF SW \u003d 0 |

DÉC
(Décrément d'opérande de 1)

Réduire l'opérande par unité

^ Diagramme d'équipe:

décérer

Objectif: Réduire la valeur de l'opérande en mémoire ou enregistrer par 1.

Algorithme de travail:
la commande déduit 1 de l'opérande. Statut du drapeau après exécution de la commande:

Application:
La commande DEC est utilisée pour réduire la valeur des octets, des mots, des mots doubles en mémoire ou un registre par unité. Dans le même temps, remarquez que la commande n'affecte pas le drapeau des FC.

Inscrivez-vous: | 01001REG |

^ Registre ou mémoire: | 1111111W | MOD001R / M |

Diviser
(Diviser non signé)

Décision insalable

Diagramme d'équipe:

divider

Objet: Effectuez l'opération de division deux valeurs non signées binaires.

^ Algorithme de travail:
Pour la commande, il est nécessaire de spécifier deux opérandes - Divisez et diviseur. Le dividende est défini implicitement et sa taille dépend de la taille du diviseur, qui est spécifiée dans la commande:

si un diviseur dans les octets, le dividende doit être situé dans le registre de la hache. Après l'opération, le privé est placé en Al et le résidu de Ah;

si le diviseur est la taille du mot, le dividende doit être situé dans la paire de registres DX: hache, et la partie la plus jeune du dividende est à la hache. Après l'opération, le privé est placé dans la hache et le résidu de DX;

si un diviseur à double mot, le divisible doit être situé dans la paire de registres EDX: EAX et la partie la plus jeune de la division se trouve dans EAX. Après l'opération, le privé est placé dans EAX et le résidu est à EDX.

^ Drapeau STATLA Après avoir exécuté la commande:

Application:
L'équipe effectue une division entière d'opérandes avec la délivrance du résultat de la division sous la forme d'un séjour privé et de résidus de division. Lors de l'exécution d'une opération de division, une situation exceptionnelle peut se produire: 0 - erreur de division. Cette situation se produit dans l'un des deux cas: le diviseur est 0 ou privé trop grand pour son placement dans le registre EAX / AX / AL.

Oh k à propos de D:

| 1111011W | MOD110R / M |

Int.
INTERROMPRE)

Sous-programme d'interruption d'interruption d'appel

^ Diagramme d'équipe:

int numéro_name

Objectif: appeler un sous-programme de service d'interruption avec un numéro d'interruption spécifié par l'opérande de commande.

^ Algorithme de travail:

Écrivez sur les drapeaux eFlags / drapeaux et l'adresse de retour. Lors de la récupération de l'adresse de retour, le contenu du registre du segment CS est d'abord enregistré, puis le contenu du pointeur de commande EIP / IP;

réinitialiser si et tf dans zéro drapeaux;

contrôle de transfert au programme de traitement d'interruption avec le nombre spécifié. Le mécanisme de contrôle dépend du mode de fonctionnement du microprocesseur.

^ Drapeau STATLA Après avoir exécuté la commande:

Application:
Comme on peut le voir de la syntaxe, il y a deux formes de cette commande:

int 3 - a son propre code individuel de l'opération 0CCH et prend un octet. Cette circonstance le rend très pratique à utiliser dans divers logiciels de dérivangeurs pour installer des points d'interruption en remplaçant le premier octet de toute commande. Le microprocesseur, rencontré dans la commande de séquence de commande avec le code de fonctionnement 0CCH, provoque un programme de traitement d'interruption avec un vecteur numéro 3, qui sert à communiquer avec le débogueur de programme.

La deuxième forme de la commande occupe deux octets, dispose d'un code de fonctionnement 0CDH et vous permet d'initier un appel de la routine de traitement d'interruption avec un numéro de vecteur compris dans la plage de 0 à 255. Les caractéristiques de la gestion de la gestion, comme indiqué, dépendent du mode de fonctionnement du microprocesseur.

Sur les (deux formats):

Inscrivez-vous: | 01000REG |

^ Registre ou mémoire: | 1111111W | MOD000R / M |

JCC.
Jcxz / jecxz.
(Saut si condition)

(Sauter si cx \u003d zéro / saut si ecx \u003d zéro)

Transition si une condition est satisfaite

Transition si cx / ecx est zéro

^ Diagramme d'équipe:

tag JCC
étiquette JCXZ
jecxz tag

Objectif: la transition dans le segment de commande en cours en fonction de certaines conditions.

^ Algorithme de commande (sauf jcxz / jecxz):
Vérification de l'état des indicateurs en fonction du code de l'opération (il reflète la condition vérifiable):

si la condition de test est vraiment vraie, passez à la cellule désignée par l'opérande;

si la condition valide est fausse, transférez la commande suivante.

Algorithme de travail d'équipe JCXZ / JECXZ:
Vérifiez les conditions d'égalité zéro du contenu du registre ECX / CX:

si la condition vérifiable

Travail de cours

Sous la discipline "Programmation du système"

Topic №4: "Tâches de résolution de procédures"

Option 2.

Université d'État de Sibérie orientale

Technologie et gestion

____________________________________________________________________

Collège technologique

LA TÂCHE

pour cours

La discipline:
Sujet: Résoudre les tâches pour les procédures
Artiste (s): Glavinskaya Arina Aleksandrovna
Leader: dambaevasegma viktorovna
Résumé du travail: étude des sous-programmes dans la langue des assembleurs,
Résoudre les tâches à l'aide de sous-routines
1. Partie théorique: informations de base sur la langue de l'assembleur (ensemble
Équipes, etc.), organisation de sous-programmes, méthodes de transmission de médicaments
Dans les sous-routine
2. Partie pratique: Développez deux sous-programmes, dont l'une convertit une lettre donnée au titre (y compris les lettres russes), et l'autre convertit la lettre en ligne.
Convertit une lettre donnée au titre et l'autre convertit la lettre en ligne.
Convertit la lettre en ligne.
Conditions d'exécution du projet à l'annexe:
1. La partie théorique est de 30% sur 7 semaines.
2. Partie pratique - 70% de 11 semaines.
3. Protection - 100% sur 14 semaines.
Conditions d'enregistrement:
1. Le calcul et la note explicative du projet d'échange devraient être présentés dans
copies électroniques et solides.
2. Le rapport du rapport doit comporter au moins 20 pages dactylographiées sans applications comptables.
3. RPZ est émis conformément à GOST 7.32-91 et signé par le gestionnaire.

Directeur __________________

Artiste __________________

Date d'Emission " 26 " septembre 2017 G.


introduction 2.

1.1 Informations de base sur la langue des assembleurs. 3.

1.1.1 Ensemble de commandes. quatre

1.2 Organisation des sous-routines dans la langue des assembleurs. quatre

1.3 Méthodes de transfert de paramètres dans les sous-routines. 6

1.3.1 Transfert de paramètres par les registres. 6

1.3.2 Transfert de paramètres via la pile. 7.

2 section pratiques .. 9

2.1 Réglage du problème. neuf

2.2 Description du problème du problème. neuf

2.3 Test du programme .. 7

Conclusion. huit

Références .. 9


introduction

Il est bien connu qu'il est difficile de programmer sur Assembleur. Comme vous le savez, il existe de nombreuses langues différentes. haut niveauCela vous permet de dépenser beaucoup moins d'effort lorsque vous écrivez des programmes. Naturellement, la question se pose lorsque le programmeur peut avoir besoin d'utiliser l'assembleur lors de la rédaction de programmes. Actuellement, vous pouvez spécifier deux domaines dans lesquels l'utilisation de la langue d'assembleur est justifiée et souvent nécessaire.

Premièrement, ce sont les programmes système dites dépendant de la machine, généralement ils gèrent divers appareils informatiques (ces programmes sont appelés pilotes). Ces programmes système utilisent des commandes spéciales de machine qui n'ont pas besoin de s'appliquer en ordinaire (ou comme on dit appliqué) Programmes. Ces commandes sont impossibles ou très difficiles à définir dans la langue de haut niveau.

Le deuxième domaine d'application de l'assembleur est associé à optimiser l'exécution du programme. Très souvent, les traducteurs de programme (compilateurs) avec des langues de haut niveau donnent un programme très inefficace de la machine. Cela concerne généralement un programme de calcul, dans lequel la plupart du temps est effectué très petit (environ 3 à 5%) du programme (cycle principal). Pour résoudre ce problème, les systèmes de programmation dits multilingues peuvent être utilisés pour vous permettre d'enregistrer des parties du programme dans différentes langues. Typiquement, la partie principale du programme est enregistrée dans le langage de programmation de haut niveau (Fartran, Pascal, C, etc.), et le temps d'exécution critique du programme est sur l'assembleur. La vitesse de l'ensemble du programme peut augmenter de manière significative. C'est souvent le seul moyen de rendre le programme donner le résultat d'un temps acceptable.

Le travail de ce cours est d'obtenir des compétences pratiques pour travailler en programmation dans la langue des assembleurs.

Tâches de travail:

1. Étudier les informations de base sur la langue des assembleurs (structure et composants du programme d'assembleur, au format de l'équipe, l'organisation des sous-routines, etc.);

2. Examinez les types d'opérations de bits, le format et la logique du fonctionnement de commandes d'assemblage logique;

3. Résolvez la tâche individuelle d'appliquer des sous-programmes dans l'assembleur;

4 .. Formulez la conclusion sur le travail effectué.

1 section théorique

Informations de base sur ComMbler

L'assembleur est un langage de programmation de bas niveau, qui est un format pour enregistrer des commandes de machine, pratique pour la perception humaine.

Les commandes de la langue d'assembleur sont une partie en une correspondant aux équipes de processeur et, en fait, constituent une forme symbolique commode d'enregistrement (Mnemokode) de commandes et de leurs arguments. En outre, la langue d'assembleur fournit des abstractions logicielles de base: Liaison des parties du programme et des données après des étiquettes avec des noms et une directive symboliques.

Les directives d'assembleur vous permettent d'inclure des blocs de données dans le programme (décrit explicitement ou lu depuis le fichier); répéter un certain fragment du nombre de fois spécifié; compiler un fragment par condition; Définissez l'adresse d'exécution du fragment, modifiez les valeurs des étiquettes pendant le processus de compilation; Utilisez des définitions de macro avec des paramètres et autres.

Avantages et inconvénients

· La quantité minimale de code redondant (utilisation d'un plus petit nombre de commandes et de références à la mémoire). En conséquence, taille de programme à grande vitesse et plus petite;

· Grands volumes de code, un grand nombre de tâches mineures supplémentaires;

· Mauvais code de lisibilité, difficulté de soutien (débogage, ajout de fonctionnalités);

· La difficulté de mettre en œuvre des paradigmes de programmation et de toute autre conventions complexes, la complexité du développement conjoint;

· Moins de quantités de bibliothèques disponibles, leur petite compatibilité;

· Accès immédiat à l'équipement: ports d'E / S, registres de processeurs spéciaux;

· Maximum "ajustement" pour la plate-forme souhaitée (utilisation d'instructions spéciales, caractéristiques techniques de "fer");

· Infections à d'autres plates-formes (à l'exception de la compatibilité binaire).

Outre les instructions, le programme peut contenir des directives: les commandes qui ne sont pas envoyées directement aux instructions de la machine et les responsables du compilateur. L'ensemble et la syntaxe diffèrent de manière significative et dépendent de la plate-forme matérielle, mais du compilateur utilisé (générant des dialectes de langues dans une famille d'architectures). En tant que jeu, des directives peuvent être attribuées:

· Détermination des données (constantes et variables);

· Gestion du programme du programme en mémoire et paramètres du fichier de sortie;

· Définition du mode compilateur;

· Toutes sortes d'abstraction (c'est-à-dire des éléments de langues de haut niveau) - des procédures d'enregistrement et des fonctions (simplifier la mise en œuvre du paradigme de la programmation procédurale) à des structures et cycles conditionnels (pour la structure de la programmation structurelle);

· Macros.

Ensemble de commandes

Les commandes typiques de la langue d'assembleur sont:

· Commandes de transfert de données (MOV, etc.)

· Équipes arithmétiques (Ajouter, Sub, imul, etc.)

· Opérations logiques et lot (ou et, Xor, SHR, etc.)

· Équipes de gestion d'exécution du programme (JMP, boucle, RET, etc.)

· Interrompre les commandes d'appel (voir parfois les commandes de contrôle): int

· Commandes d'E / S dans les ports (dans, out)

Pour les microcontrôleurs et les micro-ordinateurs se caractérisent également par des commandes de vérification et de transition par condition, par exemple:

· Jne - Allez s'il n'est pas égal;

· JGE - Go, si plus ou égal.

Pour que la machine effectue les équipes d'une personne au niveau du matériel, il est nécessaire de spécifier une certaine séquence d'actions dans la langue de "Nolikov et des unités". Assistant dans cette entreprise sera un assembleur. Ceci est un utilitaire qui fonctionne avec le transfert de commandes vers la langue de la machine. Cependant, la rédaction du programme est un processus très fastidieux et complexe. Cette langue n'est pas destinée à créer des poumons et des actions simples. Pour le moment, tout langage de programmation utilisé (assembleur fonctionne bien) vous permet d'écrire des tâches efficaces spéciales qui affectent fortement le fonctionnement du matériel. L'objectif principal est de créer un microcomand et de petits codes. Cette langue donne plus d'opportunités que, par exemple, Pascal ou C.

Brève description de l'assembleur Langues

Toutes les langages de programmation sont divisés des niveaux: faible et élevé. N'importe lequel du système syntaxique de la "famille" de l'assembleur est différent de celui-ci unité à la fois certains avantages des langues les plus courantes et les plus modernes. Avec d'autres, leurs proches et le fait que le système informatique peut être pleinement utilisé.

Une caractéristique distinctive du compilateur est la simplicité à utiliser. Il diffère de ceux qui travaillent uniquement avec des niveaux élevés. Si vous prenez en compte un tel langage de programmation, l'assembleur fonctionne deux fois plus rapide et meilleur. Afin d'écrire un programme léger, trop de temps n'aura pas besoin.

Brièvement sur la structure de la langue

Si nous parlons en général sur le travail et la structure du fonctionnement de la langue, vous pouvez affirmer que ses commandes correspondent pleinement aux équipes de processeur. C'est-à-dire que l'assembleur utilise des mnémokodes, la personne la plus commode à enregistrer.

Contrairement à d'autres langages de programmation, l'assembleur utilise certaines balises pour enregistrer les cellules de mémoire au lieu d'adresses. Ils sont traduits dans les soi-disant directives. Ce sont des adresses relatives qui n'affectent pas le fonctionnement du processeur (non traduits dans la langue de la machine) et nécessaire pour reconnaître l'environnement de programmation lui-même.

Pour chaque ligne du processeur, il y a son propre avec cette situation correcte sera n'importe quel processus, y compris

La langue d'assembleur a plusieurs syntaxes qui seront discutées dans l'article.

PLUS DE LANGUE

L'adaptation la plus importante et la plus pratique de la langue d'assembleur sera qu'il est possible d'écrire tout programme pour un processeur qui sera très compact. Si le code s'avère énorme, certains processus se redirrent vers la RAM. Dans le même temps, ils font tout rapidement et sans échecs, à moins bien sûr, ils contrôlent un programmeur qualifié.

Pilotes, systèmes d'exploitation, BIOS, compilateurs, interprètes, etc. - Il s'agit de tout le programme dans la langue d'assembleur.

Lorsque vous utilisez un désassembleur, ce qui fait une traduction de la machine en une, il est possible de comprendre facilement comment fonctionne une tâche d'une ou d'une autre solution, même s'il n'y a pas d'explication. Cependant, cela n'est possible que si les programmes sont légers. Malheureusement, dans des codes non triviaux, il est assez difficile de comprendre.

Langues de contre

Malheureusement, les programmeurs novices (et souvent des professionnels) sont difficiles à désassembler la langue. L'assembleur nécessite une description détaillée de la commande nécessaire. En raison du fait que vous devez utiliser des commandes de la machine, la probabilité d'actions erronées et la complexité de l'exécution augmente.

Afin d'écrire même le programme le plus simple, le programmeur doit être qualifié et son niveau de connaissances est suffisamment élevé. Le spécialiste moyen, malheureusement, écrit souvent de mauvais codes.

Si la plate-forme pour laquelle le programme est créée est mise à jour, toutes les commandes doivent être copiées manuellement. Cela nécessite la langue elle-même. L'assembleur ne prend pas en charge la fonction de la régulation automatique du fonctionnement des processus et remplace les éléments.

Équipes de langue

Comme déjà mentionné ci-dessus, chaque processeur a son propre ensemble de commandes. Les éléments les plus simples reconnus par tous types sont les codes suivants:


Utilisation des directives

Programmation de microcontrôleurs dans la langue (assembleur qui permet de fonctionner et de s'acquitter parfaitement avec le fonctionnement) du niveau le plus bas dans la plupart des cas, il se termine avec succès. Il est préférable d'utiliser des processeurs avec une ressource limitée. Pour les techniques 32 bits, cette langue convient bien. Souvent dans les codes, vous pouvez voir des directives. Qu'est-ce que c'est? Et ce qui est utilisé pour?

Pour commencer, il est nécessaire de souligner sur le fait que les directives ne sont pas transférées dans la langue de la machine. Ils régissent les performances du compilateur. Contrairement à des commandes, ces paramètres, ayant diverses fonctions, ne diffèrent pas en raison de différents processeurs, mais à la charge d'un autre traducteur. Parmi les principales directives peut être attribuée comme suit:


origine du nom

En raison du nom de la langue - "assembleur"? Nous parlons du traducteur et du compilateur, qui produisons également un cryptage de données. De l'assembleur anglais ne signifie rien qu'un collecteur. Le programme n'a pas été collecté manuellement, une structure automatique a été utilisée. De plus, pour le moment, les utilisateurs et les spécialistes ont effacé la différence entre les termes. Souvent, les langages de programmation d'appel d'assembleur, bien que ce soit juste un utilitaire.

En raison du nom de collecte généralement accepté, certains ont une solution erronée qu'il existe une seule langue basse niveau (ou des normes standard pour cela). Pour que le programmeur comprenne quelle structure est à propos, il est nécessaire de spécifier, pour quelle plate-forme une ou une autre langue assembleuse est utilisée.

Macrofs

Les langages d'assembleur créés relativement récemment ont des macrosses. Ils facilitent l'orthographe et l'exécution du programme. Grâce à leur présence, le traducteur exécute le code écrit parfois plus rapidement. Lors de la création d'un choix conditionnel, vous pouvez écrire un énorme bloc d'équipes et il est plus facile d'utiliser des macros. Ils basculeront rapidement entre les actions, si la condition ou le non-respect est de l'accomplissement.

Lors de l'utilisation de directives macro-linguistiques, le programmateur reçoit des macros de l'assembleur. Parfois, il peut être largement utilisé et parfois ses caractéristiques fonctionnelles sont réduites à une commande. Leur présence dans le code facilite le travail avec elle, le rend plus compréhensible et visuel. Cependant, il devrait être attentif d'être attentif - dans certains cas, les macros, au contraire, aggravent la situation.



Avez-vous aimé l'article? Partagez-le