USR
<fieldset class="formatter-container formatter-fieldset" style=""><legend>USR</legend><div class="formatter-content">Cette fonction appelle la routine en langage machine déclarée par l'instruction DEFUSR et renvoie ce qui est entre parenthèse.
Lors de l'appel de la routine, le registre A du CPU contient le type de la variable ou constante mise entre parenthèse. Ceci permet de créer votre propre fonction. Il y a quatre type de valeur possible.
2 = chiffre entier.
3 = chaine de caractères.
4 = chiffre de simple précision.
8 = un chiffre de double précision.
Lorsqu'il s'agit d'une valeur numérique, le registre HL indique l'emplacement de cette variable ou constante dont le format varie en fonction du type de valeur.
Entier :
Simple précision :
Double précision :
Lorsqu'il s'agit d'une chaine de caractères, le pointeur se trouve dans DE au lieu de HL.
</div></fieldset>
Syntaxe |
---|
USR[numéro de routine] (constante / variable numérique / variable alphanumérique) |
Lors de l'appel de la routine, le registre A du CPU contient le type de la variable ou constante mise entre parenthèse. Ceci permet de créer votre propre fonction. Il y a quatre type de valeur possible.
2 = chiffre entier.
3 = chaine de caractères.
4 = chiffre de simple précision.
8 = un chiffre de double précision.
Lorsqu'il s'agit d'une valeur numérique, le registre HL indique l'emplacement de cette variable ou constante dont le format varie en fonction du type de valeur.
Entier :
Adresse contenue dans HL : | Inutilisé |
Adresse contenue dans HL + 1 : | Inutilisé |
Adresse contenue dans HL + 2 : | 8 bits de poids faible de la valeur |
Adresse contenue dans HL + 3 : | 8 bits de poids fort de la valeur |
Simple précision :
Adresse contenue dans HL : | Valeur au format simple précision (sur 4 octets) |
Double précision :
Adresse contenue dans HL : | Valeur au format double précision (sur 8 octets) |
Lorsqu'il s'agit d'une chaine de caractères, le pointeur se trouve dans DE au lieu de HL.
Adresse contenue dans DE : | Longueur de la chaine |
Adresse contenue dans DE+1 : | Adresse où se trouve la chaine |
Exemple : |
---|
Faire une routine qui qui transforme tous les caractères majuscules en minuscules dans une chaîne alphanumérique. Code TEXT : ORG 0C000H ; CP 3 RET NZ ; Retour au Basic si ce n'est pas une chaine ; LD A,(DE) ; Longueur de la chaine OR A RET Z ; Retour au Basic si longueur = 0 LD B,A ; Nombre de caractères dans B pour DJNZ CONVC: INC DE LD A,(DE) ; Prend un caractère dans la chaine CP 041H JR C,NOCHAR ; Si A < 041H, ce n'est pas une majuscule CP 05AH JR NC,NOCHAR ; Si A > 064H, ce n'est pas une majuscule OR 020H ; Convertie la majuscule en minuscule LD (DE),A ; Place le caractère dans la chaine NOCHAR: DJNZ CONVC RET ; retour au Basic Après avoir tapé, assemblé et sauvegardé en binaire cette routine, entrez le programme Basic suivant et faites RUN : Code TEXT : 10 CLS 20 CLEAR 200,&HC000 30 BLOAD”Routine.bin”:DEFUSR=&HC000 40 A$="TRANSFORMATION": A$=USR(A$) 50 PRINT A$ |
Remarque :
</div></fieldset>