Факториал на assembler

введите сюда описание изображения

Нужно добавить факториал, не пойму как в ассемблере он устроен. Вот код, который получилось сделать:

format PE64 console
entry main
include 'D:\FASM\INCLUDE\win64ax.inc'
section '.data' data writable
        n               dq      5
 
        resultStr       db      16 dup (" ")
        str_fmt         db      "%s",10,0
        int_fmt         db      "%d",0
        Message         db      "Press any key ...",0
 
section '.text' code executable
  proc main
  xor rbx, rbx    ;int S=0;
  mov rax, 1      ;int f=1;
  mov rcx, 1      ;for(int k=1; k<=n; k++)
  .for:           ;{
  imul rax, rcx ;  f= f*k;  // imul k
  neg rax       ;  f= -f;   // neg eax
  add rbx, rax  ;  S=S+f;
  inc rcx
  cmp rcx, [n]
  jb .for         ;}
        cinvoke sprintf, resultStr, int_fmt, rsi
        cinvoke printf, str_fmt, resultStr
        cinvoke printf, str_fmt, Message
        cinvoke getch
        xor rax,rax
      ret
endp
 
section '.idata' import data readable writeable
        library msvcrt,'MSVCRT.DLL'
        import msvcrt,\
               sprintf, 'sprintf',\
               printf, 'printf',\
               getch, '_getch'

Ответы (0 шт):