zoukankan      html  css  js  c++  java
  • 汇编 .COM 文件

      COM 文件与一般的 EXE 文件在结构上有所不同,COM 文件是在早期没有分段的情况下设计的,具有结构简单,占用内存小,数据及代码都在同一段内等即以 64K 为单位的特点,较实用的汇编程序,如对驻留程序,中断服务程序等的设计,在可能的情况下,一般都采用这样的程序结构。

       COM 文件在加载时将 CS, DS, ES, SS 段都定义在 PSP 段基址上,IP 定义在 PSP+100H 处,SP 堆栈指针被定位在程序的末端,并在顶存放两个字节的00H。

    编制 COM 文件应遵循下列规则:

    1. 只能建立一个代码段,内含代码和数据段,同时不能单独设置堆栈段。

    2. 代码和数据只能在 100H 以后设置,一般用伪指令 "ORG 100H" 放在汇编程序的开始,程序应在 ORG 100H 定义程序段的入口。即在 100H 处设置一条可执行指令,一般的结构如下:

    CODE SEGMENT
    
    ASSUME CS:CODE,DS:CODE
    
    ORG 100H
    
    START: JMP BEGIN
    
    ........
    
    数据区
    
    ........
    
    BEGIN: 程序区
    
    ........
    
    CODE ENDS
    
    END START

    3. 数据区可放在段内的任意地方,当然,不能与代码域冲突

    4. 整个程序是在一个段内,而涉及到段定义有关的指令,伪指令都会在程序链接时给出生成 COM 文件错误,如:

    MOV AX,CODE

    MOV DS,AX

        该指令串在 EXE 文件是没有问题,但如果要生成 COM 文件,换句话说,若按 COM 文件方式设计程序,则会出错,因为在 COM 文件中不存在段的概念。要完成上述功能应采用:

    PUSH CS

    POP DS

        同样的伪指令 SEG 也不能在 COM 文件中出现。

    5    在多模块情况下,要求所有的目标模块必须具有同一代码段名和类别名,且赋予 PUBLIC 供链接程序 LINK 使用,具有 " ORG 100H " 入口的主模块应优先链接。

    COM 文件的生成是在用 MASM 和 LINK 的方式生成 EXE 文件后,再使用 DOS 下的 EXE2BIN 命令将其转换成 COM 文件。若用 TASM 和 TLINK 时编译和链接程序时,在TLINK 加 /Tdc 开关直接生成 COM 文件。如果程序不能满足 COM 文件编程要求,则在执行 EXE2BIN 时会给出错误信息,当然,在TLINK时也会出错。

     

  • 相关阅读:
    【C++】《C++ Primer 》第二章
    【剑指Offer】链表的基本操作之创建、插入、删除
    【LeetCode】365.水壶问题
    【Flutter】事件处理与通知之原始指针事件处理
    【Flutter】功能型组件之对话框详解
    【Flutter】功能型组件之异步UI更新
    mongdb_基本操作
    startswith在项目中的应用
    subString在项目中的应用
    comtains在项目中的应用
  • 原文地址:https://www.cnblogs.com/youxin/p/2512165.html
Copyright © 2011-2022 走看看