汇编语言2种常用的编程框架

来源:互联网 发布:冰点还原精灵破解软件 编辑:程序博客网 时间:2024/06/16 06:11

现在使用的汇编语言差不多都是使用这两种程序框架,两种都是前辈流传下来的经典编程框架,区别在于返回DOS方式不同!记下,以备必需时可以翻阅。

    1.基于入栈的RET方式

DATA SEGMENT  ......DATA ENDS;数据段定义STACK SEGMENT PARA STACK  DW 20H DUP(0)STACK ENDS;堆栈段定义CODE SEGMENT  ASSUME CS:CODE,DS:DATA,SS:STACK  PROC1 PROC FAR        PUSH DS        MOV AX,0        PUSH AX        MOV AX,DATA        MOV DS,AX        ...;其他语句.        RET;返回DOSPROC1 ENDPCODE ENDS;代码段定义 END PROC1


程序段前缀0000H处存放了一条INT 20H指令,其功能是返回DOS。为此用RET指令退出时,只要在程序入口处将PSP:0000H压入堆栈中,在程序返回处使用RET指令就可以了。(PSP:段前缀)。

实例:实现z=(4x-y)/2。

代码:

DATA SEGMENT  X DB 2  Y DB 4  Z DB ?  DATA ENDSSTACK SEGMENT PARA STACK  DW 20H DUP(0)  STACK ENDSCODE SEGMENT  ASSUME CS:CODE,DS:DATA,SS:STACK  PROC1 PROC FAR        PUSH DS        MOV AX,0        PUSH AX        MOV AX,DATA        MOV DS,AX        MOV AL,X        MOV CL,2        SAL AL,CL;x乘与4(左移2位)        SUB AL,Y        SAR AL,1        MOV Z,AL;结果装入Z中        RET  PROC1 ENDP CODE ENDS  END PROC1

     2.基于EXE程序返回DOS的格式

 

 DATA SEGMENT   ......   DATA ENDS STACK1 SEGMENT PARA STACK   DW 20H DUP (0) STACK ENDS CODE SEGMENT   ASSUME CS:CODE,DS:DATA,SS:STACK1   BEGIN: MOV AX,DATA          MOV DS,AX          ......;其他语句                MOV AH,4CH          INT 21H;返回DOS CODE ENDS    END BEGIN


这种格式使用DOS 21H的4C00H功能退出:

在程序需要退出返回DOS处安排如下两条指令:

      MOV AX,4C00H;或者MOV AH,4CH

      INT 21H

这两条指令执行后就会返回DOS,采用这种方法退出没有任何 限制,只要程序执行到这两条指令就能返回DOS。

实例:实现z=(4x-y)/2。

代码:

 DATA SEGMENT   X DB 3   Y DB 4   Z DB ?   DATA ENDS STACK SEGMENT PARA STACK   DW 20H DUP (0)   STACK ENDS CODE SEGMENT   ASSUME CS:CODE,DS:DATA,SS:STACK   BEGIN: MOV AX,DATA          MOV DS,AX          MOV AL,X          MOV CL,2          SAL AL,CL          SUB AL,Y          SAR AL,1          MOV Z,AL          MOV AH,4CH          INT 21HCODE ENDS    END BEGIN


除了这两种还有其他的格式框架,主要是区别是返回DOS的方式不同!以上两种是最常用的两种格式!

 ----------------------------------------------------------

----------------------------------------------------------