. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
主题 : :  第三章最后一个任务整不明白  [待解决] 回复[ 25次 ]   点击[ 2527次 ]  
helloworld
[帖 主] [ 发表时间:2007-10-25 11:21 ] 
荣誉值:10
信誉值:6
注册日期:2007-10-20 14:34
0B07:0100 mov ax,2000
0B07:0103 mov ss,ax
0B07:0105 mov sp,10 
0B07:0108 mov ax,3123 
0B07:010B push ax
0B07:010C mov ax,3366
0B07:010F push ax 

实验问我20000H---2000FH的数据为什么会改变,那这不明摆着代码将栈段设为20000H-2000FH这个范围,push以后,肯定是将ax的数据压进这个段里的,那所以就变了嘛,但我不知道他怎么把cs:ip的数据压进去了,而不是将3123压进去?
shanguianti
[第4楼] [ 回复时间:2007-11-02 09:01 ] 
荣誉值:19
信誉值:0
注册日期:2007-10-31 16:24
昨天晚上没有弄明白,今天早晨又debug了一次。个人理解是这样的:栈空间是16个字节,用0~15表示,第一个push之前,先把一个值(这个值我也没有弄明白是什么)暂存在14~15两个字节里,接着把CS、IP送入10~13两个字节,再把ax的内容暂存在6~7两个字节里,第一个push之后,ax送入14、15两个字节里,刚才暂存的数字向上移动两个字节,并且IP的内容也变为CS:IP所指向的下一条指令的IP。第二个push同上,除了向上移动两个字节和IP改变外,就是把ax的内容也改变。
但是为什么会是这样呢?是不是在栈操作之前首先要保存现场的一些东西,操作完毕后还要恢复现场呢?也许只有随着学习的深入才能完全理解。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved