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

现在使用的汇编语言差不多都是使用这两种程序框架,两种都是前辈流传下来的经典编程框架,区别在于返回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;返回DOS
PROC1 ENDP
CODE 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 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
        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 21H
CODE ENDS
    END BEGIN


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

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

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


 

你可能感兴趣的:(汇编语言)