包含多个段的程序中,段位置不一样时段的大小
一般我们认为,下面的段
a segment
........
a ends
如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为:如果N为16的倍数,则实际占有的空间为N;如果0<N<16,则实际占有的空间为16;如果N>16且不是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填充。
请知道的高手们帮忙指点下,谢谢了!