当前位置: 代码迷 >> 汇编语言 >> STACKS SEGMENT STACK只是为了避免链接警告?该如何解决
  详细解决方案

STACKS SEGMENT STACK只是为了避免链接警告?该如何解决

热度:9712   发布时间:2013-02-26 00:00:00.0
STACKS SEGMENT STACK只是为了避免链接警告?
Assembly code
STACKS SEGMENT STACKDW 128 DUP(?)STACKS ENDSDATAS SEGMENTstring DB 'Welcome!', 0DH, 0AH, '$'DATAS ENDSCODES SEGMENTASSUME CS: CODES, DS: DATASSTART:MOV AX, DATASMOV DS, AXLEA DX, stringMOV AH, 09HINT 21HMOV AH, 4CHINT 21HCODES ENDSEND START


接触汇编这么久了,从未见过STACKS SEGMENT里面干过什么?谁能解释下为什么吗?


------解决方案--------------------------------------------------------
我也只知道这和连接器实现有关。
------解决方案--------------------------------------------------------
这个定义堆栈段的,堆栈段的作用不用说了吧。或者会有即便不定义这个堆栈段,除了链接时有个警告信息外,程序好像也能正常运行的疑问,这是因为你的程序比较小(通常多的也就几个 KB,远小于 64KB),内存操作上也没有额外的要求(程序占用内存的释放、可用内存空间的申请和读写),缺省设置的堆栈区间(程序 PSP 开始的 64KB 的末端)能够满足要求的缘故。
------解决方案--------------------------------------------------------
你使用栈的话就要这个东西了
------解决方案--------------------------------------------------------
压是时候不会出现栈不够用,是因为 dos 下没有内存访问保护机制,即使 push 越出了实际的栈范围,也不一定会立即表现出来。但是,如果你 push 得足够的多,根据你堆栈段定义的位置,总会破坏掉 psp 或其前面的数据或代码段的内容,程序就可能出现异常或失控。
  相关解决方案