关于栈、psp问题求助
assume cs:code ,ds:data ,ss:stackdata segment
dw0123h ,0456h ,0789h ,0abch ,0defh ,0fedh ,0cbah ,0987h
data ends
stack segment
dw0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 1。 为什么程序加载完后(执行到mov sp ,14h),ds段的 前20个字节不全是0?
stack ends
2.不是说程序的物理地址是SA+10H:0吗?也就是说CS==SA+10H,而SA==DS,那么用debug的R命令查看时,为什么CS不等于DS+10H,而是等于DS+12H,倒是SS==DS+10H?
code segment
start: mov ax ,stack
mov ss ,ax
mov sp ,14h
mov ax ,data
mov ds ,ax
mov bx ,0
mov cx ,8
s:push
add bx ,2
loop s
mov bx ,0
mov cx ,8
s0: pop
add bx ,2
loop s0
mov ax ,4c00H
int 21H
code ends
end start
以我的为例 ds 075a,程序从076a 开始符合你 ds+10h的逻辑
076a:0 到后面16个字节存放的是你的data段数据
076a:10 到后面32个字节你已经设为栈段
所以程序从076d 开始
至于你的第一个问题。 由于个人内存使用情况不同是会出现不同现象。 我的就是都为0.
1、晕哦,你的ds是13FF,再说写的stack segment堆栈段没啥意思吧,push一下会更简单。
2、物理地址=段地址×10H+偏移地址。 oggplay 发表于 2014-5-18 19:14 static/image/common/back.gif
1、晕哦,你的ds是13FF,再说写的stack segment堆栈段没啥意思吧,push一下会更简单。
2、物理地址=段地址 ...
答非所问,物理地址=段地址X10H+偏移地址,我岂会不知? 传说。 发表于 2014-5-18 19:07 static/image/common/back.gif
以我的为例 ds 075a,程序从076a 开始符合你 ds+10h的逻辑
076a:0 到后面16个字节存放的是你的data段 ...
没道理啊,我不是把栈初始化为0了吗? 恩恩!支持楼上的回答!由于内存使用情况的不同!内存中的数据是不一样的,至于另一个问题,我和传说。的观点是一样的。{:2_27:} 风神翼龙 发表于 2014-5-18 22:08 static/image/common/back.gif
没道理啊,我不是把栈初始化为0了吗?
如果你你电脑中已经有程序用到了那一段内存你的操作没有用的。看起来改了而已。就像有的内存空间是只读的一样。你根本改不了。 嗯和传说观点一模一样:loveliness: 回顾一下:titter: 楼主为什么是 sp指向14h不应该是23h吗 ↘_vIp`|家族_流 发表于 2014-7-10 19:39
楼主为什么是 sp指向14h不应该是23h吗
dw0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,栈空间为20个字节,偏移地址是0~13h,栈指针起初是要指向栈底的下一个单元的,即14h。指向23h不久严重越界了吗? {:1_1:} {:1_1:}
页:
[1]