Here's an example, written and assembled with Nasm, linked with Golink (I haven't shown here the issues with calling DLL functions via a pointer):
segment .data
abc:
dd 1234
extern puts
extern exit
segment .text
global main
main:
sub rsp,40
; mov eax,[abc]
mov rcx, KK1
call puts
mov rcx,0
call exit
segment .data
KK1: db 'HELLO',0
With the mov eax,[abc] line commented out, it works. It can take the address of KK1, and puts can access the data as it prints the message. (The sub rsp,40 includes an 8-byte stack adjustment.)
But uncomment the mov eax,[abc] line, and it crashes. It was assembled and linked as follows in Windows 7 64-bit (with some Intel processor):
nasm -fwin64 test.asm
c:\go\golink /console /largeaddressaware /entry main -s /fo test.exe test.obj c:\windows\system32\msvcrt.dll