Masm5以后推出的simplified segment模式及.model标准模型中,都将段组合成一个group,group的作用及优点是什么呢?
一、Group的作用:
将组(group)后的所有段加入一个组,位于这些段内的的label(标号)或variables(变量)的偏移地址都参照Group的起始地址进行计算,而不是所在段的起始地址进行计算,代码举例如下:
assume cs:codesg,ss:stacksg,ds:datasg1,es:datasg2
;-------------------------------------------
stacksg segment stackdb 100 dup (0)
stacksg ends
;-------------------------------------------
datasg1 segment var1 db 6
datasg1 ends
;-------------------------------------------
datasg2 segment var2 db 9
datasg2 ends
;-------------------------------------------
codesg segmentstart:
;-------------------------------------------mov al,var1mov al,var2
;-------------------------------------------mov ax,4c00hint 21h
codesg ends
end start
如果不定义段,则var1和var2的偏移地址都是0000,编译后代码如下:
如将datasg1和datasg2编入组:
mygroup group datasg1,datasg2
assume cs:codesg,ss:stacksg,ds:mygroup
则编译后代码如下:
可见,编入组后var1和var2都参照mygroup的起始地址计算偏移地址,但前提是assume ds:mygroup,即将段地址和组地址进行关联。
这样做