我有两个初始化过的变量n1 ,n2 都是unsigned int类型
然后我将两个变量相乘n1*n2,编译后它们生成的都是imul,它们在哪种情况下才会是mul呢?
还有个疑问是,无论我赋什么值,imul与mul得到的是相同的结果,而不像通常想象的正数乘以负数的情况下,imul与mul有不同的结果.这是怎么回事
------解决方案--------------------------------------------------------
你把n1,n2弄成unsigned short int,看下一会不会是mul,如果还不是的话,那就是C编译器为了让做乘法的子程序具有更大的适用性而只用imul而不再用mul,这样的后果是在某些情况下使得程序冗长.
再有,你说的无论赋什么值,imul与mul得到的是相同的结果.这个应该是正常的.两个都是做乘法的指令区别只在于一个是16位的,一个是32位的.还有,你把n1 ,n2 弄成了unsigned int,也就是说,他是一个无符号整数,所以imul与mul对他的操作都是作为非负数来处理的,他们当然得出相同的结果,除非溢出了.
------解决方案--------------------------------------------------------
imul 更加灵活, mul 只能用EAX作为一个乘数,寄存器分类增加难度