包含多个段的程序中,段位置不一样时段的大小

debugk 2008-08-19 06:58:13
一般我们认为,下面的段
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填充。


请知道的高手们帮忙指点下,谢谢了!
...全文
72 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Michael_g 2008-08-19
  • 打赏
  • 举报
回复
区别在于 code edns 这句话出现的位置 ,第一段代码,实际上是代码段包含了 数据数和堆堆段

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧