2010-10-18 35 views
3

Existe-t-il une raison pour laquelle l'opérateur MUL est uniquement sous forme d'opérande unique?
L'opérateur IMUL peut être sous trois formes différentes (avec un, deux ou trois opérandes) et c'est beaucoup plus pratique. Du point de vue technique, je ne vois aucune raison pour laquelle l'opérateur MUL ne peut pas être sous la forme de deux/trois opérandes.Opérateur MUL Vs Opérateur IMUL dans NASM

+1

Quelqu'un peut-il se prononcer sur la différence entre MUL et IMUL? – CodyBugstein

Répondre

5

Cela a à voir avec les bytecodes qui sont sortis. Dans le monde d'avant 80286 il y avait trop d'opcodes donc les ingénieurs d'Intel trouvaient des manières de surmonter le problème. Une solution consistait à étendre la partie du bytecode qui spécifie l'opération (multiplication dans ce cas) dans la partie du bytecode qui codait le premier opérande. Cela signifiait évidemment qu'un seul opérande pouvait être supporté lors de l'exécution de l'opcode MUL. Parce qu'une multiplication nécessite deux opérandes, ils ont résolu le problème en codant dur dans le processeur que le premier opérande serait toujours le registre eax. Les processeurs ultérieurs étaient supportés par des codes de longueurs multiples qui leur permettaient d'encoder plus de données en une seule commande. Cela leur a permis de rendre l'opcode IMUL beaucoup plus utile.

Il existe aujourd'hui un parallèle intéressant avec l'épuisement des adresses IP.

+1

Je pense qu'il vaut la peine de souligner qu'il n'y a pas besoin des autres modes avec 'MUL'. 'MUL' fait un mot non signé * mot à double mot. 'IMUL' avec un opérande fait la même chose pour signé. Pour le mot * mot pour le mot de mot inférieur n'a pas d'importance, il n'y a pas besoin de ce mode avec «MUL». –

4

Ce n'est pas que NASM ne le supporte pas - sur la CPU, la version signée de l'instruction prend simplement en charge plus de variantes que la version non signée.