[关闭]
@2017libin 2019-05-14T03:06:54.000000Z 字数 693 阅读 74

《汇编》段的定义格式

汇编


前段时间,有个同学问我为什么我已经定义了堆栈段:

  1. stack1 segment
  2. ;堆栈段定义
  3. stack1 ends

但是在link的时候还是会出现警告:no stack segment!。但是将代码改成:

  1. stack1 segment stack
  2. ;堆栈段定义
  3. stack1 ends

这样一来,link的话就不会出现no stack segment!的警告了。在后面添加stack到底有什么作用呢?于是上网查了一下资料,在这里做一下总结:
segment定义格式如下:

  1. name SEGMENT [[READONLY]] [[align]] [[combine]] [[use]] [[characteristics]] ALIAS(string) [['class']]
  2. statements
  3. name ENDS

这是我在Micosoft文档里面参考的segment的定义。
下面来看一下后面几个重要的可选项的具体意义:

选项 意义
align 段的物理地址的起始位置,默认为para(段地址为16的倍数)
combine 定义在link时,怎么连接相同段名的段
class 定义段的类别,会影响link时的段的位置

我们再回头来看一下这段代码:

  1. stack1 segment stack
  2. ;堆栈段定义
  3. stack1 ends
  1. 使用默认align类型para:段的起始地址(物理地址)为16的倍数。
  2. combine类型stack:当前段为数据段。
  3. class类型缺省:该段类别为空。
    学习汇编语言,或者对更多segment定义的了解,参考前辈文章:http://www.iteedu.com/plang/asm/asmhbyychxshj/1-1-1.php
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注