IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

z/OS Discussion :

Explication BIB 100


Sujet :

z/OS

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2009
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 48
    Points : 35
    Points
    35
    Par défaut Explication BIB 100
    Bonjour,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 régulier
    Homme Profil pro
    Ingénieur d'étude Mainframe
    Inscrit en
    Septembre 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    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 : 124
    Points
    124
    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 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    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 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    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 régulier
    Homme Profil pro
    Ingénieur d'étude Mainframe
    Inscrit en
    Septembre 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    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 : 124
    Points
    124
    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 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    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 actif
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 138
    Points : 266
    Points
    266
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    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
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par Pico----- Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 régulier
    Homme Profil pro
    Ingénieur d'étude Mainframe
    Inscrit en
    Septembre 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    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 : 124
    Points
    124
    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,

Discussions similaires

  1. BIB 100 en JCL
    Par Skylyn dans le forum Cobol
    Réponses: 7
    Dernier message: 24/09/2012, 10h18
  2. Réponses: 11
    Dernier message: 17/03/2003, 10h56
  3. Explication procédure stockée
    Par underworld dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2002, 10h51
  4. Recherche code d'un fifo,ou explication
    Par don-diego dans le forum C
    Réponses: 8
    Dernier message: 25/07/2002, 10h26
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo