【笔记】【汇编语言】第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 编写、调度具有多个段的程序
  略

原文地址:https://www.cnblogs.com/AzikPhil/p/note_asm2_6.html