. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  发现关于堆栈的一点“规律”  [待解决] 回复[ 4次 ]   点击[ 369次 ]  
514dx
[帖 主]   [ 发表时间:2010-07-01 13:30 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-06-29 13:19
对于P61中“出栈后,SS:SP指向新的栈顶100EH,pop操作前的栈顶元素,1000CH处的2266H依然存在,但是,它已不在栈中。“这句话有点怀疑,所以做了下面这个测试。
初始值:SS=1000;SP=0010;CS=2000;IP=0000;AX,BX,CX,DX=0000.
             0  1  2  3  4  5  6  7    8  9  A  B  C  D  E  F
MOV AX,AAAA 00 00 00 00 00 00 AA AA -  00 00 03        00 00 20 5E 06
PUSH AX     00 00 00 00        AA AA 00 00 -  04 00 00        20 5E 06 AA AA
MOV AX,BBBB 00 00 00 00        BB BB 00 00 -  07 00 00        20 5E 06 AA AA
PUSH AX            00 00 BB BB        00 00 08 00 -  00 20 5E        06 BB BB AA AA
MOV AX,CCCC 00 00 CC CC        00 00 0B 00 -  00 20 5E        06 BB BB AA AA
PUSH AX            CC CC 00 00        0C 00 00 20 -  5E 06 CC        CC BB BB AA AA
MOV AX,DDDD DD DD 00 00        0F 00 00 20 -  5E 06 CC        CC BB BB AA AA
PUSH AX            00 00 10 00 00 20 5E 06 -  DD DD CC        CC BB BB AA AA
POP AX            DD DD 00 00        11 00 00 20 -  5E 06 CC        CC BB BB AA AA
POP AX            DD DD CC CC        00 00 12 00 -  00 20 5E        06 BB BB AA AA
POP AX      DD DD CC CC        BB BB 00 00 -  13 00 00 20 5E 06 AA AA
POP AX      DD DD CC CC        BB BB AA AA -  00 00 14 00 00 20 5E 06
如上所示,我发现这些数据是有一定的规律的,但不知道为什么。而且,出栈后数据也没了,不像书上说的...
有谁知道这是为什么的?
514dx
[第1楼]   [ 回复时间:2010-07-01 13:41 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-06-29 13:19
不好意思,EXCEL粘贴上来的,格式变了。
               0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F
MOV AX,AAAA 00 00 00 00 00 00 AA AA - 00 00 03 00 00 20 5E 06
PUSH AX     00 00 00 00 AA AA 00 00 - 04 00 00 20 5E 06 AA AA
MOV AX,BBBB 00 00 00 00 BB BB 00 00 - 07 00 00 20 5E 06 AA AA
PUSH AX     00 00 BB BB 00 00 08 00 - 00 20 5E 06 BB BB AA AA
MOV AX,CCCC 00 00 CC CC 00 00 0B 00 - 00 20 5E 06 BB BB AA AA
PUSH AX     CC CC 00 00 0C 00 00 20 - 5E 06 CC CC BB BB AA AA
MOV AX,DDDD DD DD 00 00 0F 00 00 20 - 5E 06 CC CC BB BB AA AA
PUSH AX     00 00 10 00 00 20 5E 06 - DD DD CC CC BB BB AA AA
POP AX      DD DD 00 00 11 00 00 20 - 5E 06 CC CC BB BB AA AA
POP AX      DD DD CC CC 00 00 12 00 - 00 20 5E 06 BB BB AA AA
POP AX      DD DD CC CC BB BB 00 00 - 13 00 00 20 5E 06 AA AA
POP AX      DD DD CC CC BB BB AA AA - 00 00 14 00 00 20 5E 06
补充下,初始时10000H-1000FH都为00,代码右边为10000-1000F的值。
slzx3511
[第2楼]   [ 回复时间:2010-07-08 12:25 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-07-07 10:28
我也试了下,果真如楼主所说。,
不知道咋回事
lin1712
[第3楼]   [ 回复时间:2010-07-13 10:09 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-06-01 10:03
我觉得是内存占用、释放的问题,pop之后sp改变了,但原来栈顶的内存空间没有释放,值就会仍然存在,直到有命令去改变它。就好像mov ax,bx 之后 bx值仍然存在,直到你改变或释放它为至。会不会是有的处理器为了节省空间出栈自动释放原栈顶空间呢?
ytcxl008
[第4楼]   [ 回复时间:2010-07-13 22:17 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-07-07 08:53
你那后面是什么指令 直接用D 2000:0查看么? 书上1000CH处的2266H依然存在,但是,它已不在栈中 我觉得是对的,那个pop ax指令,就是把ss:sp指向的内容转移到ax中  书上解释没问题
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved