汇编器识别一组基本的内部数据类型(intrinsic data type),按照数据大小(字节、字、双字等等)、是否有符号、是整数还是实数来描述其类型。这些类型有相当程度的重叠,例如,DWORD 类型(32 位,无符号整数)就可以和 SDWORD 类型(32 位,有符号整数)相互交换。
可能有人会说,程序员用 SDWORD 告诉读程序的人,这个值是有符号的,但是,对于汇编器来说这不是强制性的。汇编器只评估操作数的大小。因此,举例来说,程序员只能将 32 位整数指定为 DWORD、SDWORD 或者 REAL4 类型。
下表给出了全部内部数据类型的列表,有些表项中的 IEEE 符号指的是 IEEE 计算机学会出版的标准实数格式。
类型
用法
BYTE
8 位无符号整数,B 代表字节
SBYTE
8 位有符号整数,S 代表有符号
WORD
16 位无符号整数
SWORD
16 位有符号整数
DWORD
32 位无符号整数,D 代表双(字)
SDWORD
32 位有符号整数,SD 代表有符号双(字)
FWORD
48 位整数(保护模式中的远指针)
QWORD
64 位整数,Q 代表四(字)
TBYTE
80 位(10 字节)整数,T 代表 10 字节
REAL4
32 位(4 字节)IEEE 短实数
REAL8
64 位(8 字节)IEEE 长实数
REAL10
80 位(10 字节)IEEE 扩展实数
数据定义语句
数据定义语句(data definition statement)在内存中为变量留岀存储空间,并赋予一个可选的名字。数据定义语句根据内部数据类型(上表)定义变量。
数据定义语法如下所示:
[name] directive initializer [,initializer]...
下面是数据定义语句的一个例子:
count DWORD 12345
其中:
名字:分配给变量的可选名字必须遵守标识符规范。
伪指令:数据定义语句中的伪指令可以是 BYTE、WORD、DWORD、SBTYE、SWORD 或其他在上表中列出的类型。此外,它还可以是传统数据定义伪指令,如下表所示。
伪指令
用法
伪指令
用法
DB
8位整数
DQ
64 位整数或实数
DW
16 位整数
DT
定义 80 位(10 字节)整数
DD
32 位整数或实数
数据定义中至少要有一个初始值,即使该值为 0。其他初始值,如果有的话,用逗号分隔。对整数数据类型而言,初始值(initializer)是整数常量或是与变量类型,如 BYTE 或 WORD 相匹配的整数表达式。
如果程序员希望不对变量进行初始化(随机分配数值),可以用符号 ? 作为初始值。所有初始值,不论其格式,都由汇编器转换为二进制数据。 初始值 0011 0010b、32h 和 50d 都具有相同的二进制数值。
向 AddTwo 程序添加一个变量
前面《整数加减法》一节中介绍了 AddTwo 程序,现在创建它的一个新版本,并称为 AddTwoSum。这个版本引入了变量 sum,它出现在完整的程序清单中:
;AddTowSum.asm
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO, dwExitCode:DWORD
.data
sum DWORD 0
.cod