Assembleur 370 |
MH |
Multipy Halfword |
Syntaxe
Paramètres
Nom |
Description |
R1 |
Ce paramètre permet d'indiquer le registre contenant le multiplicande (valeur de départ). Le résultat (32 bits) de la multiplication sera entreposé dans ce même registre après l'opération. |
D2(X2,B2) |
Ce paramètre permet d'indiquer l'adresse effective en mémoire contenant un halfword (16 bits signés) - c'est le multiplicateur. L'adresse est calculée ainsi : Adresse effective = D2 + contenu de X2 + contenu de B2. D2 : déplacement constant, X2 : registre d'index (optionnel), B2 : registre de base (souvent utilisé pour pointer une table ou une zone mémoire). |
Description
Cette instruction permet d'effectuer la multiplication de l'opérande et du registre et de mettre le résultat dans le registre.
Remarques
- L'instruction MH multiplie le contenu du registre R1 (32 bits signés) par une valeur en mémoire de 16 bits signés. Le résultat est un entier signé de 32 bits,
remplaçant le contenu initial de R1. Cela signifie que R1 est à la fois l'entrée et la sortie de l'opération.
- Le multiplicateur est un halfword (demi-mot), soit 2 octets, ce qui le rend plus léger que l'opérande d'instruction M. Cela convient parfaitement à des calculs sur
des entiers courts, comme dans des boucles ou des structures simples. On l'utilise souvent pour optimiser les performances dans des cas spécifiques.
- L'adresse effective du halfword est déterminée par le triplet D2(X2,B2), combinant un offset, un index et une base. Cette flexibilité permet d'accéder facilement à
des données structurées comme des tableaux. Cela donne à MH un bon niveau d'adaptabilité en contexte réel.
- Étant donné que le résultat est signé, les règles du complément à deux s'appliquent. Si l'un des deux opérandes est négatif, le résultat le sera aussi. Il est donc
crucial de maîtriser les signes des données manipulées.
- Contrairement à l'instruction M, le résultat de MH est limité à 32 bits et n'est pas réparti sur deux registres. Cela évite la gestion de R1+1, mais augmente le
risque de dépassement si les valeurs sont trop grandes. La prudence est donc de mise lors du choix des plages de valeurs.
- Cette instruction modifie directement le registre R1, ce qui impose de sauvegarder sa valeur initiale si elle doit être réutilisée. Le développeur doit anticiper les
écrasements éventuels pour garantir la cohérence des calculs. Cela renforce l'importance d'une bonne gestion des registres.
- MH n'affecte pas les codes condition (CC), ce qui signifie qu'elle ne permet pas directement d'orienter un test. Il faudra suivre l'opération d'un LTR ou équivalent
pour tester le résultat. Cela la rend moins autonome dans un enchaînement logique.
- MH est souvent utilisée dans des calculs simples ou enchaînés où le multiplicateur est une petite valeur fixe ou issue d'un tableau. Sa faible empreinte mémoire la
rend adaptée aux environnements avec peu de ressources. C'est une instruction rapide et efficace dans des contextes bien définis.
Dernière mise à jour : Mardi, le 22 août 2017