Syntaxe
Paramètres
| Nom |
Description |
| R1 |
Ce paramètre permet d'indiquer le registre général contenant la première opérande (multiplicande) et recevant le résultat. Le résultat est placé dans R1 et R1+1 (car il peut faire jusqu'à 64 bits). Donc : R1 = partie haute, R1+1 = partie basse du résultat. |
| D2(X2,B2) |
Ce paramètre permet d'indiquer l'adresse effective en mémoire où se trouve la seconde opérande (le multiplicateur). Calculée par : Adresse effective = D2 + contenu de X2 + contenu de B2. D2 : déplacement (constante), X2 : registre d'index (optionnel), B2 : registre de base (optionnel) |
Description
Cette instruction permet d'effectuer la multiplication de l'opérande et du seconde registre de la paire et de mettre le résultat dans un registre.
Remarques
- L'instruction M effectue une multiplication entière signée entre un registre (R1) et une valeur mémoire. Le résultat est stocké dans une paire de registres : R1 contient
la partie haute, R1+1 la partie basse. Cela permet de gérer un résultat de 64 bits même si les opérandes sont sur 32 bits.
- Avant l'exécution, R1 doit contenir le multiplicande (opérande de gauche), tandis que l'opérande mémoire sert de multiplicateur. C'est l'inverse de la convention
habituelle source/destination. Cela signifie que le registre R1 est à la fois source et destination.
- Le format d'adressage D2(X2,B2) permet de localiser dynamiquement l'opérande mémoire. Cela autorise une grande souplesse grâce à l'utilisation combinée d'un
déplacement, d'un registre index et d'un registre base. C'est très utile pour parcourir des tableaux ou des structures.
- La présence d'un résultat en deux registres (R1 et R1+1) implique que l'on doit faire attention à ne pas utiliser R1+1 pour autre chose juste après. Sinon, cela risque
de corrompre la valeur du résultat. Une bonne gestion des registres est donc essentielle.
- Le contenu de R1 est écrasé par le résultat, donc si on souhaite le conserver, il faut le sauvegarder avant la multiplication. De même, R1+1 sera aussi modifié.
Cela impose une planification rigoureuse dans les traitements.
- L'instruction M ne met pas à jour les codes condition (CC). Cela signifie qu'elle ne peut pas être directement utilisée pour des tests conditionnels (comme M=0
ou M<0). Il faut alors suivre par une autre instruction de test si nécessaire.
- Il est important de noter que l'instruction M traite des entiers signés. Si l'un des opérandes est négatif, le résultat le sera aussi, conformément à l'arithmétique en
complément à deux. Cela doit être anticipé dans les traitements.
- L'instruction M fait partie des opérations arithmétiques complexes du S/370, aux performances raisonnables. Elle est préférée pour les calculs numériques, notamment
dans les programmes financiers ou scientifiques. Sa capacité à retourner un long résultat est un atout majeur.
Dernière mise à jour : Mardi, le 22 août 2017