Unlike the other registers, I've noticed doing something like add $1, %al encodes the instruction much differently than the other (8-bit) registers. For example:
add $3, %al
add $3, %bl
add $3, %cl
add $3, %dl
Translates to:
0x0000000000401000 04 03 ? add $0x3,%al
0x0000000000401002 80 c3 03 ? add $0x3,%bl
0x0000000000401005 80 c1 03 ? add $0x3,%cl
0x0000000000401008 80 c2 03 ? add $0x3,%dl
I went through the encoding of add-imm8 in my previous question, but the add $3, %al seems to completely contradict that (no mod-reg-rm byte?). Is this a legacy instruction or something, or why does it look so much different than the other ones?