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

我的博客

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

[2012-03-14 21:24] 第六章笔记

第六章 包含多个段的程序
在操作系统允许的情况下,程序可以取得任意容量的空间。
程序取得所需空间的方法有两种:1.加载程序的时候为程序分配;2.程序在执行的过程中向系统申请。

“dw”(define word)的含义是定义字形数据(数据之间以逗号分隔),也可以说开辟内存空间。
“db”的含义是定义字节型数据,与“dw”功能相同。
“dd”的含义是定义dword(double word,双字)型数据。

end出了通知编译器程序结束外,还可以通知编译器程序的入口在什么地方。
只要在源程序中用“end标号”,cpu就从我们希望的地方开始执行。
这样的程序的框架:
assume cs:code
code segment
        :
        :
       数据
        :
        :
start:
        :
        :
       代码
        :
        :
code ends
end start

如何知道哪一条指令是程序的第一条要执行的指令?
是由可执行文件中的描述信息指明的。

在单任务系统中,可执行文件中的程序执行过程如下:
① 由其他的程序(debug、command或其他程序)将可执行文件中的程序加载入内存;
② 设置cs:ip指向程序的第一条要执行的指令(即程序的入口),从而使程序得以运行;
③ 程序运行结束后返回到加载者。

在8086模式中,一个段的容量不能大于64KB。
在程序中,段名就相当于一个标号,它代表了段地址。

cpu如何知道去执行他们?
我们在源程序的最后用“end start”说明了程序的入口,这个入口将被写入可执行文件的描述信息,可执行文件的程序被加载入内存后,cpu的cs:ip被设置指向这个入口,从而开始执行程序中的第一条指令。

cpu到底如何处理我们定义的段中的内容,是当做指令执行,当做数据访问,还是当做栈空间,完全是靠程序中具体的汇编指令,和汇编指令对cs:ip、ss:sp、ds等寄存器的设置来决定的。
评论次数(0)  |  浏览次数(343)  |  类型(汇编笔记) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码