| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 360 人关注过本帖
标题:【求助】为什么debug加载到内存跟踪时cs值改变
只看楼主 加入收藏
badending
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-6-20
结帖率:0
收藏
已结贴  问题点数:0 回复次数:1 
【求助】为什么debug加载到内存跟踪时cs值改变
本人刚学汇编,有些不理解
程序如下,是将a段中的前8个字型数据逆序存储到b段中
程序代码:
assume cs:code
a segment
  dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends
b segment
  dw 0,0,0,0,0,0,0,0
b ends
code segment
start: mov ax,a
       mov ds,ax
       mov ax,b
       mov ss,ax
       mov sp,10h
       mov bx,0
       mov cx,8
    s: push [bx]
       add bx,2
       loop s
       mov ax,4c00h
       int 21h
code ends
end start
然后用debug跟踪发现循环在进行到第六次时,cs值改变
如下:
本来第六个执行了push [bx]后显示:

AX=1813  BX=000A  CX=0003  DX=0000  SP=0004  BP=0000  SI=0000  DI=0000
DS=1813  ES=1803   SS=1815   CS=1816  IP=0015   NV UP EI PL NZ NA PE NC
1816:0015  83C302       ADD      BX,+02

当t执行下一步时 变成了:

AX=1813  BX=0000  CX=0003  DX=0000  SP=0004  BP=0000  SI=0000  DI=0000
DS=1813  ES=1803   SS=1815   CS=0038  IP=0019   NV UP EI PL ZR NA PE NC
0038:0019  26           ES:
0038:001A  AE          SCASB

这是为什么?运行了几次都这样 不懂 希望有人指点我,谢谢!

2011-06-20 21:04
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
收藏
得分:20 
堆栈不够,在 sp 指针头部,连着有一连串信息,当出现
mov ss,ax
mov sp,10h
就赋值好了,你可以在 debug 中查看,可以看到当前 cs 的值,和 sp 的值在堆栈中(还有 ax 中的值),随着 push 而后移,但是 sp 的值不能被覆盖掉,不然 push 就找不到堆栈了,你扩大 b segment 的容量,并让 sp == 20h (sp == 10h 还是会在第六次 push 覆盖掉 sp),这样就行

……不过为什么会这样我不知道,上述是现象,解释是我所设想的
2011-06-20 23:32
快速回复:【求助】为什么debug加载到内存跟踪时cs值改变
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016006 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved