鱼C论坛

 找回密码
 立即注册
查看: 3919|回复: 12

6.2例题的在Debug中调试不是想要的结果麻烦老师解答下

[复制链接]
发表于 2011-3-1 14:24:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 66642319 于 2011-3-1 15:09 编辑

assume cs:abc  
abc segment

         dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h    ;申请一段程序前的地址来存放数据
      dw 0,0,0,0,0,0,0,0                                    ;申请一段程序前的地址来为栈
                 
start:   mov ax,abc           ;将CS的段地址传给AX寄存器
        mov ss,ax            ;在将AX的值传给SS栈段寄存器
        mov sp,20H           ;设置SP也就是栈空间的大小,栈为空时,栈顶指向栈空间的下一内存单元
        mov cx,8             ;循环次数
        mov bx,0             ;将内存偏移地址传给偏移地址寄存器
    s:   push cs:[bx]         ;将CS:bx的值入栈
        add bx,2             ;存放的数据为字型数据,占用2个内存单元16个字节所以偏移地址加2
            loop s                 ;开始循环
      
        mov cx,8
            mov bx,0
      s0: pop cs:[bx]
            add bx,2
            loop s0
               
                 
mov ax,4c00H
int 21H


abc ends             ;ABC段结束

end start            ;程序结束
这是6.2例题的源代码!也就是老师视频里的P118.ASM的源码
编译后,在DEBUG中调试后出现问题,麻烦老师帮忙看看,
1.png
debug加载后 CS指向13d2   源代码是在CS:IP的前面定义的也是就把13D2:0到F存放着 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
BX的值是0008的时候都正常向SS:SP栈中压入了 过了这次循环后,13D2:C D E F 中的值不知道哪里跑来其他几个不相关的数值,导致后面的结果不是
像要的结果,试了很久找不出出错的原因,麻烦老师解答下好吗
看了下书把栈段定义为:DW  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0   16个字节单元,问题得到解决了
但是老师还是来解答下为什么栈段中多了一些不数据是什么
3.png
2.png
栈中从13D2:16到1F中那段数据是什么东西,谢谢老师
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-1 17:51:36 | 显示全部楼层
本帖最后由 ckzmo 于 2011-3-1 22:14 编辑

这道题我也有个问题   为什么DEBUG不显示 0cbah,0987h
assume cs:code
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
dw 0,0,0,0,0,0,0,0
data ends

code segment
  start:mov ax,data
        mov ds,ax
                mov ss,ax
                mov sp,20h
                mov bx,0
               
                mov cx,8
          s:push ds:[bx]
        add bx,2
        loop s

        mov bx,0
        mov cx,8
      s1:pop ds:[bx]
             add bx,2
        loop s1
      
        mov ax,4c00h
        int 21h
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-3-1 18:22:00 | 显示全部楼层
本帖最后由 66642319 于 2011-3-1 18:26 编辑

回复 2# ckzmo


    栈顶指错地址了,DS段就占用F个内存单元,你申请的SS,是从10到1F开始,所有栈为空的时候应该是1F+1,你换了在试下

还有assume 这里没有假想你的data为什么段
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-1 22:06:52 | 显示全部楼层
本帖最后由 china0008 于 2011-3-1 22:27 编辑

题目要求是把 上面8个字单元 用 栈 逆序排放 是吗?

我试验了你的源码,没有问题啊。  能正确的到结果。
assume cs:abc  
abc segment

    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h    
   dw 0,0,0,0,0,0,0,0                                  

start:   
        mov ax,abc           ;将CS的段地址传给AX寄存器
    mov ss,ax            ;在将AX的值传给SS栈段寄存器
        mov sp,20H           ;设置SP也就是栈空间的大小,栈为空时,栈顶指向栈空间的下一内存单元
    mov cx,8             ;循环次数
    mov bx,0             ;将内存偏移地址传给偏移地址寄存器
s:  
        push cs:[bx]         ;将CS:bx的值入栈
    add bx,2             ;存放的数据为字型数据,占用2个内存单元16个字节所以偏移地址加2
    loop s                 ;开始循环
      
    mov cx,8
    mov bx,0
s0: 
        pop cs:[bx]
    add bx,2
    loop s0
                
        mov ax,4c00H
        int 21H

abc ends             ;ABC段结束
end start            ;程序结束
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-1 22:16:32 | 显示全部楼层


我改了sp,20h对了

怎么不显示0cbah,0987h
55.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-1 22:17:54 | 显示全部楼层
题目要求是把 上面8个字单元 用 栈 逆序排放 是吗?
china0008 发表于 2011-3-1 22:06



    是的 我怎么调试不显示0cbah,0987h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-3-1 23:06:00 | 显示全部楼层
回复 6# ckzmo


    我也是不显示最后4个内存单元,DW0那里设置多几个,把20的空间设置大点,这个问题就能解决,我的问题是,栈空间中,始终有几个不知道是那里的来的数据,栈这 C D E F 4个内存单元,就是你最后面出现那2个其他的数据,我也是这样,求解释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-3-1 23:13:43 | 显示全部楼层
回复 4# china0008


      版主麻烦你仔细看看,我上传的最后一张图片,如果栈的空间设置为10到1F话的,就会最后2个的数据被别的数据覆盖,栈空间设置10到2F的话,其中有几个数据不知道是那里跑来的,就是那几个数据有问题,如果栈空间为10到1F,最后一张图片中,其中不是我们入栈的数据的数据就会覆盖1c 1d 1e 1f这4个内存,导致出现错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-1 23:16:05 | 显示全部楼层
可是我复制了你的源码调试了。结果正常啊。你是在什么环境下调试的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-1 23:22:54 | 显示全部楼层
回复  ckzmo


    我也是不显示最后4个内存单元,DW0那里设置多几个,把20的空间设置大点,这个问题就 ...
66642319 发表于 2011-3-1 23:06





   现在可以了
66.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-3-2 00:02:22 | 显示全部楼层
回复 9# china0008


    就在DEBUG里,XP系统下

另外一个同学也是和我的一样的问题,他按着我的步骤一步一步解决,不知道到他单步调试过没有,然后观察过栈段的数据没有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-7 01:01:20 | 显示全部楼层
本帖最后由 超越自我 于 2011-3-7 01:08 编辑

我的问题好像也是类似的,但是最终的结果是对的,只是过程中有些疑问:栈段之前数值明明初始化为0了,在数据入栈的过程中,其它几个还未送入数据的栈段内存单元的数值都变了,为什么不是原来初始的零呢?
还有就是栈段内的数据出栈后,按道理说栈段内存单元里还是有数据,只是栈顶位置改变而已,这些数据和前面的16个字节刚好是逆序的,为什么也变成了一些乱的数值呢??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-9 11:27:52 | 显示全部楼层
p62.jpg

结果是对的,但栈里的数据应该是存在的,但被莫名的数据给覆盖了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-19 09:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表