第3节 伪指令
推荐给好友
打印
加入收藏
更新于2009-06-01 10:53:30


段定义伪指令(SEGMENT/ENDS)


1.段名
该段名字,用来指出汇编程序为该段分配的存储区起始位置。

2.定位类型(指定该段起始地址边界值的类型)
(1)BYTE:表示本段起始地址可以从任一地址处开始存放。
(2)WORD:表示本段要从一个偶数地址处开始存放,即段起始地址的最低一位必须是0。
(3)DWORD:表示本段要从双字边界处开始存放,即段起始地址的最低二位必须是0。
(4)PARA:表示本段必须从能被16整除的地址处开始存放,即段起始地址最低四位必须是0。
(5) PAGE:表示本段要从能被256整除的地址处开始存放,即起始地址的最低八位必须是0。

3.组合类型(用来告诉连接程序link.exe,本段与其它模块中同名段的组合连接关系)
有六种类型可供选择。
(1)“不选择”
(2)PUBLIC:连接时,把与该段名相同的段连接在一起。
(3)STACK:指定该段为堆栈段的一部分
(4)COMMON:指定该段与其它同名的段有相同的段起始地址。
(5)MEMORY:指定该段将分配在所有其它段的前面(高地址)。
(6)PRIVATE: 该段为独立段,不与其它同名段合并。
(7)AT 表达式:用于指定由表达式值所确定的段所在的起始地址。不能用于代码段

4.字长类型(用于386以上,用来说明使用16位寻址方式或32位寻址方式)
(1)USE16:使用16位寻址方式。
(2)USE32:使用32位寻址方式。

5.类别(连接时,连接程序会把类别相同的所有段放在连续的内存区域中)
‘DATA’ :段类别是数据段。
‘CODE’ :段类别是代码段。
‘STACK’ :段类别是堆栈段。
‘EXTRA’ :段类别是附加数据段。

对连接程序进行连接后存储区各段相对位置分布。
DATA1          SEGMENT ‘DATA’
CODE           SEGMENT ‘CODE’
STACK1       SEGMENT ‘STACK’
DATA2          SEGMENT ‘DATA’
STACK2       SEGMENT ‘STACK’
经连接程序连接后,各段的相对位置如下:
DATA1          SEGMENT ‘DATA’
DATA2          SEGMENT ‘DATA’
STACK1       SEGMENT ‘STACK’
STACK2       SEGMENT ‘STACK’
CODE           SEGMENT ‘CODE’

【例】有两个模块,各模块段定义如下:




模块1、模块2连接后段的定位组合方式示意图


假定伪指令 (ASSUME) --段分配伪指令
ASSUME 段寄存器:段名,段寄存器:段名,…
功能:建立段寄存器与段之间的对应关系。该伪指令一般出现在代码段中。
ASSUME CS:CODE, DS:DATA1, ES:DATA3, SS:DATA2


段组定义伪指令 (GROUP)
段组名 GROUP 段名,段名,…
功能:将GROUP后段名所指定的段分配在同一个物理存储器段中,分给该段一个段组名。


地址计数器伪指令 (ORG,EVEN,ALIGN)
地址计数器(偏移计数器)

  • $ :本指令地址
  • ORG 表达式
    --设置地址计数器
  • EVEN
    --使下一变量或指令开始于偶数地址。
  • ALIGN n
    --使下一变量或指令开始于n的整数倍地址。 N=2,4,8,16,…

数据定义伪指令 (DB,DW,DD,DF,DQ,DT)

  • 常数、表达式

  • 字符串

  • n DUP(  )
    ORG 300H
    DATA1 DB 2 DUP(12H,34H,56H)

过程定义伪指令(PROC/ENDP)


用CALL 过程名调用此过程

模块连接伪指令(PUBLIC,EXTRN)


符号可以是:常量、变量、标号、过程名。

 

上一节                    下一节

相关链接


 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.