刘东方 发表于 2017-8-2 04:36:44

mov ss,ax 为什么会改变内存 程序6.3 王爽汇编118页

本帖最后由 刘东方 于 2017-8-2 16:25 编辑

大家好

这个程序的本意是要把第一排的字数据拷贝到第二排 然后再把 第二排的逆向拷贝到第一排
我做这个程序的时候 发现 指令 mov ss,ax 把内存 076A:0010 这一排其中几个改了 这样对程序的正确性产生了影响
因为如果push 字进栈里面的时候 里面的字节如果值不是零 会被指针推着走 等push 到第一排最后几个的时候 值已经变了

网上看到一个说是 cs:ip 被记录下来了 但是没说很清楚

所以请大神帮忙讲解一下 这个问题

感谢

东方

erh 发表于 2017-8-2 09:10:13

“因为如果push 字进栈里面的时候 里面的字节如果值不是零 会被指针推着走”
这个是你从字面理解的意思吧{:10_256:}
push ax进栈相当于sp-2,然后mov ,ax。不存在推着走的问题

erh 发表于 2017-8-2 11:38:02

还真是在把ip,cs存到了栈里面,
当sp=10h时,
=ip
=cs
=01A6
这三个字随着push向低地址推,比如push ax
则=ip
=cs
=01A6
=ax
栈满了,这三个字的值依次被覆盖。

不知道什么原因。另外01A6是什么也没有搞清楚。想着是标志寄存器的值,但是改变标志位的值后,并没有发生改变。

那个兄弟知道咋回事呢?

刘东方 发表于 2017-8-2 17:28:11

得到一个答案 应该靠谱儿:

用T命令调试属于单步中断
他会把 cs,ip,标志寄存器入栈
(为什么要入栈?以及如何入栈?因为ss 地址改成076A 但是sp 还是0, 为什么要从076A:01f开始入栈? 可能课本后面会讲到)

现在我不纠结这个 这个问题保留一下 等书看完再回头看看能不能解答

{:10_257:}
页: [1]
查看完整版本: mov ss,ax 为什么会改变内存 程序6.3 王爽汇编118页