Hi,
The instruction "mov rdi, 0x00000000000B8000" should be assembled into whatever opcode the assembler thinks is best. Unfortunately the optimisers in most assemblers aren't very good, so...
"mov rdi, 0x00000000000B8000" = 10 bytes
"mov edi, 0x000B8000" = 5 bytes and does exactly the same thing (the CPU does clear the high dword)
"xor ebx, ebx; mov bh, 0b8h; mov edi, ebx" = wrong/buggy (0x0000B800 != 0x000B8000)
mov rdi,[address_of_video_memory] = 8 bytes for the instruction plus 8 bytes of data; and even though it's longer and slower it's the correct way of doing it (because it won't break later when you decide to use a double buffer, or when you start using VBE and LFB for setting a text mode, or when you're using graphics mode with a buffer in RAM for "legacy" stuff).
Cheers,
Brendan