原有的乘法指令是8位乘法或16位乘法,对于32位的大数乘法还是要自己去实现的。其实思路也不难,类比考虑两位数十进制乘法:(10A + B) X (10C + D) = 100 AC + 10BC + 10 AD + BD
那么我们要实现的就是四次16进制的乘法和将其结果相加:
目标为NUM_A: NUM_B X NUM_C :NUM_D -> RESULT_H:RESULT_MH: RESULT_ML:RESULT_L
可以分解为
NUM_B X NUM_D -> RESULT_ML:RESULT_L
NUM_A X NUM_C -> RESULT_H:RESULT_MH
RESULT_MH : RESULT_ML += NUM_B X NUM_C
RESULT_MH : RESULT_ML += NUM_A X NUM_D
初步形成代码:
;实现32位大数乘法
;(10A + B) x (10C + D) = 100AC + 10(AD + BC) + BD
STACK SEGMENT PARA STACK
STACK_AREA DW 100H DUP(0)
STACK ENDS
DATA SEGMENT PARA
NUM_A DW 1234H
NUM_B DW 5678H
NUM_C DW 8765H
NUM_D DW 4321H
RESULT_H DW 0
RESULT_MH DW 0
RESULT_ML DW 0
RESULT_L DW 0
DATA ENDS