STACKS SEGMENT STACK只是为了避免链接警告?该如何解决
STACKS SEGMENT STACK只是为了避免链接警告?
接触汇编这么久了,从未见过STACKS SEGMENT里面干过什么?谁能解释下为什么吗?
------解决方案--------------------
我也只知道这和连接器实现有关。
------解决方案--------------------
这个定义堆栈段的,堆栈段的作用不用说了吧。或者会有即便不定义这个堆栈段,除了链接时有个警告信息外,程序好像也能正常运行的疑问,这是因为你的程序比较小(通常多的也就几个 KB,远小于 64KB),内存操作上也没有额外的要求(程序占用内存的释放、可用内存空间的申请和读写),缺省设置的堆栈区间(程序 PSP 开始的 64KB 的末端)能够满足要求的缘故。
------解决方案--------------------
你使用栈的话就要这个东西了
------解决方案--------------------
压是时候不会出现栈不够用,是因为 dos 下没有内存访问保护机制,即使 push 越出了实际的栈范围,也不一定会立即表现出来。但是,如果你 push 得足够的多,根据你堆栈段定义的位置,总会破坏掉 psp 或其前面的数据或代码段的内容,程序就可能出现异常或失控。
- Assembly code
STACKS SEGMENT STACK DW 128 DUP(?) STACKS ENDS DATAS SEGMENT string DB 'Welcome!', 0DH, 0AH, '$' DATAS ENDS CODES SEGMENT ASSUME CS: CODES, DS: DATAS START:MOV AX, DATAS MOV DS, AX LEA DX, string MOV AH, 09H INT 21H MOV AH, 4CH INT 21H CODES ENDS END START
接触汇编这么久了,从未见过STACKS SEGMENT里面干过什么?谁能解释下为什么吗?
------解决方案--------------------
我也只知道这和连接器实现有关。
------解决方案--------------------
这个定义堆栈段的,堆栈段的作用不用说了吧。或者会有即便不定义这个堆栈段,除了链接时有个警告信息外,程序好像也能正常运行的疑问,这是因为你的程序比较小(通常多的也就几个 KB,远小于 64KB),内存操作上也没有额外的要求(程序占用内存的释放、可用内存空间的申请和读写),缺省设置的堆栈区间(程序 PSP 开始的 64KB 的末端)能够满足要求的缘故。
------解决方案--------------------
你使用栈的话就要这个东西了
------解决方案--------------------
压是时候不会出现栈不够用,是因为 dos 下没有内存访问保护机制,即使 push 越出了实际的栈范围,也不一定会立即表现出来。但是,如果你 push 得足够的多,根据你堆栈段定义的位置,总会破坏掉 psp 或其前面的数据或代码段的内容,程序就可能出现异常或失控。