L'adressage mémoire

COURS N° 5 - LES CHAINES DE CARACTERES 



Avant de commencer ce cours, il est fortement recommandé de consulter la page suivante : Les chaînes, c'est quoi ?

Ce cours a pour but de vous apprendre à manipuler les chaînes de caractères et de les utiliser sous MS-WINDOWS.

Une chaîne de caractères sous MS-WINDOWS, est une suite d'octets ayant pour valeur un numéro correspondant au caractère désiré dans la table ANSI ou UNICODE. Cette chaîne est toujours terminée par un 0 (numérique). Ce type de chaîne, s'appelle chaîne à zéro terminal ou chaîne AZT.

Exemple :

MaChaine DB "Hello World !", 0

Produira en mémoire cela (les valeurs numériques sont notées en hexadécimal) :

48 65 6C 6C 6F 20 57 6F 72 6C 64 20 21 0

Consultez la table ASCII et reportez-vous à chacun des indexs représentés ci-dessus et vous retrouverez les caractères de la chaîne pointée par MaChaine.

Exemple de code :

Le code ci-dessous vous montre comment utiliser une chaîne de caractères sous forme numérique. Les octets qui représentent l'index des caractères, sont utilisés pour représenter la chaîne : "Hello World !"


.386
.MODEL FLAT, STDCALL
OPTION CASEMAP:NONE

INCLUDE \masm32\include\windows.inc
INCLUDE \masm32\include\kernel32.inc
INCLUDE \masm32\include\user32.inc

INCLUDELIB \masm32\lib\kernel32.lib
INCLUDELIB \masm32\lib\user32.lib

MesDonnees SEGMENT 'data'

    ;La variable Msg représente la chaîne "Hello World !" terminée par un zéro (AZT)
    MaChaine DB 48h, 65h, 6Ch, 6Ch, 6Fh, 20h, 57h, 6Fh, 72h, 6Ch, 64h, 20h, 21h, 0h
                        
    TitreMsg DB "MsgBox.asm", 0h

MesDonnees ENDS


MonCode SEGMENT 'code'

    Main:

        push MB_OK ;Bouton Ok.
        push OFFSET TitreMsg ;Titre de la fenêtre.
        push OFFSET MaChaine ;Message.
        push NULL ;hWnd dans ce cas il vaut 0.
        call MessageBox ;Affiche la boîte à messages.
       
        push 0h
        call ExitProcess

MonCode ENDS

END Main



Il est bien entendu que coder une chaîne de caractères de cette façon n'est pas louable. Elle ne sert que dans un but pédagogique. Car coder les chaînes de caractères de cette façon est fastidieux, et le code devient vite incompréhensible. Il est préférable d'écrire de façon évidente une chaîne de caractères et laisser le compilateur se charger de la conversion.


La meilleure façon d'apprendre c'est par la pratique et c'est la raison pour laquelle je vais m'affairer à vous proposer un grand projet, celui de créer une DLL contenant des fonctionnalités traitant des chaînes de caractères telles que : Copier une chaîne, compter le nombre de caractères, transformer une chaîne de caractères minuscule en majuscule, convertir une valeur numérique en une chaîne de caractères, insérer une chaîne à l'intérieur d'une autre et, bien d'autres.

Cela peut paraître énorme mais n'ayez crainte, ce n'est pas si compliqué que cela puisse paraître.

A l'issue, vous vous retrouverez avec une DLL (Dynamic Link Library) contenant moult fonctionnalités dignes de celles que l'on peut trouver dans les langages de haut niveau telles que : Visual Basic, Delphi, C++, etc... Et ce, en utilisant uniquement les instructions machines.


Fonctionnalités et codes sources des bibliothèques : strings.lib & strings.dll