. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  堆栈初始化问题请教  [待解决] 回复[ 2次 ]   点击[ 311次 ]  
bloodbirdxu
[帖 主]   [ 发表时间:2010-11-16 22:51 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-11-09 12:12
assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
dw 0,0,0,0,0,0,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
将实验5第一小题编译后用debug加载发现
AX=1401  BX=0000  CX=0042  DX=0000  SP=0010  BP=0000  SI=0000  DI=0000
DS=1401  ES=13F1  SS=1402  CS=1403  IP=000D   NV UP EI PL NZ NA PO NC
1403:000D FF360000      PUSH    [0000]                             DS:0000=0123
-d 1402:0
1402:0000  00 00 00 00 00 00 01 14-00 00 0D 00 03 14 0A 0E   ................
ss指向的堆栈段中的16个字节没有都被初始化为0,是什么原因?
scuzg
[第1楼]   [ 回复时间:2010-11-19 13:31 ]   [引用]   [回复]   [ top ] 
荣誉值:307
信誉值:0
注册日期:2009-03-15 23:46
ss存储堆栈段段基址的高16位,楼主的例子中该值是1402h,用于指定堆栈段的段基址14020h。栈的容量和初始栈顶由sp指向。
samurabbit
[第2楼]   [ 回复时间:2010-11-26 00:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-11-25 23:24
回复:[贴 主]
------------------
你的栈里写的东西是DEBUG在对你的程序进行单步调试时写进去的,DEBUG用的栈也是你设置的SS:SP位置。这个问题在前面章节里有一题提到过,但没有给答案,要我们思考的。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved