. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
主题 : :  在第六章程序6.3中的疑问?  [已解决] 回复[ 5次 ]   点击[ 722次 ]  
xohome
[帖 主] [ 发表时间:2010-12-21 09:33 ] 
荣誉值:2
信誉值:2
注册日期:2010-11-24 11:04
assume cs:codesg

codesg segment

     dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
     dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
                            ;用dw定义16个字型数据,在程序加载后,将取得16个字的内存空间
                            ;存放这16个数据。在后面的程序中将这段空间当作栈空间来使用
     start : mov ax,cs
             mov ss,ax
             mov sp,30h     ;将设置栈顶ss:sp指向cs:30   ??? 为什么是30H?
             
             mov bx,0
             mov cx,8
         s : push cs:[bx]
             add bx,2
             loop s

             mov bx,0
             mov cs,8
        s0 : pop cs:[bx]
             add bx,2
             loop s0

             mov ax,4c00h
             int 21h
codesg ends

end start

根据end start这句 可以得出 (cs) = (start)
第一句mov ax,cs 得出:(ax) = (cs) = (start)
第二句mov ss,ax 得出:(ss) = (ax) = (cs) = (start)
第三句mov sp,30h 这里就有问题了,根据程序结构, 程序所占内存应该是这样:PSP + dw + start才对,但栈寄存器ss却指定的是start的段地址,并且sp指定了不知所以的30h  到底什么意思?
liber
[第1楼] [ 回复时间:2010-12-21 21:54 ] 
荣誉值:8
信誉值:0
注册日期:2010-12-15 20:35
我也疑惑,我是因为只有8个字,为什么后面要申请16个字的空间。
如果也只申请8个字,那么栈顶就是20H。
不知可否,为啥?
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved