注册 登录
编程论坛 汇编论坛

[求助]关于双字节的乘法和除法

静思 发布于 2006-05-09 17:19, 2925 次点击
已知X和Y为双字节带符号数据,怎样实现X*Y和X/Y?
本人正学汇编中,麻烦大家指导一下,不胜感激!!!!!!!

5 回复
#2
公子吕2006-05-10 12:55

X dw xxxxh
Y dw xxxxh

mov ax,X
imul Y ; X*Y;;;乘积结果在dx(高位),ax(低位)中.

mov ax,X
cwd ;将ax的符号扩展到dx.
idiv Y ; X/Y;;;商和余数分别放到ax,dx.

#3
静思2006-05-10 22:28
楼上所说的指令IMUL和IDIV只能用于字类型的数据,而我所说的是双字类型的数据。
#4
静思2006-05-11 12:43
哦,2楼说的对,我把双字节类型的数据搞混了,其实双字节类型的数据就是字类型的数据.....
#5
–★–2006-05-11 17:17
回复:(公子吕)X dw xxxxhY dw xxxxhmov ax,Ximul Y...

.386

X DD ?
Y DD ?

mov eax,X
imul Y ; X*Y;;;乘积结果在edx(高位),eax(低位)中.

mov eax,X
cdq ;将eax的符号扩展到edx.
idiv Y ; X/Y;;;商和余数分别放到eax,edx.

#6
dafubj2010-08-05 17:06
回复 5楼 –★–
这里有一个范例,可以参考。看完自然明白:
DATAX    DW  0148H
DW  2316H
DATAY    DW  0237H
DW  4052H
要求按照双字将DATAX和DATAY相乘。
解答:

AA      DW  0
BB      DW  0
CC      DW  0
DD      DW  0
 ┇
MOV  AX, DATAX
MUL  DATAY
MOV  AA , AX
MOV  BB, DX
MOV  AX, DATAX
MUL  DATAY+2
ADD  BB, AX
ADC      CC, DX
MOV  AX, DATAX+2
MUL  DATAY
ADD  BB, AX
ADC      CC, DX
ADC      DD, 0
MOV     AX, DATAX+2
MUL  DATAY+2
ADD  CC, AX
ADC      DD, DX
1