If you take both code addresses and convert them to decimal address with UE, you can subtract the smaller value from the larger value and then reconvert that value back to hex with UE. Assuming UE will convert, this SHOULD be the distance between the 2 code addresses from starting byte to starting byte. You will have to then further adjust manually to account for length of operation/code and/or that of any jump statement. I just tested a small jump and the byte count was off by one. If you use the address of the LAST byte in your operation it should give you the exact number.
Hope that helps... Giving an example would be difficult, but can be done if requested.
As for subroutine, it is small and lacks certain prequisites to be called a true subroutine. For example there is no table of values preceding, there are no push statements to get the registers setup. I believe this here may be what QD referred to as "fastcall". Looks like they can carry additional code to "enlarge" areas of full subroutines lacking codespace. Also you can probably even have a call inside a call if you needed even more. Calling also appears to be more efficient than jumping back (C3 Return as opposed to E9 xx xx xx xx long jump). I will admit that I do not fully understand calls and what all they can be used for, but just from looking at them I can see what they do, and if it works, it works.. matters not how, just that it does. Lol.