MASM6.11中指针变量初始化
在MASM6.11中,我们可以用数据定义语句(DB/DW/DD/DF/DQ/DT)来定义并/或初始化变量,如:
VAR1 DB 0ABH
指针变量就是存放其他变量地址(指针)的变量。定义指针变量和定义普通变量一致(实际上,根本没有指针变量一说,
只是我根据它的功能"杜撰"的:)),只是是使用其他变量或标号来初始化。如下:
VAR1 DB 0ABH
P1 DW VAR1
P2 DD START
MASM6.11根据指针变量所在的定义段是USE16还是USE32(注意:不是初始化变量/标号所在的段),以及指针变量定义的大小不同而初始化不同的值。如指针定义如下:
P DW/DD/DF/DQ/DT VAR1
MASM6.11根据不同情况为指针变量准备的初始值如下:
P 所在段(不是 VAR1 所在段) USE16 USE32
DW VAR1 的 OFFSET VAR1 的 OFFSET
DD VAR1 的 SEG:OFFSET VAR1 的 OFFSET
DF VAR1 的 SEG:OFFSET VAR1 的 SEG:OFFSET
DQ VAR1 的 SEG:OFFSET VAR1 的 OFFSET
DT VAR1 的 SEG:OFFSET VAR1 的 OFFSET
一个特殊的标号——'$',表示当前偏移。它和上面说的变量和标号一样可以为指针变量初始化。下面举例:
DATA SEGMENT USEX
DB 0CCH
VAR1 DT $
DB 0CCH
VAR2 DQ $
DB 0CCH
VAR3 DF $
DB 0CCH
VAR4 DD $
DB 0CCH
VAR5 DW $
DATA ENDS
MASM6.11编译后,初始化后段的内容如下:
USE16
CC
01 00 F9 10 00 00 00 00 00 00
CC
0C 00 F9 10 00 00 00 00
CC
15 00 F9 10 00 00
CC
1C 00 F9 10
CC
21 00
CC
USE32
CC
01 00 00 00 00 00 00 00 00 00
CC
0C 00 00 00 00 00 00 00
CC
15 00 F9 10 00 00
CC
1C 00 00 00
CC
21 00
CC