[org 0x0100]

num: db 0
factorial: dw 1
VUID: db 1,2,3,4,5,6,7,8
mov bx,0
jmp start
fact: mov ax, byte[num]
fact_loop: mul word[factorial]
sub ax,1
cmp ax,0
jg fact_loop
ret
start: mov bx,0
mov cx,[VUID+bx]
add bx,1
shr cx,1
jc start
mov [num],cx
call fact

mov ax, 0x4c00
int 0x21

This makes it 3 posts and fine examples of what to do if you do not want help.

While I'm no expert in 80x86 assembler I have worked on over a dozen microcomputers for embedded systems which required assembler to create the bootstrap to get to C where the bulk of the work was done.

Inquiring minds want to know why are you posting like this. Maybe you just don't know that code dumps with comments and questions are going to get you no where.