In between an instruction set for a CPU, and the assembler defined for that CPU, there are usually instructions for loading the data contents at a memory location, AND instructions for loading the address of the memory location (essentially, to a pointer.)
MOVLW DATA_EE_ADDR
is essentiall similar to the C statement:W = &DATA_EE_ADDR;
Some combinations will use different opcodes, some just different formats for the operands.Here's a try at some examples. (Some of them are probably a bit far off; it's been a while since I've done much assembly language programming.)
.data
.org 200. ;; start this block of data at 200 for some reason.
MYDATA: .word 123. ;; define some data. It'll be sorta like this.
.text
PDP10: move 1, MYDATA. ;; puts 123 into register 1 (the value stored in MYDATA)
movei 1, MYDATA ;; puts 200 into register 1 (the address of MYDATA)
MASM86: mov MYDATA, ax. ;; move 123 into register ax
mov $MYDATA, ax ;; 200 in ax.
PIC: MOVF MYDATA, W ;; move 123 into W
movlw MYDATA. ;; move 200 into W.
AVR: lds r16, MYDATA ;; 123 into r16
ldi r16, MYDATA ;; 200 in r16
ARM: ldr r3, MYDATA ;; loads 123 (maybe PC relative with limitations.)
adr r3, MYDATA ;; loads 200 (similar limitations.)