暮光青年 发表于 2016-7-28 14:43:34

关于push入栈的疑问.

mov ax,1000
mov bx,10
mov ss,ax
mov sp,bx
push ax

我在debug中顺序执行这几条指令,为什么执行到 push ax后,看内存1000:0010前面push进去的值,会有些奇怪的数




暮光青年 发表于 2016-7-29 12:53:51

这里没人了?

人造人 发表于 2016-7-29 13:40:39

请看书75页,那里的问题就是你要的答案
如果不能理解,书上不是说了吗
"因为随着课程的进行,这个问题的答案将逐渐变得显而易见" ^_^

暮光青年 发表于 2016-7-29 14:11:01

人造人 发表于 2016-7-29 13:40
请看书75页,那里的问题就是你要的答案
如果不能理解,书上不是说了吗
"因为随着课程的进行,这个问题的 ...

好吧,谢谢,以我现在所学的知识点还不够解答这个问题,我先把问题留下,继续往后面学习。

人造人 发表于 2016-7-29 14:36:15

暮光青年 发表于 2016-7-29 14:11
好吧,谢谢,以我现在所学的知识点还不够解答这个问题,我先把问题留下,继续往后面学习。

1366627538 发表于 2016-7-29 20:18:04

   push ax之后 可能编译器考虑到你要进行 跳转 到别的函数中,所以帮你保存了 标志寄存器的值 占一个字之后的是 依次是 cs 跟 ip 的值 ,倒着看。 你对比下是吧!!

人造人 发表于 2016-7-30 20:19:53

1366627538 发表于 2016-7-29 20:18
push ax之后 可能编译器考虑到你要进行 跳转 到别的函数中,所以帮你保存了 标志寄存器的值 占一个字   ...

编译器可没有那么智能

1366627538 发表于 2016-7-31 08:12:38

人造人 发表于 2016-7-30 20:19
编译器可没有那么智能

我已经试验过了,编译器会帮你将标志寄存器 cs ip 的值保存入栈,但是它不会影响你正常的sp的值,假如你在程序中忘记保存这些值,那么就可以用到。如果不知道它会保存,这些值也不会影响你栈区的使用,不错的机制。

人造人 发表于 2016-7-31 12:30:44

1366627538 发表于 2016-7-31 08:12
我已经试验过了,编译器会帮你将标志寄存器 cs ip 的值保存入栈,但是它不会影响你正常的sp的值,假如你 ...

哦?是吗? 你是怎么试验的?
看书 251 页,嗯...从249页开始看吧,单步中断

1366627538 发表于 2016-7-31 13:05:53

人造人 发表于 2016-7-31 12:30
哦?是吗? 你是怎么试验的?
看书 251 页,嗯...从249页开始看吧,单步中断

我没有书,我只是把楼主的代码直接复制过来,编译运行的

1366627538 发表于 2016-7-31 13:21:26

1366627538 发表于 2016-7-31 13:05
我没有书,我只是把楼主的代码直接复制过来,编译运行的

你的意思就是说 debug单独中断会保存这些值,那实验下不就OK了 ,先执行程序,再用debug来查看栈区还有没有这些值不就知道到底是谁搞的鬼了?

1366627538 发表于 2016-7-31 13:22:04

1366627538 发表于 2016-7-31 13:05
我没有书,我只是把楼主的代码直接复制过来,编译运行的

你的意思就是说 debug单独中断会保存这些值,那实验下不就OK了 ,先执行程序,再用debug来查看栈区还有没有这些值不就知道到底是谁搞的鬼了?

1366627538 发表于 2016-7-31 13:23:00

1366627538 发表于 2016-7-31 13:22
你的意思就是说 debug单独中断会保存这些值,那实验下不就OK了 ,先执行程序,再用debug来查看栈区还有没 ...

我刚刚遇到个大问题,你也来帮我看看吧{:5_92:}

人造人 发表于 2016-7-31 13:43:33

1366627538 发表于 2016-7-31 13:21
你的意思就是说 debug单独中断会保存这些值,那实验下不就OK了 ,先执行程序,再用debug来查看栈区还有没 ...

好啊,你自己实验吧

康小泡 发表于 2016-8-1 10:36:16

应该是要返回的地方
页: [1]
查看完整版本: 关于push入栈的疑问.