------------------BC31编译的代码为何总使用IMUL?---------------------

natrium11 2001-08-15 03:37:50
加精
有代码 unsigned b1=40000;
unsigned c1=40000;
long d1=b1*c1;
编译得到
;
; unsigned b1=40000;
;
fwait
mov word ptr [bp-46],-25536
;
; unsigned c1=40000;
;
mov word ptr [bp-48],-25536
;
; long d1=b1*c1;
;
mov ax,word ptr [bp-46]
imul word ptr [bp-48]
mov word ptr [bp-50],0
mov word ptr [bp-52],ax

明明是无符号数乘法,为何使用IMUL?这样能得到正确答案吗?
难道40000*40000==-25536*(-25536)??

另外,在汇编中的立即数是否都按带符号数识别?
写 MOV AX,40000 行吗?

多谢指教!!
...全文
140 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
蚊子王 2001-08-19
  • 打赏
  • 举报
回复
MUL和IMUL的效率我也不太清楚,可能intel比较清楚;至于为何要这样用那就得问BORLAND。
natrium11 2001-08-18
  • 打赏
  • 举报
回复
哦,原来是这样.
可是他为何要这样用?MUL比IMUL效率低吗?
zhangcc99 2001-08-17
  • 打赏
  • 举报
回复
把你的a0、b0转换成2进制或16进制看,你就发现BC没错!
最主要的是你看BC怎么把c0输出,是unsigned long还是long?这里就有差别了。
蚊子王 2001-08-17
  • 打赏
  • 举报
回复
》》回复人: Areslee(易水) (2001-8-15 18:28:44)
》》因为结果是LONG类型啊。

事实上结果并不是long,因为int相乘结果是int,“long d1=b1*c1”只不过把相乘得到的int转化为long赋给d1;所以跟long无关。

事实上zhangcc99(zhangcc99)说的是有道理的。
40000*40000=1600000000,化为16进制为5f5e1000h,由于结果是int,所以高位溢出,得1000h;(-25536)*(-25536)=652087296,化为16进制为26de1000h,高位溢出得1000h。
所以事实上是一样的。

natrium11 2001-08-17
  • 打赏
  • 举报
回复
TO zhangcc99(zhangcc99):
拜托你能讲清楚些吗?我看不太懂.

我当然从不认为BC错了!我除了想知道为何对之外,还想知道他为何要这样用,MUL比IMUL效率低吗?

多谢!!
natrium11 2001-08-16
  • 打赏
  • 举报
回复
一样!!!

;
; unsigned a0=40000;
;
mov si,-25536
;
; unsigned b0=40000;
;
mov di,-25536
;
; unsigned long c0=b0*a0;
;
mov ax,di
imul si
fwait
mov word ptr [bp-38],0
mov word ptr [bp-40],ax
Areslee 2001-08-16
  • 打赏
  • 举报
回复
你把C0定义在UNSIGNED LONG 试试
natrium11 2001-08-15
  • 打赏
  • 举报
回复
结果是LONG类型为何就可以啊?
难道40000*40000==-25536*(-25536)??


而且,结果是UNSIGNED类型一样如此啊!!

unsigned a0=40000;
unsigned b0=40000;
unsigned c0=b0*a0;

得到:

;
; unsigned a0=40000;
;
mov si,-25536
;
; unsigned b0=40000;
;
mov di,-25536
;
; unsigned c0=b0*a0;
;
mov ax,di
imul si
Areslee 2001-08-15
  • 打赏
  • 举报
回复
因为结果是LONG类型啊。
是可以的

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧