汇编网首页登录博客注册
girl_lulu的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  

[2010-08-10 01:09] 第6章课后习题       数据段 栈段在前在后

一 数据段和栈段在前
【实验5(2)】

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,data
       mov ds,ax
       mov ax,stack
       mov ss,ax
       mov sp,16
       
       push ds:[0]
       push ds:[2]
       pop ds:[2]
       pop ds:[0]
       
       mov ax,4c00h
       int 21h
code ends
end start


List File [NUL.MAP]:
Libraries [.LIB]:
LINK : warning L4021: no stack segment

C:\DOCUME~1\ADMINI~1>
C:\DOCUME~1\ADMINI~1>debug p14.exe
-u
0B75:0000 B8730B        MOV     AX,0B73
0B75:0003 8ED8          MOV     DS,AX
0B75:0005 B8740B        MOV     AX,0B74
0B75:0008 8ED0          MOV     SS,AX
0B75:000A BC1000        MOV     SP,0010
0B75:000D FF360000      PUSH    [0000]
0B75:0011 FF360200      PUSH    [0002]
0B75:0015 8F060200      POP     [0002]
0B75:0019 8F060000      POP     [0000]
0B75:001D B8004C        MOV     AX,4C00
-g 1d

AX=0B74  BX=0000  CX=0042  DX=0000  SP=0010  BP=0000  SI=0000  DI=0000
DS=0B73  ES=0B63  SS=0B74  CS=0B75  IP=001D   NV UP EI PL NZ NA PO NC
0B75:001D B8004C        MOV     AX,4C00
-d ds:0 3
0B73:0000  23 01 56 04                                       #.V.
-

注意:cx=42h


二 数据段和栈段在后
【实验5(3)】

assume cs:code,ds:data,ss:stack
code segment
start: mov ax,data
       mov ds,ax
       mov ax,stack
       mov ss,ax
       mov sp,16
       
       push ds:[0]
       push ds:[2]
       pop ds:[2]
       pop ds:[0]
       
       mov ax,4c00h
       int 21h
code ends

data segment
 dw 0123h,0456h
data ends

stack segment
 dw 0,0
stack ends

end start



Libraries [.LIB]:
LINK : warning L4021: no stack segment

C:\DOCUME~1\ADMINI~1>debug p15.exe
-u
0B7F:0000 B8820B        MOV     AX,0B82
0B7F:0003 8ED8          MOV     DS,AX
0B7F:0005 B8830B        MOV     AX,0B83
0B7F:0008 8ED0          MOV     SS,AX
0B7F:000A BC1000        MOV     SP,0010
0B7F:000D FF360000      PUSH    [0000]
0B7F:0011 FF360200      PUSH    [0002]
0B7F:0015 8F060200      POP     [0002]
0B7F:0019 8F060000      POP     [0000]
0B7F:001D B8004C        MOV     AX,4C00
-r
AX=0000  BX=0000  CX=0044  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B6F  ES=0B6F  SS=0B7F  CS=0B7F  IP=0000   NV UP EI PL NZ NA PO NC
0B7F:0000 B8820B        MOV     AX,0B82
-g 1d

AX=0B83  BX=0000  CX=0044  DX=0000  SP=0010  BP=0000  SI=0000  DI=0000
DS=0B82  ES=0B6F  SS=0B83  CS=0B7F  IP=001D   NV UP EI PL NZ NA PO NC
0B7F:001D B8004C        MOV     AX,4C00
-

注意:cx=44h,
     再用u命令查看一步,即知:代码段长度为22h,所以占用空间为30h.




总结:1>cx记录程序的长度,方法为:
        (2)小题:cx=20h+22h=42h
         (3)小题:cx=30h+10h+4h=44h
      2>
         疑问:如你所说,当在代码段中定义数据时,数据的起始位置为cs:0;但存在数据段时,依实验5(1)(2)debug结果数据段的段地址当然是X-2(栈段的段地址是X-1),关于这一点,我想知道为什么??另:教材p92页,psp区(紧接后面的是程序区)不是数据区吗,既然如此,我想问的是数据段的段地址为何不是ds(或sa),而偏偏是X-2?
      3> 疑问:end start改为end后的程序执行情况.(即实验5(4))
评论次数(0)  |  浏览次数(358)  |  类型(汇编语言) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码