Fonctions dispatch

Fonctions dispatch

by Kilian D'Eternod -
Number of replies: 2

Bonjour,

Je n'arrive vraiment pas à comprendre certains points concernant les fonctions dispatch, je n'ai pas suivi les cours du BA3 donc peut-être qu'il me manque beaucoup de notions :

1. Dans le dispatch du storage, sommes nous censé toujours récupérer le registre A à travers l'opcode avec extract_reg à l'index 0 ?

2. Pour LD_R16SP_N16, sommes-nous censé récupérer la paire de registre dans l'opcode avec extract_reg_pair ?

3. Où se trouvent les macros extract_reg et extract_reg_pair, elles ne sont pas dans opcode.h comme dit dans l'énoncé ? Et est-ce possible d'avoir un peu plus d'explications sur leur fonctionnement, je ne comprends pas l'exemple donné dans l'énoncé ?

4. Que signifie trois r dans un opcode étant donné que tous les registres sont codés sur deux numéros ? Et comment récupérer ces registres ?

Merci

In reply to Kilian D'Eternod

Re: Fonctions dispatch

by Jean-Cédric Chappelier -

Pour 1 et 2, je ne vais pas vous répondre aussi précisément car c'est justement le but du sujet que vous fassiez ce que l'on vous demande de façon générale,  en utilisant ce que l'on vous fourni, ou PAS si vous ne trouvez pas cela utile. En clair : on vous fournit ce que nous pensons être une aide, mais nous ne vous obligeons pas à l'utiliser, ni n'attendons des lignes de codes exactement les mêmes que les notres (sur-spécification) mais attendons de vous de comprendre ce qui est demandé, le contexte et ce qui est fourni (nous formons des ingénieurs, pas des « analystes-programmeurs » ;-) ).

Par contre, évidemment si qqchose n'est pas clair, c'est à nous de mieux l'expliquer. Donc pour vos questions 3 et 4 :

4. (je commence par 4. car il aide à 3.) : l'encodage « rrr » est expliqué dans la section « Encodage des instruction » (recherchez « rrr » et vous trouverez !) ;

3. Si, si, elles sont au DEBUT du fichier opcode.h (OK, l'organisation de ce fichier n'est pas optimale ; nostra culpa) ;
Ce serait mieux de préciser ce que vous ne comprenez pas, mais je vais essayer d'y répondre :
d'après la table donnée dans la section « Instructions de stockage », l'instruction « LD [HL], A » de la famille LD_HLR_R8 est codée 01110111 (en binaire), soit 0x77. En effet, d'après la table donnée dans la section « Instructions de stockage », les 3 derniers bits de l'encodage d'un opcode de la forme 01110xyz indiquent de quel registre il s'agit (avec la convention « rrr » ; réponse à votre point 4).
Est-ce plus clair ?