Код работает нормально, хотя с несколькими ненужными командами.
Вот полный код для тестирования в FASM. Вы увидите, что я скомбинировал mov cx, 5 и dec cx в mov cx, 4 и переместил присваивание от ax к facto из цикла, чтобы избежать ненужного выполнения кода.
format PE console
entry main
include '%INCLUDE%/win32a.inc'
section '.data' data readable writeable
facto dd 0
section '.text' code readable executable
main:
mov ecx, 4
mov eax, 5
L0:
mul ecx
loop L0
mov [facto], eax
invoke ExitProcess, eax
section '.idata' data import readable
library kernel32,'kernel32.dll'
import kernel32,\
ExitProcess,'ExitProcess'