定义内部数据类型
类型
BYTE,SBYTE,WORD,SWORD,DWORD,SDWORD,
FWORD(48位整数,保护模式下用作远指针)
QWORD(64位整数,8字节), TBYTE(80位整数,10字节)
REAL4(32位,IEEE短实数),REAL8,REAL10
举例: val5 DWORD 12345678h
数据定义语句要指定至少一个初始值,多个初始值以逗号隔开.若不想初始化,可以用符号"?"作为初始值.
定义数组:
array1 BYTE 10, 20, 30, 40
BYTE 50, 60, 70, 80 ;可定义多行
array2 BYTE 10, 32, 41h, 00100010b ;不同基数可混用
array3 BYTE 0Ah, 20h, 'A', 22h ;不同基数,字符,字符串可混用
定义字符串
greeting1 BYTE "Good afternoon", 0 ;可以空字符结尾
greeting2 BYTE "this is the first" ;可定义多行
BYTE "string i created.", 0dh, 0ah, ;换行符/r/n --> 0dh, 0ah
BYTE "ok, end.", 0 ; 结束
DUP操作符.
未多个数据项分配空间
array1 BYTE 20 DUP(0) ; 20字节, 全部等于0
array2 BYTE 20 DUP(?) ; 20字节, 未初始化
array4 BYTE 3 DUP("stack") ; 15字节, "stackstackstack"
小尾和大尾顺序(little endian, big endian)
小尾:最低有效字节存储在地址值最小的地址单元.
12345678h的存储: 0000: 78, 0001: 56, 0002: 34, 0001: 12
未初始化数据的声明
".DATA?"伪指令用于声明未初始化数据.定义大块数据时非常有用.减小编译体积.
.data?
bigArray DOWRD 5000 DUP(?) ; 20000字节.未初始化.
编译前计算数组和字符串大小: '$', 当前地址值,byte单位
list BYTE 10, 20, 30, 40
listSize = ($ - list)
EQU伪指令,
用于编译阶段定义.equ不可重复定义.
PI EQU <3.1415926>
printMe EQU <"my name is fei">
val1 EQU <100h + 200h>
val2 WORD val1
TEXTEQU文本宏伪指令
count TEXTEQU 5
move TEXTEQU <mov>
setAL TEXTEQU <move, al, count>
setAL将被汇编成:mov, al, 5