All instructions are in hexadecimal. Or more accurately, all instructions are just values stored in memory that are best represented in base-16.
I think you're a bit confused. It seems like you understand that basic concept that all instructions are essentially data that's run through an instruction decoder that specifies actions to be taken. You've got opcodes, and then you've got parameters to those opcodes. The whole thing together is taken as one instruction and each Z80 instruction can vary in width.
But if we're thinking just on the level of assembly code (not the machine code it represents), the $FFFF part of that instruction is called an immediate 16-bit parameter (or just imm16). I'm not familiar with Z80 machine code, but let's pretend in the documentation it says "ld hl,imm6" is [10101010][imm16]. The first field is the opcode and the second field is where you stick the 16-bit paramater (in this case, little-endian). I think you're just confusing the terms "immediate value" and "hexadecimal." "Hex" is more or less just a way to write a number, not the number itself.
---
ScoutDavid wrote:
So...
ld hl,$FFFF
ld hl,65535
Can both be done and are both possible?
Are there instructions that need to be Hexadecimal? And can't be written in decimal?
Whoops, I was 4 pages behind the discussion. This post was a response to that, lol.