汇编中的栈问题

来源:百度知道 编辑:UC知道 时间:2024/06/14 02:59:34
如果ss:sp已经指向1236:5234
从来没有执行 push和pop
问 1236:5234所在的地址中有没有内容···
也就是ss:sp指向此处后····意味着 内存分配那 占空间··
在分配前 此处是否有值
对于这点很不明白····
看到很多汇编程序 在设置栈顶的时候都是任意的····并没有考虑到此处是否有值·····
望前辈们给于指点····

我不知道你所说的设置栈顶的时候都是任意的是什么意思。
如果栈顶设置的时候,设置为一个系统保留的内存地址,或者其他程序正在使用的内存,程序会在操作系统层上报错,就是说你的程序访问了一个不可以访问的内存。
如果你说的问题是你程序内部的,如果你正在使用1236:5234这个地址存储数据,你就要考虑这个地方是否有值。
一般来说你的ss段和cs段和ds段都是分开的,如果不是认为强行使用某些内存的内容应该不会有问题。
如果你考虑到如果该内存不空,先调用了pop,才调用push怎么办,这个不是问题,因为先pop,后push是你自己需要找的bug,这个在逻辑上是没有意义的。而且,好像系统会报错,因为sp指针会越界。

一般在汇编中 栈事你先申请出来的!
一般初始化后!
如果你没POP和 push
那就要看你有没有call了!
每次call 的时候参数都是在栈里面联系的!

不同的单片机在上电时内存中是全0或任意值是不一样的。在使用栈之前,建议最好先初始化内存,将所有内存地址内容清零。否则即使没有执行过push和pop ,栈所在的内存区也可能是任意值。但一般正确的汇编软件使用push和pop 都是成对出现,即push会将原栈里内容覆盖。如果出现没有push就pop,无论原来栈里值为0或其他任意值都回引起不可预知的错误。这就是程序本身的缺陷了。

看前后程序里对此处可有操作