• 汇编学习笔记(14)


    完整的段定义

      格式

          段名 SEGMENT  [定位类型]  [组合类型]  ['类别']

            XXXXXXXXX

          段名 ENDS

      说明

          定位类型

              定位类型就是这个段的起始位置的对齐方式,有如下几种

              BYTE  没有对齐的要求,随便起始地址是哪里

              WORD  起始地址的最后位是0,即地址是 XXXX XXXX XXXX XXX0

              DWORD  起始地址的最后位是0,即地址是 XXXX XXXX XXXX XX00

              PARA   起始地址的最后位是0,即地址是 XXXX XXXX XXXX 0000

              PAGE     起始地址的最后位是0,即地址是 XXXX XXXX 0000 0000

          组合类型

              就是遇到名字和类型相同的段的时候他们直接怎么合并,有如下几种

              PUBLIC  直接按照顺序拼接在一起,总长度就是所有段加起来的长度

              COMMOM   这个就相当于C中的联合体 UNION, 互相重叠在一起,总长度就是最长的那个的长度

              STACK        表明这是一个堆栈段,和PUBLIC采用相同的规则,拼接起来     

          类别

              用 ' ' 包起来的一个自定义的字符串,相当于在段名的基础上加了个小标,只有段名和类别都一致才认为是一个段 

      举例

          CSEG   SEGMENT BYTE PUBLIC 'DATA'

            XXXXXXXXX

          CSEG   ENDS

      其他说明

          段组

             格式

               组名  GROUP  段名1, 段名2

             举例

                DS1S2  GROUP  DSG1, DSG2

             说明

               每个段寻址的时候都是使用段地址:偏移地址的方式寻址,如果存在多个段,那么在使用的时候就需要频繁的切换段地址 可能是DS寄存器,也可能是ES寄存器,这就很麻烦,使用段组就相当于给这些段起了个总的段地址, 所有段中的变量都可以使用这个总的段地址,

               同时原来的段地址也还是可以正常使用的,不有有一下两点注意

                1. ASSUME 的  DS必须设置为 组名

                  ASSUM DS:DS1S2

                2. 取地址的时候必须使用如下格式

                  OFFSET DS1S2 VAR1

    简化的段定义

      前提

        需要使用 .MODEL [类型] 的方式来告知汇编器 程序的存储模型

        .MODEL SMALE    程序和数据都不超过64K

        .MODEL MEDIUM   数据小于64K 代码不一定

        .MODEL COMPACT  代码小于64K  数据数据不一定,但是单个数组肯定小于64K

        .MODEL LARGE    代码和数据都可能大于64K,但是单个数组肯定小于64K

        .MODEL HUGE    代码和数据都可能大于64K,而单个数组可能也大于64K

        

        .MODEL指令使用的时候相当于同时执行了如下伪指令

          DGROUP GROUP DATA,CONST,BSS,STACK

          ASSUME CS:_TEXT,DS:DGROUP,SS:DGROUP

      简化的段定义

        .CODE

            代码段的简化定义,遇到下一个段的定义或者遇到END表示该段结束

        .STACK [大小]

            堆栈段的简化定义,遇到下一个段的定义表示该段结束, 大小表明这个段有多大

        .DATA

            数据段的简化定义,遇到下一个段的定义表示该段结束

        .DATA?

            未初始化的数据段的简化定义,遇到下一个段的定义表示该段结束

        .CONST

            常数段的简化定义,遇到下一个段的定义表示该段结束

        .FARDATA [名字]

            其他自定义段的简化定义, 名字表示段的名称

       例子

               .MODEL SMALL

                  .STACK  1024

               .DATA

           MESS:    DB 'HELLO',0DH,0AH

               .CODE

             START :  MOV AX, DGROUP

                MOV DX,AX

                  MOV DX,OFFSET MESS

                  MOV AH,9

                  INT 21H

                  MOV AX, 4C00H

                 INT 21H

                 ASSUME DS:@CODE ;可以手动重设段地址,简化的段名使用@符号引用

                 END START      

    函数的导出与引用

      说明

          汇编程序可以分别汇编多段程序,然后使用LINK程序将它们链接成一个完成程序,它们之后需要使用CALL来互相调用,那么在别写的时候就需要知道其他模块的函数,而本身给别人调用的时候也要告诉别人自己的函数名

      PUBLIC

          公开自己的函数或者变量

        格式

          PUBLIC  A,B,C

        说明

          A,B,C 可以是函数名,也可以是变量名

          

      EXTRN

          告诉汇编器,这些函数或者变量是在别的模块中定义的

        格式

          EXTREN  名称:类型

        举例

          EXTREN  PROC1:NEAR,PROC2:FAR

          EXTREN  VAR1:WORD,VAR2:BYTE

        说明

          由于链接的时候很能确定两段代码时候能在同一个段中,所以 函数的声明最好永远是使用FAR调用的

        程序例子

          模块1

                .MODEL SMALL

                PUBLIC VAR1,VAR2

                PUBLIC DELAY

                .DATA

             VAR1  DW ?

             VAR2  DB  ?

             VAR3  DB  5 DUP (0)

                  .CODE

            DELAY  PROC

            LAB1:    RET

            DELAY ENDP

               END

          模块2

            

                .MODEL SMALL

                EXTRN VAR1:WORD,VAR2:BYTE

                EXTRN DELAY:FAR

                  .CODE

            START:   MOV AX, VAR1

                MOV AL, VAR2

                CALL FAR PTR DELAY

            END       SATRT

      

  • 相关阅读:
    FlashDevelop视频教程三:多工程的使用及编译SWC
    FlashDevelop插件ASCompletion
    c#实现MD5加密
    FlashDevelop视频教程一:简介及安装
    FlashDevelop4 快捷键
    FlashDevelop视频教程四:FLA工程调试和一些技巧
    一个简单的c#操作XML文件的类,只能操作一层的节点
    验证用户的存储过程
    MOSS模态窗口应用
    二进制图片格式转换
  • 原文地址:https://www.cnblogs.com/alwaysking/p/12266965.html
Copyright © 2020-2023  润新知