- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 包含多个段的程序
第6章 包含多个段的程序 空间的分配 在加载程序的时候为程序分配。 程序在执行的过程中向系统申请。 若要在一个程序加载时取得所需的空间,则必须要在源程序中做出说明。 在源程序中定义段来进行内存空间的获取。 数据、代码、栈放入不同的段中。 6.1 在代码段中使用数据 考虑: 编程计算以下8个数据的和,结果丰在AX寄存器中: 0123H,0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987H 思考: 一个个地累加到AX中。 可用循环的方法累加。 将8个数据存入一组地址连续的单元。 用指令将数据存入内存单元。 从哪里找到这段内存空间。 让操作系统为我们分配空间? 让数据同程序代码一齐编译、连接、加载到内存。 源程序6.1: assume cs:code code segment dw 0123H,0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987H mov bx,0 mov ax,0 s:add ax,cs:[bx] add bx,2 loop s mov ax,4c00h int 21h code ends end dw 定义字型数据。即:define word. 8个数据的地址, 段地址:CS 偏移地址:0000H~000FH BX每循环一次,加2。 编译连接后,用Debug加载可执行文件到内存。 源程序6.1: assume cs:code code segment dw 0123H,0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987H start: mov bx,0 mov ax,0 s:add ax,cs:[bx] add bx,2 loop s mov ax,4c00h int 21h code ends end start end 标号 指示程序的入口,加载后CS:IP将指向程序开始处。 程序的框架 assume cs:code code segment … 数据 … start: … 代码 end code end start 6.2 在代码段中使用栈 完成下面的程序,利用栈,将程序中定义的数据逆序存放。 assume cs:codesg codesg segment dw 0123H,0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987H ? codesg ends end 分析: 先将8个字单元依次压栈,再将它们出栈,存入0000H~000FH单元中。 如何取得一段空间,作为栈。 根据上例中的经验,可以在原来定义的8个字单元后,增加定义8个字单元。 assume cs:codesg codesg segment dw 0123H,0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987H dw 0,0,0,0,0,0,0,0 ? codesg ends end 源程序: assume cs:codesg codesg segment dw 0123H,0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987H dw 0,0,0,0,0,0,0,0 start: mov ax,cs mov ss,ax mov sp,32 mov bx,0 mov cx,8 s: push cs:[bx] add bx,2 loop s mov bx,0 mov cx,8 s0:pop cs:[bx] add bx,2 loop s0 mov ax,4c00h int 21h codesg ends end start 6.3 将数据、代码、栈放入不同的段 定义不同的段,来存放数据、代码、栈。 assume cs:code,ds:data,ss:stack dsta segment dw 0123H,0456H,0789H,0ABCH,0DEFH,0FEDH,0CBAH,0987H
文档评论(0)