. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  在第六章程序6.3中的疑问?  [已解决] 回复[ 5次 ]   点击[ 721次 ]  
xohome
[帖 主]   [ 发表时间:2010-12-21 09:33 ]   [引用]   [回复]   [ top ] 
荣誉值: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 ]   [引用]   [回复]   [ top ] 
荣誉值:8
信誉值:0
注册日期:2010-12-15 20:35
我也疑惑,我是因为只有8个字,为什么后面要申请16个字的空间。
如果也只申请8个字,那么栈顶就是20H。
不知可否,为啥?
liber
[第2楼]   [ 回复时间:2010-12-21 21:58 ]   [引用]   [回复]   [ top ] 
荣誉值:8
信誉值:0
注册日期:2010-12-15 20:35
还有楼主啊,用debug调入程序后,cs:0不是在指令的地方。而是在DS+PSP的地方。
liber
[第3楼]   [ 回复时间:2010-12-21 22:05 ]   [引用]   [回复]   [ top ] 
荣誉值:8
信誉值:0
注册日期:2010-12-15 20:35
我测试过了,定义数据后,在定义8个字的0,把栈顶改到20H,也可以,运行完,摆的那的数据也倒过来了。
xohome
[第4楼]   [ 回复时间:2010-12-23 08:43 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:2
注册日期:2010-11-24 11:04
回复:[第2楼]
------------------
明白了,标记了end start已经指定了入口所在了 即(cs)=start  但这只是段地址  我晕,脑袋笨了...

而且 dw总共定义了8+16个字  也就说是48个字节 换算成十六进制则是30H,从开始则是 (cs):0 - (cs):30H  正好是数据段内存空间   唯一的问题就是dw数据量的问题了,不知道第二个dw为什么要定义16个字
xohome
[第5楼]   [ 回复时间:2010-12-23 08:47 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:2
注册日期:2010-11-24 11:04
此贴由 贴主 于 [ 2010-12-23 08:47 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(liber):2分   2楼(liber):6分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved