.386
.model flat,stdcall
option casemap:none
.data
sum DWORD 0 ;创建一个全局变量,取名sum,初始化0
sum1 DWORD ? ;创建一个全局变量sum1,无初始化
;问号(?)初始化值使得变量未被初始化,这意味着在运行时才会为该变量分配一个值
;变量名其实是一个标号,标识了从该变量从所在段的开始到该变量的偏移量
list BYTE 10,20,30,40
BYTE 50,60,70,80
BYTE 81,82,83,84
;如果同一个数据定义中使用了多个初始化值,则它的标号只指出第一个初始化值的偏移量
;假设list的偏移量为0000,那么数值10的偏移量就为0000,20的偏移量为0001,30的偏移量为0002,40的偏移量为0003
;不是所有的数据定义都需要标号。比如, 要在list字节数组后面继续扩展,就可以在下一行定义后加的字节:
;BYTE 50, 60, 70, 80 BYTE 81, 82, 83, 84
ExitProcess PROTO,dwExitCode:DWORD
.code
main PROC
mov eax,5
mov sum,eax
INVOKE ExitProcess,0
main ENDP
END main
定义DWORD和SDWORD数据
.data
val1 DWORD 12345678h ;无符号数
val2 SDWORD -2147483648 ;有符号数
val3 DWORD 20 DUP(?) ;无符号数组
val4 DD 12345678h ;无符号数
val5 DD -2147483648 ;有符号数
pVal DWORD val3
;DWORD还可用于声明一种变量, 这种变量包含的是另一个变量的32位偏移量。如上所示, pval包含的就是val3的偏移量
myList DWORD 1, 2, 3, 4, 5 ;定义数组,偏移量的增量为4