• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
仓式茜
博客园    首页    新随笔    联系   管理    订阅  订阅
六--包含多个段的程序

我们在第五章说某段空间是安全的,但其只有256字节

在操作系统的环境中,合法的通过操作系统取得的空间都是安全的,因为操作系统不会让一个程序所用的空间和其他程序一起系统空间冲突

程序取得空间的方法有二:一是加载程序的时候为程序分配,二是程序在执行的过程中向系统申请。我们只讨论第一种。

我们若要一个程序在被加载时取得所需空间,就要在源程序中做出说明,可以通过在源程序中定义段来进行内存空间的获取。

(1)先体会在一个段存放数据、代码、栈

(2)将数据、代码、栈放入不同的段

1.在代码段中使用数据

  问题:编程计算以下8个数据的和,存在ax中

    0123h、0456h、0789h、0defh、0fedh、0cbah、0987h、0abch

    我们希望用循环,所以在累加前,要将这些数据存储在一组地址连续的内存单元中,怎样实现?

    可以在程序中,定义数据,这些数据会被编译、连接程序作为程序的一部分写到可执行文件中。

    当可执行文件被加载入内存,数据也同时被加载入内存,我们的数据自然的获得了存储空间。

 

  “dw”是定义字型数据,dw即“define word”,两个字节

  在代码段中,可通过CS得到他们的段地址,由于在代码段最开始,偏移地址从0开始,依次为0、2、4......、A、C、E

  即CS:0、CS:2、......CS:C、CS:E

  程序中,用bx存放递增2的偏移地址。

  

 

   前十六个字节是dw的数据

   

 

   要执行程序,可设置IP为10h,再用t、p、g命令执行

  怎样直接运行?在源程序中指明程序入口

  

 

   end除了通知编译器程序结束外,还通知编译器程序入口在哪里

  用”end 标号“指明了入口在标号start处

2.在代码段中使用栈

  

 

   思路:首先要有一段当作栈的内存空间

  可以通过在程序中定义数据来取得一段空间,将其当作栈空间

  

 

   要将CS:10~CS:2F当作栈,初始栈为空,SS:SP指向栈底,所以设置SS:SP指向CS:30

  描述dw的作用时,可以说用它定义数据,也可以说用它开辟内存空间。、

3.应该将数据、代码、栈放入不同的段

  (1)定义多个段的方法

    只是起不同的段名

  (2)对段地址的引用

    段名相当于一个标号,它代表了段地址,所以mov ax,data的含义是将名称为data 的段的段地址送入ax

    不能mov ds,data, 因为不允许直接将数值直接送入段寄存器,data被编译器处理为一个数值

  (3)“代码段”、“数据段”、“栈段”完全是我们的安排

posted on 2022-08-30 18:52  仓式茜  阅读(28)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3