• 【笔记】【汇编语言】第6章 包含多个段的程序


    6.0 概述
      前面的程序中,只有一个代码段,如果程序需要其他空间来存放数据,使用哪里呢?
      第5章讲过,0:200~0:2ff是相对安全的内存空间,但大小只有256个字节,如果我们需要的空间超过256个字节,就需要向系统申请。
      程序取得所需要的空间的方法有两种,一是在加载时分配,二是执行过程中向系统申请,本课程不讨论第二种方法。
      我们若要在一个程序被加载时取得所需空间,必须要在源程序中作出说明,我们通过在源程序中定义段来进行内存空间的获取。
     
    6.1 在代码段中使用数据
    示例程序:
    assume cs:code
    code segment
      dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
      mov bx,0
      mov ax,0
      mov cx,8
    s:add ax,cs:[bx]
      add bx,2
      loop s
      mov ax,4c00h
      int 21
    code ends
    end

      注:其中,dw是"define word"的缩写,即定义字型数据。
      该程序中定义的数据处于代码段中,地址为CS:0,CS:2,CS:4,CS:6,CS:8,CS:A,CS:C,CS:E。
      程序编译链接后无法正常执行,因为代码段的入口是数据,不是指令。可以用end伪指令来指明程序入口。
     
    assume cs:code
    code segment
      dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
    start:mov bx,0
      mov ax,0
      mov cx,8
    s:add ax,cs:[bx]
      add bx,2
      loop s
      mov ax,4c00h
      int 21
    code ends
    end start

      >>>>一个可执行文件由描述信息和程序组成,程序来自于源程序中的汇编指令和定义的数据;描述信息则主要是编译、连接程序对源程序中相关伪指令进行处理得到的信息<<<<
     
    6.2 在代码段中使用栈
    示例程序:
    assume cs:code
    code segment
      dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
      dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
      start: mov ax,cs
             mov ss,ax
             mov sp,30
             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
    code ends
    end start

    6.3 将数据、代码、栈放入不同的段
      (1) 定义多个段的方法
        与定义代码段的方法没有区别,只是不同的段要有不同的段名。
      (2) 对段地址的引用
        在程序中,段名就相当于一个标号,它代表了段地址。
      (3) 数据段、代码段、栈段,完全是我们自己的安排
     
    实验5 编写、调度具有多个段的程序
      略

  • 相关阅读:
    JVM命令
    悲观锁与乐观锁
    bean生命周期
    MyBatis面试题
    微服务面试题
    MyCat简介
    十大排序算法
    h5跳转微信公众号关注页面
    Maven项目 配置文件放在resources标记的目录下 却没有打包进target文件
    本机号码一键登录原理与应用
  • 原文地址:https://www.cnblogs.com/AzikPhil/p/note_asm2_6.html
Copyright © 2020-2023  润新知