鱼C论坛

 找回密码
 立即注册
查看: 3847|回复: 3

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

[复制链接]
发表于 2017-8-2 04:36:44 | 显示全部楼层 |阅读模式

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

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

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

大家好

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

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

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

感谢

东方
程序6.3 问题.png

书上程序6.3

书上程序6.3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-2 09:10:13 | 显示全部楼层
“因为如果push 字进栈里面的时候 里面的字节如果值不是零 会被指针推着走”
这个是你从字面理解的意思吧
push ax进栈相当于sp-2,然后mov [sp-2],ax。不存在推着走的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-2 11:38:02 | 显示全部楼层
还真是在把ip,cs存到了栈里面,
当sp=10h时,
[0ah]=ip
[0ch]=cs
[0eh]=01A6
这三个字随着push向低地址推,比如push ax
则[08h]=ip
[0ah]=cs
[0ch]=01A6
[0eh]=ax
栈满了,这三个字的值依次被覆盖。

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

那个兄弟知道咋回事呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-2 17:28:11 | 显示全部楼层
得到一个答案 应该靠谱儿:

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

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 10:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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