Immediate operands are literal values ββthat you can encode for the instructions themselves, for example,
MOV R1, 17 ; move 17 as a value to R1
But you may have to put literal values ββin the data structures or tables that your program can use. You are using the psuedo-ops assembler, which declares the repository for this:
DW 17 ; define a word containing the literal 17
Some literals, in particular text strings, almost never fit into the immediate field (there are not enough bits in the direct field), so they really cannot be included in your program as immediate values ββof commands:
XYZ DC "I am a duck."
When this happens, you will usually find instructions that reference the declared data through its label as an implicit immediate value that is not literal:
MOV R1, XYZ
- :
MOV R1, "A"
, :
CALL FOO
FOO:
FOO: MOV R1, 17
RETURN
, .