After the mull
the product of EAX
times ECX
is in EDX:EAX
, in your case
factors:
eax 0x17d78400 400000000
ecx 0x5f5e100 100000000
product:
eax 0xbf040000 -1090256896
edx 0x8e1bc9 9313225
So the 64-bit product is
0x8e1bc9bf040000
Which in decimal is
40,000,000,000,000,000
So the product is correct, and in the correct place.
You move EAX to EDI, which is only the lower 32-bits of the product. The next instruction, which you didn't step, is a move of EDX to ESI (the upper 32-bits of the product).