Section courante

A propos

Section administrative du site

ASSEMBLER

Assembleur
HighSpeed Pascal

Syntaxe

ASSEMBLER;
var_type_defintion;
ASM
instructasm1
instructasm2
...
instructasmn
END;

Paramètres

Nom Description
var_type_defintion Ce paramètre permet d'indiquer une liste de définition de constante, de type de données et de variables.
instructasm1,instructasm2, instructasmn Ce paramètre permet d'indiquer une suite d'instruction assembleur à inclure

Description

Ce mot réservé permet d'indiquer une procédure ou fonction entièrement écrite en assembleur et sans contrôle de langage de programmation évolué.

Remarques

Exemples

L'exemple suivant montre une addition en utilisant des instructions assembleurs :

  1. Program AssemblerSamples;
  2.  
  3. Function Add3(X,Y,Z:Integer):Integer;ASSEMBLER;
  4. ASM
  5.  move.w X,dO
  6.  add.w Y,dO
  7.  add.w Z,dO
  8.  move.w dO,@result
  9. END;
  10.  
  11. BEGIN
  12.  WriteLn(Add3(1,2,3));
  13. END.

Dans l'exemple ci-dessous, une chaîne est transmise à la procédure par valeur, et l'adresse de la chaîne est transmise à la procédure, comme décrit ci-dessus. Dans des circonstances normales (sans la directive Assembler), une copie serait effectuée à l'entrée de la procédure et vous utiliseriez ensuite une instruction LEA pour y accéder. Avec la directive Assembler, aucune copie n'est effectuée et vous utilisez l'instruction MOVE pour récupérer l'adresse comme suit :

  1. Type C_String=Packed Array[0..255]of Char;
  2. Procedure PasToCString(P:String;var C:C_String);ASSEMBLER;ASM
  3.      MOVE.L P,AO { Adresse de chaine de caractères Pascal }
  4.      MOVE.L C,A1 { Adresse de chaine de caractères C }
  5.      MOVEQ #0,00
  6.      MOVE.B (A0)+,D0 {Longueur de chaine de caractères}
  7.      BRA @L2
  8. @L1: MOVE.B (A0)+,(A1)+
  9. @L2: DBRA D0,@L1
  10.      CLR.B (A1) { Termine la chaine de caractères C }
  11. END;


Dernière mise à jour : Lundi, le 20 avril 2020