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

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
好友圈
友情链接

[2008-10-29 11:05] 实验五  编写、调试具有多个段的程序

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
(1)CPU执行程序,程序返回前,data段中的数据为多少?
 //0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
(2)CPU执行程序,程序返回前,cs=0B5C、ss=0B5B、ds=0B5A.
(3)设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1.
assume cs:code,ss:stack,ds:data
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                    
       
(1)CPU执行程序,程序返回前,data段中的数据为多少?
 //0123h,0456h
(2)CPU执行程序,程序返回前,cs=0B5C、ss=0B5A、ds=0B4A.
(3)设程序加载后,code段的段地址为X,则data段的段地址为X-2,stack段的段地址为X-1.
(4)如果段中的数据占N个字节, 
程序加载后实际占的空间有以下情况: 
   (1)当N!= 16的整数倍时,实占空间为(N/16 + 1)*16 字节; 
   (2)当N = 16时或为16的整数倍时,实点空间即为N字节。 
通用公式:[(N+15)/16]*16,同样(N+15)/16只取整。

3.
(1)CPU执行程序,程序返回前,data段中的数据为多少?
 //0123h,0456h
(2)CPU执行程序,程序返回前,cs=0B5A、ss=0B5E、ds=0B4D.
(3)设程序加载后,code段的段地址为X,则data段的段地址为X+3,stack段的段地址为X+4.
(4)3仍可以执行,因为程序加载后,CS:00处正好是指令起始的地方。因为如果不为程序指定入口地址,则加载后,程序指令内存空间默认PSP后为程序入口地址,也就是CS:00处。
评论次数(1)  |  浏览次数(1387)  |  类型(汇编作业) |  收藏此文  | 

[  younggay   发表于  2008-11-21 13:27  ]

程序指令内存空间默认PSP后为程序入口地址,
------------
不是psp开始为入口,加载后ds指向psp头,cs指向入口,入口最近的开始处也应该是psp的ds+10H:0000H处的。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码