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
- Si l'instruction ASM ... END est la seule instruction d'une procédure (ou fonction), la procédure peut être déclarée en tant que procédure ASSEMBLER. Cette situation supprime la nécessité d'avoir un bloc BEGIN et END.
- En plus d'avoir l'air beaucoup plus propre, cette situation a également l'avantage qu'aucune copie n'est faite des paramètres de valeur accessibles via des pointeurs. Cela signifie qu'un code plus rapide et plus petit est généré dans cette instance, mais vous devez faire attention de ne pas modifier les paramètres ayant été transmis.
Exemples
L'exemple suivant montre une addition en utilisant des instructions assembleurs :
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 :
- Type C_String=Packed Array[0..255]of Char;
- Procedure PasToCString(P:String;var C:C_String);ASSEMBLER;ASM
- MOVE.L P,AO { Adresse de chaine de caractères Pascal }
- MOVE.L C,A1 { Adresse de chaine de caractères C }
- MOVEQ #0,00
- MOVE.B (A0)+,D0 {Longueur de chaine de caractères}
- BRA @L2
- @L1: MOVE.B (A0)+,(A1)+
- @L2: DBRA D0,@L1
- CLR.B (A1) { Termine la chaine de caractères C }
- END;
Dernière mise à jour : Lundi, le 20 avril 2020