MASM标志符(Specifiers)的类型和作用
16位的MASM汇编中,标识符(Specifiers)的作用很广。什么是标识符,就是需要我们自己命名的标识,如变量名、段名等。标识符的核心作用就是用容易记忆或书写的名称,代表一个不容易记忆或书写的数据和代码。就想用汇编指令代表机器代码一样,本质无区别。
一、标识符的主要应用到以下方面:
1、代表地址
表示代码的地址,用near或far修饰远近(是否跨段),也都可以通过ptr转换。
2、代表变量
表示数据和结构(variable、struct、record等),用byte、word等表示数据宽度,也都可以通过ptr转换。
3、代表常量
如equ或=等常量定义。
二、地址的使用
如label:标号、proc的定义等。
注意:如果跨段访问数据是通过段前缀来完成,如es:var1;如果跨段访问代码通过far ptr来完成,如jmp far ptr mylabel。
三、变量的使用
变量可分为:代表整数地址、代表字符地址、代表浮点数地址和代表变量地址值(variable pointer)四种用法
1、数值变量的类型(根据变量的空间长度划分):
Byte(1 Byte)、Word(2 Bytes)、DWord(4 Bytes)、FWord(6 Bytes)、QWord(8 Bytes)、TByte(10 Bytes)
2、变量的定义
定义变量的语法:[name] directive initializer[,initializer]...
directive有以下6种
DB(Define byte)
DW(Define word)
DD(Define doubleword)
DF(Define farword)
DQ(Define quadword)
DT(Define 10-byte)
3、整型的定义
DW、DD、DQ可以定义整型,DF一般定义浮点型,DT定义BCD型。
DD表示整数的内存模型:
DD的内存模型:
DQ的内存模型:
4、BCD型的定义
unpacked BCD:DB 1,5,8,2;表示2851;packed BCD:DT 9252851;表示9252851
5、字符串的定义
比如:DB 97,98或DB 'a','b'或DB "abc"
注意:DW、DD、DQ、DT后的字符串都不能超过两个字符,如:DT "abc"是不允许的,即使空间可以容下,且这两个字符位于最低字节。
6、浮点数的定义(Real-Number):
浮点数有IEEE和Microsoft Binary两种标准,默认是IEEE:
DD(32-bit)、DQ(64-bit)和DT(80-bit,只80386后支持)三种浮点数,比如:dd 98.6或DQ 5.391E-4
IEEE标准下的内存模型:
7、数组(array)的定义
count dup (initialvalue[,initialvalue])
比如:
array DD 10 dup(1)
buffer db 256 dup(?)
masks db 20 dup(040h,020h,04h,02h)
db 32 dup("Hello,world")
tree_d DD 5 dup(5 dup(0))
8、代表变量的地址-指针变量(pointer variable)
1)指针的类型:Far和Near
2)指针的定义:
定义的语法与变量一致,DW代表Near pointer,DD代表Far pointer,80386之后的平坦寻址模式又不相同,内存模型如下:
举例如下:
np dw string;指向string的近指针
fp dd string;指向string的远指针
四、常量的使用
greed equ "hello,world!"
pei = 3.14