Obligement - L'Amiga au maximum

Jeudi 25 avril 2024 - 06:16  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Programmation : Assembleur - Gestion des chaînes de caractères
(Article écrit par Max et extrait d'Amiga News Tech - décembre 1990)


Il est parfois utile, nécessaire ou inévitable dans un programme Assembleur, d'avoir à manipuler des chaînes de caractères. Or, si tout langage dit "évolué" offre un minimum de fonctions pour ce faire, le programmeur machine est obligé de se taper lui-même tout le boulot. D'où la petite bibliothèque de fonctions que voici.

C'est sur un plateau d'argent que je vous offre ce mois-ci non pas une, ni deux, ni même trois mais une dizaine de routines destinées à résoudre les problèmes les plus fréquemment rencontrés lorsqu'on doit s'amuser avec les chaînes de caractères. On y retrouve les inévitables recherche de la longueur d'une chaîne, comparaison de deux chaînes et transformations en minuscules et majuscules, mais aussi les moins fréquentes concaténation, inversion ou recherche d'un caractère.

Quelques petites précisions cependant, avant de passer à la description de ces fonctions. Il fallait faire un choix quant au format des chaînes que nous allons traiter ; le langage C étant par définition le roi sur Amiga, j'ai adopté son principe : une chaîne est définie comme une suite de caractères dont la fin est marquée par un caractère nul (zéro). L'avantage de la méthode, c'est qu'une chaîne peut avoir n'importe quelle longueur. L'inconvénient, c'est que chaque fois que l'on a besoin de connaître cette longueur, il faut la calculer - ou plutôt, la compter. Pour comparaison, en BCPL, comme en BASIC d'ailleurs, une chaîne de caractères contient d'abord une indication sur sa longueur, suivie des caractères qui la compose. Avantage : on connaît tout de suite la longueur. Inconvénient : cette même longueur est limitée à 255 caractères si elle est codée sur 1 octet. Ce qui prouve bien, une fois de plus s'il en était besoin, qu'on ne peut pas avoir le beurre, l'argent du beurre et la fermière en prime...

Des chaînes qui ne manquent pas de caractère(s)

Mais laissons-là les considérations laitières, et voyons de plus près de quoi il retourne, si j'ose dire. Voici sans plus tarder une brève mais succincte description des routines ci-dessus citées. Les plus attentifs d'entre vous auront remarqué que non seulement, j'ai piqué au C le format de ses chaînes, mais qu'en plus, j'ai également piqué le nom de ses fonctions. Messieurs Kernigan et Ritchie s'en retourneraient dans leur tombe s'ils étaient morts, bien que je ne sois même pas sûr que ce ne soit pas le cas.

Pour simplifier et uniformiser (argh ! voilà pourtant un terme que je n'aime guère en ce moment...) les choses, toutes les chaînes sont pointées par a0 (et al lorsqu'il en faut une seconde) et les fonctions retournent leur valeur de réponse dans d0 ou dans rien du tout suivant les cas. Mais quoiqu'il arrive, tous les registres sont préservés, c'est la moindre des choses.
  • strlen : retourne dans d0 la longueur de la chaîne pointée par a0.
  • strcmp : compare la chaîne pointée par a1 à celle pointée par a0. En retour, d0 contient 0 si les chaînes sont identiques, -1 si la première et inférieure à la seconde, et +1 dans le cas contraire.
  • strcpy : copie la chaîne pointée par a1 dans le tampon mémoire pointé par a0. Aucune valeur en réponse.
  • strncpy : copie au maximum d0 caractères de la chaîne pointée par a1 dans le tampon mémoire pointé par a0. La copie s'arrête lorsque la fin de la chaîne est rencontrée ou le maximum atteint.
  • strcat : concatène la chaîne pointée par a1 à celle pointée par a0. Attention à ne pas empiéter n'importe où en mémoire, prévoyez un tampon mémoire assez large.
  • strncat concatène au maximum d0 caractère de la chaîne pointée par a1 à celle pointée par a0. Même remarque que précédemment concernant la taille du tampon mémoire.
  • strchr : recherche la première apparition du caractère d0 dans la chaîne pointée par a0. Retourne dans d0 la position de ce caractère ou -1 s'il ne figure pas dans la chaîne.
  • strrev : inverse la chaîne pointée par a0. Par exemple, "Max" devient "xaM".
  • toupper : transforme toutes les lettres minuscules de la chaîne pointée par a0 en majuscules.
  • tolower : c'est l'inverse ; cette fonction transforme toutes les lettres majuscules de la chaîne pointée par a0 en minuscule.
Voilà, y'a de quoi en faire beaucoup d'autres, mais on n'est pas là non plus pour vous mâcher tout le travail. Comme disait si justement Fucius, qui avait oublié de l'être "ce n'est pas parce que y'en a qui aiment le travail qu'il faut le leur laisser".

assembleur
assembleur
assembleur


[Retour en haut] / [Retour aux articles]