je sais pas comment tu verifie ca mais qd on regarde le code asm genere, la fonction asm contient bcp moins d instructions que la fonction " normale" a noter que le forceinline n´a pas marche vu qu´il y a un call, comme quoi 
La fonction asm possede 4 inscrutions en + 2 push et 2 pop pour esi et edi, pour + de surete surement.
voici le listing ( j´ai peur de voir le resultat avec ce forum)
je marque juste le code de la fonction, pas le reste.
? Multi2@@YAEE@Z PROC NEAR ; Multi2, COMDAT
; 14 : {
push ebp
mov ebp, esp
push ebx
push esi
push edi
; 15 :
; 16 : __asm
; 17 : {
; 18 : Mov Al,num
mov al, BYTE PTR _num$[ebp]
; 19 : Shl Al,1
shl al, 1
; 20 : Jnc N
jae SHORT $N$217
; 21 : Xor Al,0x1B
xor al, 27 ; 0000001bH
$N$217:
; 22 : N:
; 23 : }
; 24 :
; 25 : }
pop edi
pop esi
pop ebx
pop ebp
ret 0
? Multi2@@YAEE@Z ENDP ; Multi2
et voici la fonction " normale"
? Multi2@@YAEE@Z PROC NEAR ; Multi2, COMDAT
; 29 : {
push ebp
mov ebp, esp
push ecx
; 30 : unsigned char tmp=num<<=1;
mov al, BYTE PTR _num$[ebp]
shl al, 1
mov BYTE PTR _num$[ebp], al
mov cl, BYTE PTR _num$[ebp]
mov BYTE PTR _tmp$[ebp], cl
; 31 : if ( num &128 ) num ^= 0x1b;
mov edx, DWORD PTR _num$[ebp]
and edx, 255 ; 000000ffH
and edx, 128 ; 00000080H
test edx, edx
je SHORT $L218
mov al, BYTE PTR _num$[ebp]
xor al, 27 ; 0000001bH
mov BYTE PTR _num$[ebp], al
$L218:
; 32 : return num;
mov al, BYTE PTR _num$[ebp]
; 33 : }
mov esp, ebp
pop ebp
ret 0
? Multi2@@YAEE@Z ENDP ; Multi2
j´ai du mal a voir comment tu peux dire que la fonction asm est + lente et j´ai la flemme de mesurer ( si qqn veut bien se devouer) 