鱼C论坛

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

关于栈的问题

[复制链接]
发表于 2019-4-29 17:03:12 | 显示全部楼层
本帖最后由 jackz007 于 2019-4-29 17:13 编辑

       这些数值应该是在执行
  1. mov ss,ax
复制代码

       之前就已经存在于程序的代码之中了,实际上应该就是编程者所设计的堆栈段初始化值序列,只是执行这条语句之前,并没有把这些数据归入堆栈段而已。
       为了证明这一点,可以这么做,在执行这条语句之前,记下 ax 的数值,例如:45f,那么,你可以用命令 d 45f:0 来查看这些内存,应该和执行完这条语句所看到的堆栈内容是一样的。
       需要强调的是,由于堆栈会在各种函数以及系统中断调用过程中承担参数传递及保护现场的任务,所以,任何时刻,只有从 sp 到栈顶之间的存储内容是受保护和有效的,sp 以下的堆栈段存储的内容是不靠谱的,这是正常的,有可能是之前函数或中断调用后遗留的无效数据。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-29 23:26:03 | 显示全部楼层
      你有源代码吗?把它贴出来看看。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-30 23:17:19 | 显示全部楼层
    难道你没有把代码敲进电脑?把它贴出来,不用贴图。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-1 11:26:07 | 显示全部楼层
本帖最后由 jackz007 于 2019-5-1 11:38 编辑

    你的代码编译不通,我把它改好了
  1. stack segment stack
  2.     dw 8 dup(0)
  3. stack ends
  4. data segment
  5.     db '1. display      '
  6.     db '2. brows        '
  7.     db '3. replace      '
  8.     db '4. modify       '
  9. data ends
  10.     assume cs:code , ds:data , ss:stack
  11. code segment
  12. start: mov ax,data
  13.        mov ds,ax
  14.        mov bx,0
  15.        mov cx,4
  16.    s1: push cx
  17.        mov di,0
  18.        mov cx,4
  19.    s2: mov al,byte ptr ds:[3+di+bx]
  20.        and al,11011111b
  21.        mov byte ptr ds:[3+di+bx],al
  22.        inc di
  23.        loop s2
  24.        add bx,10h
  25.        pop cx
  26.        loop s1

  27.        mov ax,4c00h
  28.        int 21h
  29. code ends
  30. end start
复制代码

        这才是程序入口的原始堆栈,可以看到,16 个字节全是 00。
x.exe.png
        关注一下我对堆栈段定义方式的改变,因为这个改变,把你 start:代码开始处所有与堆栈相关的寄存器赋值,就是下面的 3 条语句,全部省略了,通过上面的截图可以证明,这些寄存器的值都是正确的。
  1.       mov ax,stack
  2.       mov ss,ax
  3.       mov sp,16
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-2 11:49:47 From FishC Mobile | 显示全部楼层
    那就说明是在使用 t 命令跟踪程序的时候,debug.exe使用了堆栈,你看到的是事后留下的痕迹。我前面说过,只有从当前 sp 到栈顶之间的数据属于堆栈有效数据,sp以下都是无效的,是随时准备被占用的自由空间。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-10-5 07:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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