第六章 包含多个段的程序
在操作系统允许的情况下,程序可以取得任意容量的空间。
程序取得所需空间的方法有两种: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等寄存器的设置来决定的。
- [kanwangxue] 如果是文字的,不是特别好啊,体力活,如果文字还加点动画,那就必须顶了。 01/15 01:10
- [kanwangxue] 必须顶啊。 01/15 00:54
- [ltoiii] 既然是实现loop功能,是否要考虑s和se标号? mov bx,offset s - offset 12/09 12:09
- [xiaoyao2012] 正确 11/01 15:33
- [xuer2016] 又找到2条被我忽视的地方: 1.PUSH 和 POP 针对字单元 2.POP 不能是CS 10/26 10:57
- [xuer2016] 学习了 我书写不规范,16进制字母前不加0,后面不加H,以后要注意了。。。 10/26 10:51
- [xuer2016] 来老师这学习下 10/26 10:31
- [youthangel] 不妙,CPU的利用率一下子就上去了。还好我的处理器不是太弱,35%左右的利用率。建议博主在修改一下 10/20 08:23
- [fpamc] 在我心里她就是我的女神。 10/02 08:58
- [newpeople] 你女朋友用得了简直就是一个女神…… 10/01 08:10
- [99998888] 请您指点一下如何找到会ASSEMBLER 语言的翻译,翻译成中文或英文。我的QQ ; 9097815 07/25 09:56
- [jeremy] 我觉得你学习的挺好,可以加你扣扣吗?我的469614823 08/07 14:46
- [zhangbo0805] 哈哈, 你好呀!很希望认识你呀!我发现你学习的积极性很高!正想向您学习呢! 07/31 23:31
- [tomato] 知道了,排得还挺满。 05/29 16:35
- [tomato] 现在学习情况怎么样?在做课设二还是什么? 05/29 10:41
- [tomato] 你的留言收到了。 05/05 23:51
- [fpamc] 开始学习c咯! 05/03 21:40
- [fpamc] 居然不能发博客了……! 04/22 21:03
- [tomato] 你相册中的游戏界面我看过了,非常好,界面很漂亮,很有创造力。博主,很有潜力。加油,一定能把这个游戏做 04/20 23:46
- [fpamc] 忙了半个月,不在家,没时间学习汇编。 但是在途中想到了一个有史以来最难的程序。对于刚学完9章的我。 04/13 20:56