. : : 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压进去?
findfullmoon
[第14楼] [ 回复时间:2008-08-28 22:27 ] 
荣誉值:0
信誉值:0
注册日期:2008-08-22 13:31
我覺得大家想得都蠻強的。。
不過老師寫這本書 似乎是針對初學匯編並使用這本書來入門的同學吧。
書上說“如果在這裡就正確回答了問題,那麼要恭喜讀者有很好的悟性”。
如果是中斷之類的東西,我覺得讓人無從可悟。。。。。真要是學都沒學過就悟出來了。。真的蠻天才的。

從語句上來看
0B07:0100 mov ax,2000 
0B07:0103 mov ss,ax 
0B07:0105 mov sp,10  
0B07:0108 mov ax,3123 
只執行到了這裡。連push都沒有執行。

如果老師問到我,我也只能回答:不在棧中。
因為如果繼續執行語句就會發現push ax就會開始起作用並在內存中填入預期的數據。
所以只能判斷出,在push前的數據改變,與語句中的push語句沒什麼關係。。。

另外一旦push語句觸發的內存修改就不會再出現變化。我只能理解這是系統或者debug程序安排使用內存的方法。
因為我在不同版本的dos間使用不同版本的debug程序(ms-dos freedos rd-dos及所附帶的不同版本的debug程序),並沒有完全得到關於那個寄存器入棧的現象(也可能是我的手工輸入有誤吧。)。

希望有標準答案的達人 進來發個答案,好讓我等解惑。先謝謝了。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved