. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  定义64KB栈的时候,想的一个问题。  [待解决] 回复[ 7次 ]   点击[ 475次 ]  
pizilove
[帖 主]   [ 发表时间:2013-11-30 15:10 ]   [引用]   [回复]   [ top ] 
荣誉值: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是怎么来的呢。我实验了三次,都是这样结果。这是什么啥呢?
1461299415
[第1楼]   [ 回复时间:2014-11-16 14:17 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-11-08 19:06
我也是这样的情况
313966675
[第2楼]   [ 回复时间:2015-11-09 09:37 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2015-11-08 10:05
我就知道没有入栈直接POP就会POP出别地方的数据,至于0682就不知道了,刚学到第三章,答错了别喷
llc_xz
[第3楼]   [ 回复时间:2020-04-15 00:56 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2020-04-14 15:05
两个问题,一·这定义不能实现楼主所说的64K的栈。二·这操作直接出现栈顶超界的问题。
luguanghua
[第4楼]   [ 回复时间:2020-05-01 19:06 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2020-04-10 16:10
0682的问题是由于单步跟踪,产生的中断。是后面章节中断的内容,标志寄存器入栈导致的。
muxi
[第5楼]   [ 回复时间:2020-06-30 21:31 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2020-06-27 01:08
回复:[第3楼]
------------------
这个就是64k的栈吧,栈空和栈满时的sp都是0,如果直接pop的话,就是把它看作栈满。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved