Make a assembly file factorial.asm and follow along -

                                    

global _start ; must be declared for linker

section .data

input_prompt db "Enter an integer " ; input_prompt="Enter an integer "

len_input_prompt equ $ - input_prompt ; len_input_prompt equals size of input_prompt

disp_prompt db "Factorial is " ; disp_prompt="Factorial is "

len_disp_prompt equ $ - disp_prompt ; len_disp_prompt equals size of disp_prompt

section .bss

data resb 5 ; Unitialized data variable data

ans resb 5 ; Unitialized data variable ans

section .text

_start: ; start label

mov eax, 4 ; sys_write system call

mov ebx, 1 ; stdout file descriptor

mov ecx, input_prompt ; ecx=input_prompt

mov edx, len_input_prompt ; edx=len_input_prompt

int 0x80 ; Calling interrupt handler to exit program

mov eax, 3 ; sys_read system call

mov ebx, 2 ; stdin file descriptor

mov ecx, data ; Read input value in data

mov edx, 5 ; 5 bytes (numeric, 1 for sign) of that data value

int 0x80 ; Calling interrupt handler to exit program

mov eax, 4 ; sys_write system call

mov ebx, 1 ; stdout file descriptor

mov ecx, disp_prompt ; ecx=disp_prompt

mov edx, len_disp_prompt ; edx=len_disp_prompt

int 0x80 ; Perform the system call

mov eax, 1 ; eax=1

mov ecx, [count] ; eac equal to value in count

sub eax, '0' ; Converting to ASCII

label:

mul ecx, 1 ; multiply eax with ecx

dec ecx ; ecx=ecx-1

mov [ans], ecx ; ans value equal to ecx

add eax, '0' ; Converting to ASCII

cmp ecx, 1 ; Comparing ecx with 1

jg label ; if greater than 1 jump to label

mov eax, 4 ; sys_write system call

mov ebx, 1 ; stdout file descriptor

mov ecx, ans ; ecx=ans

mov edx, 5 ; 5 bytes (numeric, 1 for sign) of that data value

int 0x80 ; Perform the system call

mov eax , 1 ; sys_exit system call

mov ebx , 0 ; setting exit status

int 0x80 ; Calling interrupt handler to exit program


                                    

>> nasm -f elf32 factorial.asm -o factorial.o

>> ld -m elf_i386 factorial.o -o factorial

>> ./factorial

>> echo $?


                                   

>> Enter an integer 3

>> Factorial is 6

>> 0

Now let us study about File handling.