鱼C论坛

 找回密码
 立即注册
查看: 1557|回复: 4

[已解决]为什么在栈段里定义好值后debug里面的值跟定义的不一样

[复制链接]
发表于 2022-6-5 08:06:19 | 显示全部楼层 |阅读模式

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

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

x
assume cs:code,ss:stack

stack segment stack
dw 8 dup(0)
stack ends

code segment
start:
        mov ax,stack
        mov ss,ax
        mov sp,16
       
        mov ax,4c00h
        int 21h
       
code ends
end start
-----------------------------------------------------------
代码在栈段定义了前16个字节是0, 代码在debug执行完int 21h最后一句后输入d ss:0查看栈里的值为什么是
04B0:0000 00 00 00 00 00 00 00 00-00 00 0D 00 B1 04 02 01  不应该全都是0吗,为什么最后几个字节不是0
在栈里压入值后最后两个字节的值是压入后的数据,是没问题的,可是前面几个字节的值依然不是0, 是masm或debug的
版本原因还是本来汇编语言就会忽略在栈段里定义的值只会关心栈顶指针sp的值呢
最佳答案
2022-6-5 10:05:18
本帖最后由 jackz007 于 2022-6-5 10:40 编辑

      你的代码有很多没有必要的成分,写成下面这样完全等效
assume cs:code

stack segment stack
        dw 8 dup(0)
stack ends

code segment
start:
        mov ax,4c00h
        int 21h
code ends
end start
        exe 文件中固定有初始 CS:IP 和 SS:SP 的信息,这些信息会由编译程序搞定,完全不需要我们在代码中指定和初始化。我们需要做到的是让汇编程序能够识别出堆栈段就足够了。剩下的工作编译程序会为我们规划得非常完美。
        至于堆栈数据,你为什么不在代码入口,而一定要等到程序执行完毕后才进行观察?你究竟想落实什么猜测?要知道,进程结束后,所有的程序数据都会失效,你的追溯毫无意义。
        假如一定要追溯,那就把
        int 21h
         改为
        int 03h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-5 10:05:18 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-6-5 10:40 编辑

      你的代码有很多没有必要的成分,写成下面这样完全等效
assume cs:code

stack segment stack
        dw 8 dup(0)
stack ends

code segment
start:
        mov ax,4c00h
        int 21h
code ends
end start
        exe 文件中固定有初始 CS:IP 和 SS:SP 的信息,这些信息会由编译程序搞定,完全不需要我们在代码中指定和初始化。我们需要做到的是让汇编程序能够识别出堆栈段就足够了。剩下的工作编译程序会为我们规划得非常完美。
        至于堆栈数据,你为什么不在代码入口,而一定要等到程序执行完毕后才进行观察?你究竟想落实什么猜测?要知道,进程结束后,所有的程序数据都会失效,你的追溯毫无意义。
        假如一定要追溯,那就把
        int 21h
         改为
        int 03h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-5 10:39:41 | 显示全部楼层
jackz007 发表于 2022-6-5 10:05
你的代码有很多没有必要的成分,写成下面这样完全等效

        exe 文件中固定有初始 CS:IP 和 SS ...

我从程序入口每执行一步都会查看一下栈里面的值,在入口处栈里面的值最后面两个字节都是FF,前面的都是0,执行一步以后值就更不正常了,入口处的数据最后两个字节也不对啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-5 10:47:00 | 显示全部楼层
本帖最后由 jackz007 于 2022-6-5 10:49 编辑
月下孤井 发表于 2022-6-5 10:39
我从程序入口每执行一步都会查看一下栈里面的值,在入口处栈里面的值最后面两个字节都是FF,前面的都是0,执 ...


        对于堆栈而言,只要能保证你的压栈数据正确就可以了,所以,你应该关心的是 sp 往上到栈顶之间的数据,至于 sp 往下到栈底则完全没必要关心。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-5 16:26:54 | 显示全部楼层
jackz007 发表于 2022-6-5 10:47
对于堆栈而言,只要能保证你的压栈数据正确就可以了,所以,你应该关心的是 sp 往上到栈顶之间 ...

好的,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 11:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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