Почему этот цикл показывает 20 вместо 120? - PullRequest
0 голосов
/ 27 марта 2019

Почему этот цикл показывает 20 вместо 120?

ORG 100H 
  facto dw ? 
START: 
   MOV CX, 5 
   MOV AX, 5
   DEC CX  
   repeat : 
     MUL CX 
     MOV facto , AX 
   LOOP repeat 
ENDS
END START :

1 Ответ

1 голос
/ 27 марта 2019

Код работает нормально, хотя с несколькими ненужными командами. Вот полный код для тестирования в 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'
...