. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
主题 : :  定义64KB栈的时候,想的一个问题。  [待解决] 回复[ 7次 ]   点击[ 475次 ]  
pizilove
[帖 主] [ 发表时间:2013-11-30 15:10 ] 
荣誉值:0
信誉值:0
注册日期:2013-11-28 22:07
当定义一个64KB的栈的时候,SP的值是0。PUSH的话,会从FFFE开始写入。
那如果在没有入栈的情况下,直接POP会出现什么情况?我试验了一下。
-d 2000:0 f
2000:0000  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
-e 2000:0 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff
-d 2000:0 f
2000:0000  11 22 33 44 55 66 77 88-99 AA BB CC DD EE FF 00
-a
0C1E:0100 mov ax,2000
0C1E:0103 mov ss,ax
0C1E:0105 mov sp,0
0C1E:0108 pop ax
运行以后的结果是这样的::
-t
AX=2000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=0C1E  ES=0C1E  SS=0C1E  CS=0C1E  IP=0103   NV UP EI PL NZ NA PO NC
0C1E:0103 8ED0          MOV     SS,AX
-t
AX=2000  BX=0000  CX=0000  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0C1E  ES=0C1E  SS=2000  CS=0C1E  IP=0108   NV UP EI PL NZ NA PO NC
0C1E:0108 58            POP     AX
-t
AX=2211  BX=0000  CX=0000  DX=0000  SP=0002  BP=0000  SI=0000  DI=0000
DS=0C1E  ES=0C1E  SS=2000  CS=0C1E  IP=0109   NV UP EI PL NZ NA PO NC
0C1E:0109 98            CBW
-d 2000:0 f
2000:0000  82 06 33 44 55 66 77 88-99 AA BB CC DD EE FF 00  
先前定义的栈的20000和200001两个单位确实被读到AX中。可是那个0682是怎么来的呢。我实验了三次,都是这样结果。这是什么啥呢?
313966675
[第2楼] [ 回复时间:2015-11-09 09:37 ] 
荣誉值:0
信誉值:0
注册日期:2015-11-08 10:05
我就知道没有入栈直接POP就会POP出别地方的数据,至于0682就不知道了,刚学到第三章,答错了别喷
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved