0xFFFFFFF0
é onde uma CPU compatível com x86 inicia a execução de instruções quando está ligada. Esse é um aspecto hardwired, imutável (sem hardware extra) da CPU e diferentes tipos de CPUs se comportam de maneira diferente.
Why the first BIOS instruction is located at the "top" of a 4 GB RAM?
Ele está localizado no "topo" de 4 GB espaço de endereço - e na inicialização do BIOS ou UEFI A ROM está configurada para responder a leituras desses endereços.
Minha teoria sobre por que isso é:
Quase tudo na programação funciona melhor com endereços contíguos. O projetista da CPU não sabe o que um construtor de sistemas desejará fazer com a CPU, portanto, é uma má idéia para a CPU exigir que endereços cheios no meio do espaço sejam necessários para várias finalidades. É melhor manter isso "fora do caminho" na parte superior ou inferior do espaço de endereço. É claro, tenha em mente que essa decisão foi tomada quando o 8086 era novo, e não tinha uma MMU .
No 8086, vetores de interrupção existiam no local de memória 0 e acima. Os vetores de interrupção precisam estar em endereços conhecidos e eram desejados em RAM para flexibilidade - ainda que não fosse possível para o designer da CPU saber quanta RAM estaria em um sistema. Então, começar de 0 e trabalhar fazia sentido (porque nenhum sistema em 1978 quando o 8086 foi inventado teria 4 Gbytes de RAM - então esperar que a RAM estivesse em 0xFFFFFF0 não era uma boa idéia), e então ROM teria que ser no limite superior.
É claro que, começando pelo menos o 80286, os vetores de interrupção podem ser movidos para um local diferente diferente de 0, mas os processadores modernos x86 de 64 bits ainda são inicializados no modo 8086, então tudo ainda funciona da maneira antiga para compatibilidade (Por mais ridículo que pareça em 2015 ainda precisar da sua CPU x86 para poder rodar o DOS).
Portanto, como os vetores de interrupção começam de 0 e funcionam para cima, a ROM teria que começar de cima para baixo.
What would happen if my computer has only 1 GB of RAM?
Uma CPU de 32 bits possui 4.294.967.296 endereços, numerados de 0 (0x00000000) a 4294967295 (0xFFFFFFFF). ROM pode viver em alguns endereços e RAM pode viver em outros. Com o MMU da CPU, isso pode até mesmo ser ligado imediatamente. A RAM não precisa viver em todos os endereços.
Com apenas 1 GB de RAM, alguns endereços não terão resposta quando forem lidos ou gravados. Isso pode fazer com que dados inválidos sejam lidos quando esses endereços forem acessados ou um bloqueio do sistema.
What about systems with more than 4 GB of RAM (e.g: 8 GB, 16 GB, etc.)?
Mantendo a simplicidade: as CPUs de 64 bits têm mais endereços (o que os torna 64 bits, por exemplo, 0x0000000000000000 a 0xFFFFFFFFFFFFFFFF), por exemplo, para que a RAM extra "se encaixe". Assumindo que a CPU esteja no modo longo . Até lá, a RAM está lá, só não endereçável.
Why is stack initialized with some value (in this case, a value located at 0xFFFFFFF0)?
Não consigo encontrar nada imediatamente no que o x86 atribui o ponteiro da pilha ao ligar, mas eventualmente teria que ser reatribuído por uma rotina de inicialização, uma vez que a rotina descobre quanta RAM está no sistema. (@Eric Towers nos comentários abaixo informa que está definido para zero na inicialização.)