Cuando compara el dato (en 8 bits) pasado por parámetro con el dato del arreglo (medio) hace lo siguiente:
xor DX,DX
mov CX, [BP + 8] ; dato pasado como argumento
mov DL, ES:[BX] ; medio
cmp DX,CX
En lugar de eso podría haber hecho:
mov DH, [BP + 8] ; dato pasado como argumento
mov DL, ES:[BX] ; medio
cmp DH,DL
no?