点赞英语:包含多个段的程序中,段位置不一样时段的大小

来源:百度文库 编辑:中财网 时间:2024/05/03 10:50:50
一般我们认为,下面的段
a segment
........
a ends
如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为:如果N为16的倍数,则实际占有的空间为N;如果016且不是16的倍数,

实际占有的空间为(N/16的商)×16+16
assume cs:code,ds:data,ss:stack

code segment

  start:
  mov ax,stack
  mov ss,ax
  mov sp,16
  mov ax,data
  mov ds,ax
  push ds:[0]
  push ds:[2]
  pop ds:[2]
  pop ds:[0]
   
  mov ax,4c00H
  int 21H
   
  data segment
  dw 0123H,0456H
  data ends
  
  stack segment
  dw 1234H,5678H
  stack ends
   
code ends
end start

加载后发现stack段的数据为23 01 78 56,接下来的12个字节理论上应该是0,实际上不是。这是为什么

assume cs:code,ds:data,ss:stack
   
  data segment
  dw 0123H,0456H
  data ends
  
  stack segment
  dw 1234H,5678H
  stack ends

code segment
 
  start:
  mov ax,stack
  mov ss,ax
  mov sp,16
  mov ax,data
  mov ds,ax
  push ds:[0]
  push ds:[2]
  pop ds:[2]
  pop ds:[0]
   
  mov ax,4c00H
  int 21H

   
code ends
end start
当把数据放在code段前时,debug表面stack段和data段都占用了16字节的空间,不足的地方用0填充。