Petit casse-tête (facile)

Des MO et des TO...

Modérateur : Politburo

Répondre
Avatar du membre
Prehisto
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 163
Enregistré le : 26 juin 2006 11:37
Localisation : France (24)

Petit casse-tête (facile)

Message par Prehisto »

Comment grapiller des octets sur cette portion de programme avec le même effet à l'exécution:

Code : Tout sélectionner

     CMPY   #$0000     4 octets
     BNE    xxxx       2 octets
Top chrono!
Potrzebie
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 10726
Enregistré le : 09 mars 2003 16:23
Localisation : Vendée - France
Contact :

Message par Potrzebie »

42
Image
Avatar du membre
Prehisto
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 163
Enregistré le : 26 juin 2006 11:37
Localisation : France (24)

Message par Prehisto »

Exact.
Yoann
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 142
Enregistré le : 28 oct. 2005 05:01

Re: Petit casse-tête (facile)

Message par Yoann »

Prehisto a écrit :Comment grapiller des octets sur cette portion de programme avec le même effet à l'exécution:

Code : Tout sélectionner

     CMPY   #$0000     4 octets
     BNE    xxxx       2 octets
Top chrono!
Deja, j'utiliserais plutot X que Y (les mnemoniques se referrant a Y sont souvent codees sur 2 octets au lieu de 1)

De plus, le CMPY #$0000 ne sert a rien (Dans le cas suivant). En chargeant la valeur dans Y, le carry flag est mis a jour. Si Y etait calcule a 0 a la mnemonique precedente, le bit Z du carry flag etait deja mis a 1. Donc, je ne ferais a la limite qu'un :

Code : Tout sélectionner

BNE XXXX
 
(en prennant en compte que l'operation precedente etait a propos de Y ... ou de n'importe quel registre sur lequel la comparaison doit se faire - Mais sans un ch'tit bout de programme sur l'execution d'avant, ce n'est pas facile de dire si c'est la solution)
Avatar du membre
Prehisto
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 163
Enregistré le : 26 juin 2006 11:37
Localisation : France (24)

Message par Prehisto »

- Le programme est un programme complet. Donc il n'est pas autorisé à l'amputer seulement d'une instruction.
- Le test se fait sur Y, et pas sur un autre registre.
Yoann
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 142
Enregistré le : 28 oct. 2005 05:01

Message par Yoann »

Prehisto a écrit :- Le programme est un programme complet. Donc il n'est pas autorisé à l'amputer seulement d'une instruction.
- Le test se fait sur Y, et pas sur un autre registre.
Bon, alors, en utlisant DP peut etre ?
Avatar du membre
Prehisto
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 163
Enregistré le : 26 juin 2006 11:37
Localisation : France (24)

Message par Prehisto »

Yoann a écrit : Bon, alors, en utlisant DP peut etre ?
Non.
jasz
Désactivé
Messages : 796
Enregistré le : 12 déc. 2004 07:53
Localisation : Planete Zorg (31)

Message par jasz »

Prehisto a écrit :- Le programme est un programme complet. Donc il n'est pas autorisé à l'amputer seulement d'une instruction.
Je me disais aussi. Cela semblait trop simple et ce ne serait plus un casse tête...

..."Facile"... Pour celui qui connait la réponse, n'est ce pas prehisto! ;)

Donc, il ne faut utiliser que Y et rien d'autre. C'est ça?


Sur ST, il existe un registre d'état qui code sur 16 bits l'état des resgistres A(0-7) et D(0-7). C'est à dire égal (0) ou <> (1) de 0. Mais, je doute que l'on trouve ça sur 6809. :roll:

Quoiqu'il en soit cela permet de gagner deux octets.
Stef
Avatar du membre
Prehisto
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 163
Enregistré le : 26 juin 2006 11:37
Localisation : France (24)

Message par Prehisto »

jasz a écrit :
Prehisto a écrit :- Le programme est un programme complet. Donc il n'est pas autorisé à l'amputer seulement d'une instruction.
Je me disais aussi. Cela semblait trop simple et ce ne serait plus un casse tête...

..."Facile"... Pour celui qui connait la réponse, n'est ce pas prehisto! ;)
Héhé ben oui héhé :oops: :)
jasz a écrit : Donc, il ne faut utiliser que Y et rien d'autre. C'est ça?
Oui. On a le droit de remplacer les instructions, mais pas de les éliminer. Et le tout agissant avec le registre Y. Bref, avec le même effet.
jasz a écrit : Sur ST, il existe un registre d'état qui code sur 16 bits l'état des resgistres A(0-7) et D(0-7). C'est à dire égal (0) ou <> (1) de 0. Mais, je doute que l'on trouve ça sur 6809. :roll:

Quoiqu'il en soit cela permet de gagner deux octets.
... et il faut rester sur le Thomson, bien sûr :)
Avatar du membre
Prehisto
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 163
Enregistré le : 26 juin 2006 11:37
Localisation : France (24)

Message par Prehisto »

Prehisto a écrit : On a le droit de remplacer les instructions, mais pas de les éliminer.
Là, je vous ai mis sur la voie...
Avatar du membre
Prehisto
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 163
Enregistré le : 26 juin 2006 11:37
Localisation : France (24)

Message par Prehisto »

Indice : la nouvelle formulation fait gagner 2 octets et 1 cycle machine.
Avatar du membre
BubbleBobble
Modérateur
Modérateur
Messages : 2641
Enregistré le : 08 sept. 2004 22:24
Localisation : Toulon

Message par BubbleBobble »

si le CMPY ne sert à rien, autant le remplacer par un NOP si cette mnémonique existe sur ce proc.
Comme ça pas d'instruction en moins :)

Pierre
Le frottage de silex, c'est tout sauf une innovation : avant, on attendait simplement que la foudre tombe sur un arbre et qu'elle enflamme une branche, et ça fonctionnait très bien... ©SbM
jasz
Désactivé
Messages : 796
Enregistré le : 12 déc. 2004 07:53
Localisation : Planete Zorg (31)

Message par jasz »

...

Je sèche :oops:
Modifié en dernier par jasz le 10 août 2006 13:07, modifié 1 fois.
Stef
Avatar du membre
Prehisto
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 163
Enregistré le : 26 juin 2006 11:37
Localisation : France (24)

Message par Prehisto »

BubbleBobble a écrit :si le CMPY ne sert à rien, autant le remplacer par un NOP si cette mnémonique existe sur ce proc.
Comme ça pas d'instruction en moins :)

Pierre
Oui, mais ça n'a plus le même effet :wink:
Avatar du membre
Prehisto
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 163
Enregistré le : 26 juin 2006 11:37
Localisation : France (24)

Message par Prehisto »

jasz a écrit :Un indice siouplex. :oops:
Nouvel indice: l'instruction qui remplace CMPY #$0000 est en adressage indexé.
Répondre

Retourner vers « Thomson »