How is it possible that an instruction of 64 bit wide can contain a reference to an address of 64 bit to load it into a register of the CPU?
Quando eu fazia programação de montagem, normalmente uma instrução iria para uma memória separada (um registrador diferente) que o registrador que conteria outros dados, como um endereço de memória.
The instruction register is only 64 bit wide so there will be no place for an opcode anymore?
Normalmente, uma instrução de montagem completa é parecida com: "ADD AX, BX". (Os detalhes podem variar com base em qual assembler está sendo usado.) Nesse caso, a CPU pegaria o valor do registrador AX, o adicionaria ao valor do registrador BX e armazenaria os resultados. Por exemplo, se AX armazenou 2 e BX armazenou 7, então o resultado pode ter o armazenamento AX 9. (Isso é 16 bits: para 64 bits, você pode estar usando RAX em vez de apenas AX.)
Also, when the memory address refers to a byte of memory (maximum integer of 2^8 - 1), how is it possible to express 64 bit integers then?
Um endereço de memória, como um endereço físico onde uma casa está, refere-se apenas a um local de memória. Um inteiro de 64 bits não será armazenado inteiramente em 1 byte; isso levaria 8 bytes.
And what does a ALU do when he adds up 2 64bit integers with a result that can't be expressed in a 64 bit integer?
Ele apenas armazena os resultados possíveis nos 64 bits que ele encontra disponíveis. No entanto, ele também inverte o sinalizador "estouro". Um programador pode verificar se o sinalizador "overflow" foi invertido e perceber que os resultados excederam 64 bits e, portanto, os resultados não são totalmente armazenados no registrador.