本文主要是介绍汇编程序:32位无符号数乘法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【任务】用十六位乘法指令完成三十二位无符号数乘法(结果64位),数据用下面的内存单元提供:
ddata segmentx1 dw 5678Hx2 dw 1234Hy1 dw 0DEF0Hy2 dw 9ABCHxy dw 4 dup (?)
ddata ends
其中,被乘数x=((x2)*2^16)+(x1),即x2是高16位,x1是低16位;乘数y=((y2)*2^16)+(y1),即y2是高16位,y1是低16位。
【分析】
将把32位的被乘数的乘法分别分割成2个16位的数,分别对其进行16位的乘法,然后将得到的4个16位乘法的乘积,按照各自的位相加的最终乘积,如下图:
【参考解答】
assume cs:ccode, ds:ddata
ddata segmentx1 dw 5678Hx2 dw 1234Hy1 dw 0DEF0Hy2 dw 9ABCHxy dw 4 dup (?)
ddata ends
ccode segment
start:mov ax,ddatamov ds,axmov ax,x1mov dx,y1mul dxmov [xy],axmov [xy+2],dx ;被乘数低位4字符x1和乘数低位4字符y1相乘结果低位存入xy,高位存入xy+2mov ax,x2mov dx,y1mul dxadd [xy+2],axadc [xy+4],dx ; 被乘数高位4字符x2和乘数低位4字符y1相乘结果低位存入xy+2,高位存入xy+4mov ax,x1mov dx,y2mul dxadd [xy+2],axadc [xy+4],dxadc [xy+6],0 ; 被乘数低位4个字符x1和乘数高位4个字符y2相乘结果低位存入xy+2,高位存入xy+4mov ax,x2mov dx,y2mul dxadd [xy+4],axadc [xy+6],dx ; 被乘数高位4个字符x2和乘数高位4个字符y2相乘结果低位存入xy+4,高位存入xy+6mov ah,4chint 21hccode ends
end start
这篇关于汇编程序:32位无符号数乘法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!