. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验5第二小题的疑问  [待解决] 回复[ 2次 ]   点击[ 496次 ]  
402306834
[帖 主]   [ 发表时间:2009-10-05 22:48 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-09-25 17:09
assume cs:code,ds:data,ss:stack
data segment
        dw 0123h,0456h
data ends

stack segment
        dw 0,0
stack ends

code segment
start: mov ax,stack
       mov ss,ax
       mov sp,16
       
       mov ax,data
       mov ds,ax
       
       push ds:[0]
       push ds:[2]
       pop  ds:[2]
       pop  ds:[0]
       
       mov ax,4c00h
       int 21h
code ends
     end start
为什么程序执行完pop ds:[0]后,ss:c 和ss:e中的数据不是0123h,0456h了?
pop指令执行完应该不改变堆栈中的数据啊 ?
谢谢!
yasin
[第1楼]   [ 回复时间:2009-10-08 21:01 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-10-05 23:09
不清楚.可能是debug的问题.我调试了一下,当push ds:[0]时,原本在ss:e的数据往前移了一个字,当push ds:[2]时,又往前移了.当pop指令执行时,它们又往后移,最好回到原来的位置.那个栈好像是一个环.
auty95
[第2楼]   [ 回复时间:2009-10-26 10:07 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2009-10-09 11:42
只要你需要的数据没有改变不就可以了吗
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved