Вот код на паскале. задача вычисление факториала
uses crt;
var n:byte;
function fack(n:byte):longint;
begin
if n=0 then fack:=1
else fack:=fack(n-1)*n
end;
begin
clrscr;
read(n);
writeln(fack(n));
readkey;
end.
uses crt;
var n:byte;
function fack(n:byte):longint;
begin
if n=0 then fack:=1
else fack:=fack(n-1)*n
end;
begin
clrscr;
read(n);
writeln(fack(n));
readkey;
end.
.code
main PROC
push 12 ; Вычислим 12!
; Можешь запрашивать значение у пользователя
call Factorial ; Результат в EAX
ReturnMain:
; Здесь - отображаем результат ...
exit
main ENDP
;-----------------------------------------------------------
Factorial PROC
; Процедуры вычисления факториала.
; Передается: [ebp+8] = n, исходное число, факториал
; которого нужно вычислить
; Возвращается: eax = факториал числа n
;-----------------------------------------------------------
push ebp
mov ebp,esp
mov eax,[ebp+8] ; Загрузим число n
cmp eax,0 ; n > 0?
ja L1 ; Да, продолжим вычисление
mov eax,1 ; Нет, вернем 1
jmp L2
L1:
dec eax
push eax ; Вычислим (n-1)!
call Factorial
; Команды, расположенные в этом месте программы,
; выполняются после возврата из рекурсивной процедуры.
ReturnFact:
mov ebx,[ebp+8] ; Загрузим n
mul ebx ; edx:eax = eax * ebx
L2:
pop ebp ; Выйдем из процедуры
; и возвратим результат в EAX
ret 4 ; Удалим аргумент из стека
Factorial ENDP
END main