236Fermer238
PolluxLe 20/07/2008 à 17:04
GoldenCrystal (./236) :
Il y a une différence majeure entre cmp et cmpa: cmpa ne fonctionne pas en .b ! tongue

Non, cmpa n'est pas le bon critère : le vrai critère c'est qu'aucune instruction ayant un An pour opérande ne fonctionnera en .b... Par exemple cmp.b an,dn ou bien cmpi.b #42,an n'existent pas, alors que cmp.b et cmpi.b existent.
GoldenCrystal (./236) :
(Et puis après c'est aussi du au fait que pour les autres instructions ALU dont la destination est un registre d'adresse (adda et suba) les flag ne sont pas modifiés, et vu que tout est construit sur le même modèle... grin)

Pareil, adda n'est pas le bon critère : addq ne modifie pas les flags non plus si la destination est un registre d'adresse. Et c'est précisément ça le bon critère : quand la destination est un registre d'adresse, les flags ne sont jamais modifiés (sauf pour les instructions de comparaison elles-même).


Bref, comme tu peux le voir toutes ces instructions en *a donnent des fausses intuitions, quelqu'un qui est habitué à lire du code avec des adda.w ne se rendra pas forcément compte que addq.w #4,an modifie tous les 32 bits du registre même si ça n'est pas une instruction en *a.