Reason for x86 reset vector being at 0xFFFFFFF0 instead of 0xFFFFFFFF
x86 instructions often take up more than one byte, and a reasonable reset routine will almost certainly point to multiple instructions.
If the reset vector were to refer to 0xFFFF_FFFF, then only a single byte instruction would fit into that memory mapping; almost any useful reset functionality would thus require instructions that cross the 0xFFFF_FFFF/0xFFFF_0000 linear address boundary (since the code segment is set up with base 0xFFFF_0000)
By placing the reset code at this address, it's possible to fit a few instructions (including a jump) without requiring valid memory at 0xFFFF_0000.