安防监控知识
电气知识|子程序的嵌套
2017-02-17  浏览:45
安防之家讯:一、子程序的嵌套

一个子程序作为调用程序去调用另一个子程序的情况称为子程序的嵌套。

嵌套深度:嵌套的层数称为嵌套深度。不受限制。

嵌套子程序的设计:没有什么特殊要求,除子程序的调用和返回应正确使用CALL和RET指令外,要注意寄存器的保护和恢复。如用堆栈传送数据要避免因堆栈使用中的溢出问题而造成子程序不能正确返回的错误。有两种可能发生堆栈溢出的情况:

堆栈上溢:如堆栈已满,但还想再存入信息,这种情况称为堆栈上溢。

堆栈下溢:如堆栈已空,但还想再取出信息,这种情况称为堆栈下溢。

递归子程序:子程序自己调用自己的情况称为递归调用,这种子程序称为递归子程序

二、嵌套深度

图1表示了嵌套深度为2时的子程序嵌套情况。



例1两个6字节数相加。

分析:将一个字节相加的程序段设计为子程序。主程序分3次调用该子程序,但每次调用的参数不同。

程序如下:

DATASEGMENT

ADD1DBFEH,86H,7CH,35H,68H,77H

ADD2DB45H,BCH,7DH,6AH,87H,90H

SUMDB 6DUP(0)

COUNTDB6

DATAENDS

STACKSEGMENT

DB100DUP(?)

STACKENDS

CODESEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

MADD: MOV AX,DATA

MOV DS,AX

MOV AX,STACK

MOV SS,AX

MOV SI,OFFSET ADD1

MOV DI,OFFSET ADD2

MOV BX,OFFSETSUM

MOV CX,COUNT;循环初值为6

CLC

AGAIN:CALLSUBADD;调用子程序

LOOP AGAIN;循环调用6次

MOV AX,4C00H

INT21H

;子程序入口参数:SI,DI,BX出口参数:SI,DI,BX

SUBADD PROC;完成一个字节相加

PUSH AX ;保护AX的值

MOV AL,[SI];SI是一个源操作数指针

ADC AL,[DI];DI是另一个源操作数指针

MOV [BX],AL;BX是结果操作数指针

INCSI

INCDI

INCBX

POPAX ;恢复AX的值

RET

SUBADD ENDP

CODEENDS

ENDMADD

例2把内存中的字变量NUMBER的值,转换为4个ASCII码表示的十六进制数码串,串的起始地址为STRING。

分析:把内存中的字变量NUMBER的值,转换为4个ASCII码表示的十六进制数码串的工作设计成一个子程序,在这个子程序中再调用另一个子程序,由它完成从BCD码到ASCII码的转换。

程序如下:

DATASEGMENT

NUMBER DW25AFH

STRINGDB 4DUP(?),0DH,0AH,‘$’ 

DATAENDS

CODESEGMENT

ASSUME CS:CODE,DS:DATA

BEGIN: MOV AX,DATA

MOV DS,AX

MOV ES,AX

LEA BX,STRING

PUSH BX ;将参数(结果地址指针)压入堆栈

PUSH NUMBER;将源数据压入堆栈

CALL BINHEX ;调用子程序

LEA DI,STRING

MOV AH,9

INT21H

BINHEXPROC 

PUSH BP

MOV BP,SP

PUSH AX

PUSH DI

PUSH CX

PUSH DX

PUSHF;以上为保护现场

MOV AX,[BP+4] ;取出NUMBER

MOV DI,[BP+6];取出STRING的偏移地址

ADD DI,LENGTH STRING-1 ;使DI指向转换数据

MOV DX,AX;保护原始数据

MOV CX,4

AGAIN: AND AX,0FH ;取低4位

CALL HEXD;调子程序

STD

STOSB;保护转换数据

PUSH CX ;保护CX的值

MOV CL,4

SHRDX,CL

MOV AX,DX

POPCX

LOOP AGAIN

POPF

POPDX

POPCX

POPDI

POPAX

POPBP

RET4

BINHEXENDP

HEXDPROC ;将AL中的BCD码转换成ASCII码

CMP AL,0AH

JLADDZ

ADD AL,’a’-‘0’-0AH ;小写字母转换成ASCII码,若为大写

ADDZ: ADD AL,‘0’ ;字母,则再加ADDAL,7

RET

HEXDENDP

CODEENDS

EDN BEGIN

例6.3 数的阶乘 1

按照阶乘的定义 n!=n*(n-1)!

这是一个递归定义式,可采用子程序的的递归调用形式。程序如下:

DATASEGMENT

NUMDB5

FNUMDW?

DATAENDS

STACKSEGMENT

DB 100DUP(?)

STACKENDS

CODESEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

BEGIN: PUSH DS

MOV AX,0

PUSH AX

MOV CX,1

PUSH CX

MOV AH,0

MOV AL,NUM

CALL FACTOR

MOV FNUM,AX

POPCX

MOV AX,4C00H

INT21H

FACTORPROC

CMP AX,0

JNZIIA

MOV DL,1

RET

IIA:PUSH AX

DEC AL

CALL FACT

IIA1:POPCX

MUL CL ;CALLMULT

IIA2:MOV DX,AX

RET

FACTORENDP

CODEENDS

END BEGIN

安防之家专注于各种家居的安防,监控,防盗,安防监控,安防器材,安防设备的新闻资讯和O2O电商导购服务,敬请登陆安防之家:http://anfang.jc68.com/
更多»您可能感兴趣的文章:
更多»有关 监控 的产品:
低价出售发动机故障诊断仪

低价出售发动机故障诊断仪

价格:到店咨询

碳平衡油耗仪厂家直销

碳平衡油耗仪厂家直销

价格:到店咨询

供应逆反射标志测试仪质量好

供应逆反射标志测试仪质量好

价格:到店咨询

浙江砂尘试验机品牌厂家→林频仪器

浙江砂尘试验机品牌厂家→林频仪器

价格:66.00/台

襄阳远程无线监控/襄阳鑫中联安防

襄阳远程无线监控/襄阳鑫中联安防

价格:888.00/件

紫外线老化试验箱雅士林官方网站

紫外线老化试验箱雅士林官方网站

价格:到店咨询

易博仕铝方通吊顶木纹铝方通厂家直销

易博仕铝方通吊顶木纹铝方通厂家直销

价格:7.50/米

易博仕勾搭式垂帘铝挂片吊顶天花

易博仕勾搭式垂帘铝挂片吊顶天花

价格:8.50/米

供应易博仕氟碳铝单板幕墙铝单板厂家直销

供应易博仕氟碳铝单板幕墙铝单板厂家直销

价格:198.00/平方米

供应易博仕氟碳铝单板幕墙铝单板厂家直销

供应易博仕氟碳铝单板幕墙铝单板厂家直销

价格:198.00/平方米

易博仕铝天花吊顶明架跌级铝扣板600*600厂家直销

易博仕铝天花吊顶明架跌级铝扣板600*600厂家直销

价格:38.00/平方米

供应易博仕c型铝条扣 防风铝条扣天花厂家直销

供应易博仕c型铝条扣 防风铝条扣天花厂家直销

价格:38.00/平方米

  • 安防监控资讯
  • 发表评论 | 0评
  • 评论登陆
  • (c)2015-2017 Bybc.cn SYSTEM All Rights Reserved