IBM-PC汇编语言程序设计余朝琨第11章子程序结构程序设计课件教学.pptVIP

  • 3
  • 0
  • 约2.69万字
  • 约 75页
  • 2016-12-30 发布于广东
  • 举报

IBM-PC汇编语言程序设计余朝琨第11章子程序结构程序设计课件教学.ppt

本例题是很简单的,其实该例直接用寄存器传递参数就更方便。用简单之例来理解一种程序结构,使人感到轻松易懂,明白其真谛。 为了理解堆栈传递参数的方法,可把本例调用程序和子程序执行中的堆栈变化情况示于图11-2.尤其注重断点的保护与恢复过程,从图中很容易明白。 从图11-2明显看到,当入口参数压入堆栈时,堆栈空间逐渐减少,而堆栈数据弹出后,堆栈指针又恢复到原位,因此堆栈中的存储单元能被多次使用。本例的调用程序与子程序同在一个代码段中,以下再举一出个例子说明调用程序与子程序分属于两个不同的代码段中的情形,此时子程序应定义为FAR类型属性。  CODE SEGMENT ASSUME CS:CODE,DS:DATA EXTRN SUM:FAR ;说明SUM是外部的,且为段间类型 START: MOV AX,DATA MOV DS,AX MOV AX,(SUM1-DA1) PUSH AX ;A数组元素个数进栈,参数1 LEA BX,DA1 PUSH BX ; A数组元素首地址进栈,参数2 CALL SUM ;此时CS:IP断点进栈 MOV AX,(SUM2-DA2) PUSH AX ;B数组元素个数进栈,参数1 LEA BX,DA1 PUSH BX ;B数组元素首地址进栈,参数2 CALL SUM ;此时CS:IP断点进栈 MOV AH,4CH INT 21H CODE ENDS END START ;**************************************** CODE1 SEGMENT ASSUME CS:DODE1 PUBLIC SUM ;说明SUM是公用的,允许其它段调用 SUM PROC FAR PUSH AX ; 保护现场 PUSH BX PUSH CX PUSH BP MOV BP,SP PUSHF MOV CX,[BP+14] ;取参数1,数组长度 MOV BX,[BP+12] ;取参数2,数组首址 MOV AX,0 LP:ADD AL,[BX] INC BX ADC AH,0 ; 回收进位 LOOP LP MOV [BX],AX ;存放结果 POPF POP BP ;恢复现场 POP CX POP BX POP AX RET 4 ;清除主程序压入的数组首地址及元素个数 SUM ENDP CODE1 ENDS END 程序在执行过程中,堆栈中内容变化的过程如图11-3所示。 3. 利用存储单元传递参数 第三种参数传递的方法是开辟一个存储区来传递参数。可以事先定义从内存的某个地址开始,按一定的次序存放输入参数和输出参数。这种方法适用于参数较多的场合。 堆栈是特殊的存储区,它以“后进先出”原则存取信息。还有一种传递较多参数的方法是在内存中使用一个约定的存储区来保存和传递调用程序和子程序间的参数。调用程序在调用子程序前将所有输入参数按预先安排好的次序存入约定的存储区,进入子程序后又按约定从存储区中取出输入参数进行处理,子程序处理的输出参数也按约定的次序 具体算法:取出第一字节单元内容与第二个单元内容左移四位后相加(相或)

文档评论(0)

1亿VIP精品文档

相关文档