Q:

What is the value of this subtraction?

What would be the end value of AL, if Initially AL consists of 0x00 and it is been subtracted by 0xc5?
Code:
asm3:
    push    ebp          // Base pointer load (Prolong)
    mov     ebp,esp      // Stack loading (Prolong)
    mov     eax,0xb6     // [00 00 00 b6]
    xor     al,al                   <--- Value of AL is 0 
    mov     ah,BYTE PTR [ebp+0x8]
    sal     ax,0x10
    sub     al,BYTE PTR [ebp+0xf]   <--- This is of doubt [ebp+0xf] is 0xc5 a
    add     ah,BYTE PTR [ebp+0xd]
    xor     ax,WORD PTR [ebp+0x12]
    mov     esp, ebp
    pop     ebp
    ret

As pointed, AL value is 0x00 and we have [ebp+0xf] as 0xc5. Then, what would be the new value of AL if it is been subtracted by 0xc5?
Would it be the two's complement of 0xC5, i.e., 0x3B?

A:

That is correct. Subtracting 0xC5 from zero results in the two's complement of 0xC5, 0x3B:
section .data
sys_exit: equ 60

section .text
global _start

_start: nop
    xor al, al
    sub al, 0xC5
    nop            ; al = 0x3B
    mov al, 0xC5
    neg al
    nop            ; al = 0x3B
    mov rax, sys_exit
    xor rdi, rdi 
    syscall

