Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Discussion: Explication BIB 100

  1. #1
    Candidat au titre de Membre du Club
    Inscrit en
    novembre 2009
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 48
    Points : 12
    Points
    12

    Par défaut Explication BIB 100

    Bonjour,

    Est-ce que c'est possible SVP de m'expliquer ce BIB 100 :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    MODIF   CSECT
            USING *,9
            CLC   173(6,11),=C'300400'
            BE    TEST
            BNER  14
    TEST    MVC   VAR1,177(11)
            MVC   177(3,11),=C'   '
            MVC   180(7,11),VAR1
            MVC   215(3,11),=C'IBM'
            BR    14
    VAR1    DC    C'AAAAAAA'
            END
    OU S'il y a un lien ou un document qui explique ce BIB 100 seras plus Merci

    Merci Beaucoup

  2. #2
    Membre habitué
    Homme Profil pro Julien Guiffroy
    Ingénieur d'étude Mainframe
    Inscrit en
    septembre 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Nom : Homme Julien Guiffroy
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur d'étude Mainframe
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2012
    Messages : 61
    Points : 114
    Points
    114

    Par défaut

    Alors, une réponse 2 ans après... ça servira peut être aux générations futures qui veulent faire de l'assembleur

    (Je précise je suis novice en Assembleur, merci de me corriger si je dis une bourde)

    D'après ce que je comprends, pour la section MODIF, ça cherche dans une chaîne de caractères en colonne 174 (colonne 1 = colonne 0 en ASM), sur 6 caractères de long, la chaîne "300400" au format caractère et ça la stocke dans le registre 11

    CLC 173(6,11),=C'300400'
    ___________________________________________________

    La chaîne extraite est stockée dans TEST

    BE TEST
    ___________________________________________________

    Pour la section TEST, ça déplace le contenu de VAR1 en colonne 178 depuis le registre 11

    MVC VAR1,177(11)
    ___________________________________________________

    Ensuite, on remplace le contenu de la chaîne en colonne 178 sur 3 de long par 3 espaces au format caractère

    MVC 177(3,11),=C' '
    ___________________________________________________

    Ensuite on déplace le contenu de VAR1 en colonne 181 sur 7 de long dans la chaîne

    MVC 180(7,11),VAR1
    ___________________________________________________

    Ensuite en colonne 216, on écrit IBM au format caractère sur 3 caractères

    MVC 215(3,11),=C'IBM'
    ___________________________________________________

    Ensuite on lit le contenu du registre 14

    BR 14
    ___________________________________________________

    La section VAR1 jusque END doit être la déclaration de variable utilisée plus haut

    VAR1 DC C'AAAAAAA'
    END

    ___________________________________________________

    Comme j'ai dit plus haut n'hésitez pas à reprendre les erreurs que j'aurais pu faire, je suis novice en assembleur

    ___________________________________________________
    ___________________________________________________

    SkyLyn,

  3. #3
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    avril 2002
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Âge : 29

    Informations forums :
    Inscription : avril 2002
    Messages : 2 346
    Points : 3 862
    Points
    3 862

    Par défaut

    Hello,

    Attention, moi aussi je débute

    Je crois qu'il y a méprise sur la notation D(L,B), comme dans CLC 173(6,11)....

    La notation D(,B) doit être reconnue comme une adresse mémoire, dont la valeur est stockée dans le registre B (Base register) auquel on ajouté le D (Displacement).

    CLC compare deux chaînes de caractères, l'une pointée par le premier argument et la deuxième pointée par le deuxième argument. Autrement dit, CLC compare la chaîne pointée par l'adresse 173(,11), c'est-à-dire la valeur contenue dans le R11+173, et la valeur passée C'300400'. Le Condition Code est testé ensuite par le BE de la ligne suivante.

    Le L indique la longueur de la comparaison à effectuer.

    Pour info, la bible reste le bouquin "zArchitecture Principles of Operations"
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  4. #4
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    avril 2002
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Âge : 29

    Informations forums :
    Inscription : avril 2002
    Messages : 2 346
    Points : 3 862
    Points
    3 862

    Par défaut

    J'avais pas vu le BR 14 à la fin ! C'est en fait un BRANCH sur l'adresse contenue dans le registre 14.

    Quand un programme est lancé, plusieurs paramètres lui sont donnés, comme par exemple en R1 une liste de paramètres (le forma de cette liste varie selon le mode d'appel), et R13 un pointer vers la save area (zone où le programme appelé peut stocker la valeur des registres de l'appelant) et R14 l'adresse de la prochaine adresse du programme appelant.

    Autrement dit, faire un BR 14 équivaut à mettre fin à la procédure en cours et redonner la main au programme appelant, un peu comme un return en C ou exit en Pascal.

    Le bien connu IEFBR14 tient son nom de ça (enfin je suppose), vu qu'il ne fait rien à part rendre la main au programme appelant.
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  5. #5
    Membre habitué
    Homme Profil pro Julien Guiffroy
    Ingénieur d'étude Mainframe
    Inscrit en
    septembre 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Nom : Homme Julien Guiffroy
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur d'étude Mainframe
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2012
    Messages : 61
    Points : 114
    Points
    114

    Par défaut

    Citation Envoyé par wormful_sickfoot Voir le message

    Je crois qu'il y a méprise sur la notation D(L,B), comme dans CLC 173(6,11)....

    La notation D(,B) doit être reconnue comme une adresse mémoire, dont la valeur est stockée dans le registre B (Base register) auquel on ajouté le D (Displacement).

    CLC compare deux chaînes de caractères, l'une pointée par le premier argument et la deuxième pointée par le deuxième argument. Autrement dit, CLC compare la chaîne pointée par l'adresse 173(,11), c'est-à-dire la valeur contenue dans le R11+173, et la valeur passée C'300400'. Le Condition Code est testé ensuite par le BE de la ligne suivante.
    J'avais cru que 11 était juste le registre de stockage.
    J'ai testé un programme assembleur dans ce genre et j'ai mis 10 en colonne et c'est bien la colonne 11 qui a changé
    ________________________________________
    ________________________________________
    Skylyn,

  6. #6
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    avril 2002
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Âge : 29

    Informations forums :
    Inscription : avril 2002
    Messages : 2 346
    Points : 3 862
    Points
    3 862

    Par défaut

    Tu entends quoi par colonne ? Dans le cas précédent, l'adresse pointe sur la valeur contenue dans R11 + le déplacement soit 173.

    Si R11 contient A0000, alors l'adresse pointée est A00AD.
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  7. #7
    Membre confirmé
    Inscrit en
    juin 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : juin 2008
    Messages : 127
    Points : 213
    Points
    213

    Par défaut

    Bonjour,

    Citation Envoyé par Skylyn Voir le message
    (Je précise je suis novice en Assembleur, merci de me corriger si je dis une bourde)
    Je me permets donc d'intervenir : je ne suis pas d'accord avec ton interprétation, et donc même si certes le post est vieux et que le principal intéressé n'a pas vraiment l'air de s'y intéresser, je vais faire mes remarques.
    Aussi, ça fait déjà quelque temps que je n'ai pas fais assembleur, donc n'hésitez pas à corriger aussi.

    Code :
    1
    2
    3
    MODIF   CSECT
            USING *,9
    Alors ça c'est du déclaratif de section, j'ai plus le détail exact des instructions de tête. Ce n'est pas important pour la compréhension globale du traitement (mais ça peut l'être pour la compréhension précise mais avec le contexte : systèmes connexes, paramétrage machine, etc car ça peut changer des petits détails)

    Code :
    1
    2
            CLC   173(6,11),=C'300400'
    [/code]
    CLC = Compare jesaisplusquoi, c'est un opérateur de comparaison qui compare les 2 opérandes et place le flag de comparaison en conséquence. (le LC permet de préciser les types et spécificités des opérandes, mais pareil, je n'ai plus le détail de tête)
    Donc la on compare les 6 caractères à partir du 173ème depuis l'adresse pointée par le registre 11 à la valeur '300400'

    BE = Branch Equal : on débranche si le flag de comparaison est positionné à "Egal" (c'est 0 ou 1, mais je ne sais plus dans quel sens il fonctionne celui ci)
    Donc si la comparaison d'avant (le CLC) est vrai alors on débranche sur l'étiquette TEST

    BNER = Branch Not Equal to Register : on débranche sur l'adresse pointée par le registre passé en opérande si le flag de comparaison est sur "différent".
    Donc là, si on a pas l'égalité sur la comparaison, alors on débranche sur l'adresse pointée par le R14, qui comme dit par wormful_sickfoot, quitte le programme
    Code :
    1
    2
    3
    4
    5
    TEST    MVC   VAR1,177(11)
            MVC   177(3,11),=C'   '
            MVC   180(7,11),VAR1
            MVC   215(3,11),=C'IBM'
    Là c'est du move :
    - on stocke les données à partir du 177ème caractère depuis le R11 dans Var1
    - on cale 3 caratères de blanc à la place
    - on recolle le Var 1 après ces 3 caractères (donc en fait on a juste décalé des données de 3 caractères)
    - on colle un "IBM" loin après (en 215)
    On sort !
    Déclaration de la variable VAR1 (ça c'est un truc bien de l'assembleur : on peut déclarer les variables à la fin )
    FIN !!!!!

    Donc globalement, en COBOL ça donnerait un truc du genre :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    77 VAR1 pic X(7) value 'AAAAAAA'.
    ...
    MODIF.
        IF R11(173:6) = '300400'
           MOVE R11(177:7) TO VAR1
           MOVE '   ' TO R11(177:3)
           MOVE VAR1 TO R11(180:7)
           MOVE 'IBM' TO R11(215:3).
    
    RETURN.
    Le R11 correspond à la donnée pointée par le registre 11 dans le code assembleur : au pif, je dirai bien que c'est le record d'un fichier en entrée.

  8. #8
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    avril 2002
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Âge : 29

    Informations forums :
    Inscription : avril 2002
    Messages : 2 346
    Points : 3 862
    Points
    3 862

    Par défaut

    Le USING *,9, c'est pour indiquer que le registre de base dans cette CSECT est le registre 9. C'est important pour la génération du code machine, précisément pour la gestion des symboles et leur remplacement par des offsets et des adresses mémoire.

    L'impact est que le registre de base n'est plus utilisable pour autre chose dans la suite du programme.
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  9. #9
    Membre Expert

    Homme Profil pro François Durand
    Ingénieur Exploitation Mainframe
    Inscrit en
    octobre 2005
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Nom : Homme François Durand
    Âge : 55
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Exploitation Mainframe
    Secteur : Finance

    Informations forums :
    Inscription : octobre 2005
    Messages : 1 224
    Points : 2 266
    Points
    2 266

    Par défaut

    Citation Envoyé par Pico----- Voir le message
    Code :
    1
    2
            CLC   173(6,11),=C'300400'
    CLC = Compare jesaisplusquoi, c'est un opérateur de comparaison qui compare les 2 opérandes et place le flag de comparaison en conséquence. (le LC permet de préciser les types et spécificités des opérandes, mais pareil, je n'ai plus le détail de tête)
    Donc la on compare les 6 caractères à partir du 173ème depuis l'adresse pointée par le registre 11 à la valeur '300400'
    Défini dans le "Principles of operation" comme :
    COMPARE LOGICAL Storage-and-storage format

  10. #10
    Membre habitué
    Homme Profil pro Julien Guiffroy
    Ingénieur d'étude Mainframe
    Inscrit en
    septembre 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Nom : Homme Julien Guiffroy
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur d'étude Mainframe
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2012
    Messages : 61
    Points : 114
    Points
    114

    Par défaut

    Mon interprétation n'était pas si loin

    C'est juste que je l'ai expliqué "grosso merdo" quoi

    Merci pour les indications supplémentaires et la notion de "GOTO" avec des systèmes de "débranchement"
    ____________________________________________
    ____________________________________________
    Skylyn,

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •