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

Autres architectures Assembleur Discussion :

[Assembleur 390] Instruction NC et TR


Sujet :

Autres architectures Assembleur

  1. #1
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut [Assembleur 390] Instruction NC et TR
    Salut à tous,

    Je doit convertir un programme assembleur en code VB et j'aurais besoin d'un petit coup de main de traduction.

    Le programme est en assembleur 390 (IBM MVS) et voila les 2 bouts de codes qui me posent des problèmes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NC 0(12,R1), MAGC12
    R1 contenant "066070060737"
    et
    la "fonction" MAGC12 est ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DC X'0F1F2F0F1F2F0F1F2F0F1F2F'
    La fonction DC génère une chaine
    J'ai cru comprendre que la fonction NC etait un AND mais je vois pas trop le AND boolean de 2 chaines

    on peut voir que la chaine R1 contient 12 caractères, et la chaine suivante 12 valeurs hexadécimales, mais j'ai pas compris plus.

    Second problème :

    Le resultat de cette fonction NC passe ensuite dans ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TR 0(12,R1),TABNUM
    TABNUM etant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DC X'03041014010511150206000000000000'
    DC X'11020406101214160103000000000000'
    DC X'14010203040506071011000000000000'
    DC X'00010203040506071011000000000000'
    Que fais ce TR ?

    Tabnum est un tableau je suppose...

    PS : j'ai compris que le 0(12,R1) etait simplement 12 caractère de R1 à partir du caractère 0 (début de chaine)

    Merci d'avance, si quelqu'un peut m'aider.

    @+

    Gaël

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    J'ai jamais vu ce genre de trucs ^^ Puisque ce sont des opérations sur des chaines, ca peut très bien être un and bit a bit, octet par octet. Enfin bref, je n'ai aucune solution. Tu n'as pas moyen d'émuler ou de tester les valeurs ? Tu as essayé google ?

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    Merci de ta réponse.

    J'ai effectivement regardé sur google mais très peu de site traite de ce sujet (de l'ordre d'une dizaine grand max)

    Après avoir fait des tests voila ce que j'obtiens :

    En code EBCDIC (equivalent ASCII de chez IBM) les codes F0,F1,F2,F3 (et oui il faut inverser !!!) représente le caractère 0,1,2,3 le code 03 indique END Of Text.

    Et la suite logique c'est celle si ;

    En fait on prends dans TABNUM :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DC X'03041014010511150206000000000000'
    DC X'11020406101214160103000000000000'
    DC X'14010203040506071011000000000000'
    DC X'00010203040506071011000000000000'
    La ligne correspondant à 0,1,2 ou 3 ou rien si "End Of Text"
    La colonne correspondant à la valeur R1 ("066070060737")

    Donc pour 1 exemple concret :
    on prend le 0 de R1 ce qui correspond à 0F dans mon MAGC12 et donc on prend la ligne 0 colonne 0, la valeur retenue est donc 03

    ensuite on prends le 6 -> 1F -> ligne 1 colonne 6 -> 14

    la chaine est donc 0314....

    etc...etc....

    Qui a dit capilotracté ?

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 930
    Points : 59 398
    Points
    59 398
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Pourrais-tu donner l'un ou l'autre lien, S.V.P. ?
    Ce serait intéressant car Google est en effet à peu près muet sur la question.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    Je n'ai malheuresement pas de lien à te fournir, car j'avais simplement quelques resultats de ce traitement et les données en entrées grace auquel j'ai pu extrapoler la transformation adéquat mais uniquement à "l'instinct" donc je ne sais pas exactement ce que font ces 2 fonctions NC et TR....

    NC semblerait etre une espece de décalage de registre mais comment ca fonctionne....
    TR semblerait etre un Translate qui transforme un jeu de valeur en fournissant des coordonnées dans le tableau...

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Bonjour,

    Aurais tu les quelqus instructions qui ornent ces deux là ?


    Blustuff.

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    J'en ai 3 pages, mais pour des raisons de données confidentielles je ne peux pas mettre le code précis,

    voila la liste des instructions et ce que j'en ai compris :


    Les affectations

    L
    LA
    DC

    L et LA est une affectation
    DC semble etre utilisé pour toutes les chaines et prends 1 argument


    L A,B met la valeur de B dans A
    LA A,1 met 1 dans A

    L prends 2 variables
    LA prends une variable et une valeur

    DC C'S'
    DC X'SALUT'

    DC C semble généré 1 caractère
    DC X semble généré une chaine


    Les manipulations de chaines :

    MVC
    MVI

    MVC et MVI sont des opérations de décalage de chaine
    MVC (Move Character) est utilisé pour déplacé une chaine dans une autre chaine ayant en argument 2 variables.

    MVI (Move Immediate) est utilisé pour déplacé une chaine dans une autre chaine ayant en argument 1 variable et une chaine (et non une variable contenant la chaine).

    Exemple :
    MVI 0(A),C'0' Met le caractère "0" à la premiere position dans la variable A

    LA B,C'0'
    MVC 0(A),0(B) Met le caractère "0" à la premiere position dans la variable A

    Les opérations numériques

    SR

    SR = Soustraction (Substract Registry)

    SR A,A remet à 0 la variable A

    AR

    AR : addition (Add Registry)
    AR B,2 ajoute 2 à B


    Les comparaisons logiques :

    CLC
    CLI

    CLC (Compare .... Character) compare 2 variables chaine
    CLI (Compare .... Immediate) compare une chaine et une valeur

    Exemple :
    CLC A,B
    CLI A, C'0'

    Les sauts conditionnels :

    BNE
    BE
    BZ
    BL

    BNE (Bump non Equal) saut si la condition n'est pas rempli avant le dernier CLI, CLC ou autre
    BE Bump Equal

    BL et BZ :

    Les retours de saut :

    BR

    BR (.... Return) retourne dans la fonction appellante avec un argument en retour.

    Exemple : BR A

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Avril 2002
    Messages
    3 338
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 338
    Points : 4 657
    Points
    4 657
    Par défaut
    J'ai finalement trouvé une page intéressante :

    http://www.simotime.com/simoi370.htm#ProblemState

    donc CLC et CLI c'est Compare Logical Characters et Compare Logical Immediate

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Assembleur 390 et codage MOVE et adressage
    Par minosubb dans le forum Assembleur
    Réponses: 0
    Dernier message: 30/01/2012, 13h39
  2. Conversion instructions assembleur X86 -> PPC
    Par bencall dans le forum Assembleur
    Réponses: 4
    Dernier message: 28/09/2006, 23h02
  3. Quelques instructions dangereuses en Assembleur
    Par bouazza92 dans le forum Assembleur
    Réponses: 30
    Dernier message: 18/08/2006, 23h43
  4. Instructions Assembleur SSE
    Par uriotcea dans le forum C++Builder
    Réponses: 1
    Dernier message: 05/07/2006, 10h31
  5. VC++, assembleur et instruction privilégiée
    Par Michel Devaud dans le forum MFC
    Réponses: 5
    Dernier message: 19/09/2003, 10h12

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