|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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的值呢
本帖最后由 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 的信息,这些信息会由编译程序搞定,完全不需要我们在代码中指定和初始化。我们需要做到的是让汇编程序能够识别出堆栈段就足够了。剩下的工作编译程序会为我们规划得非常完美。
至于堆栈数据,你为什么不在代码入口,而一定要等到程序执行完毕后才进行观察?你究竟想落实什么猜测?要知道,进程结束后,所有的程序数据都会失效,你的追溯毫无意义。
假如一定要追溯,那就把
改为
|
|