ah and al are both under the ax registry right? well is there a significant difference between ah an al?
AH and AL are the upper and lower bytes of the AX register. Much like AX is the lower 16 bits of EAX and EAX is the lower 32 bits of RAX. They're general registers, but some instructions expect operands in a specific register or part of a register or write to a specific register or part of a register.
For example, let's take this block:
mov ah,01h ;ask user
int 21h
add al,20h ;converts uppercase to lowercase
mov bl,al
int 21h (if you read the documentation I linked earlier) states that an operand in AH of 01h will cause a character to be read from standard input, and the character that's read will be stored in AL. BL is the more permanent storage for the character as other work is performed using AX prior to printing that character.
And before you ask, yes, it could also be done like this:
mov ah, 01h
int 21h
mov bl, al
add bl, 20h
There's not really any reason to add before moving or move before adding. There may be a performance reason I'm not familiar with, but in this case I doubt it given that you're working with two general registers of the same size.