带符号数相乘的计算~~~~麻烦将结清楚的来谢谢

如(AL)=0B4H ,(BL)=11H,求IMUL BL
麻烦讲讲谢谢啦
我想知道的是计算过程,他的命令执行起来我明白,我自己就是算不对,也就是说自己不太会有符号数的乘法,答案应该是(AX)=0FAF4H CF=OF=1书上这么写的

IMUL 有符号数乘法指令,相乘的两个数均看做有符号数,

AL的内容是个有符号数,一般计算机中有符号数用补码表示,所以0B4H是某个数的补码,即[X]的补码 = 0B4H = 1011 0100 B,求出X= -100 1100 B = -76.

BL的内容是个有符号数,11H是某个数的补码,即[X]的补码 = 11H = 0001 0001 B,求出X= +001 0001 B = +17.

(AL)*(BL)= -76 * (+17)= -1292

把 -1292 转换成二进制为 -101 0000 1100 B

在将这个结果(-101 0000 1100 B)转换成16位补码形式,转换之前还要把它补齐成16位,即,为-000 0101 0000 1100 B ,将它转换成补码形式为1111 1010 1111 0100 B ,最后把这个数再转换成16进制,即为FAF4H。

根据IMUL指令的规定,若乘积的高一半是低一半的符号位的扩展则OF=CF=0,否则OF=CF=1。

也就是说,如果结果的高一半的所有位,与低一半的第一位相同,则OF=CF=0,如果不相同,则OF=CF=1。

本题中,结果是FAF4H=1111 1010 1111 0100 B,那么高一半是1111 1010,低一半是1111 0100 ,所以结果的高一半的所有位,与低一半的第一位 不 相同,即乘积的高一半 不是 是低一半的符号位的扩展,所以OF=CF=1。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-11-28
IMUL 的意思是把他的操作数(BL)与默认的寄存器(AX或AL)相乘,然后放到AX或AL中(当然你这里是AX,因为两个8位的相乘就变成16位了).
结果是:AX=0CO4H
给我加分哦.
第2个回答  2008-11-28
乘积在AX 中 如果高位为0 CF OF 为0,否则为1 其余标志位无影响

IMUL sour

sour是乘数 如果sour是8位或16位或32为,则被乘数在 AL 或AX 或EAX 乘积在 AX 或DX:AX 或EDX:EAX
相似回答