Immediate operands are literal values you can encode into the instructions themselves, e.g.,
MOV R1, 17 ; move 17 as a value to R1
But, you may have need to put literal values into data structures or tables that your program may use. You use assembler "psuedo-ops" that declare storage to do this:
DW 17 ; define a word containing the literal 17
Some literals, notably text strings, almost never fit into the immediate field (not enough bits in the immediate field), so really cannot be included in your program as instruction-immediate values:
XYZ DC "I am a duck."
When this happens, you will typically find instructions that refer to the declared data via its label as an implicit immediate value, which is not a literal:
MOV R1, XYZ
An exception is an extremely short string literal:
MOV R1, "A"
This isn't really different than the implicit literal in a call statement:
CALL FOO
which refers to the label on the FOO code:
FOO: MOV R1, 17
RETURN
Your assembler syntax may vary from this, but the principles stay the same.