首页 理论教育 子程序的嵌套

子程序的嵌套

时间:2022-02-28 理论教育 版权反馈
【摘要】:某程序调用一个或若干个子程序,称为子程序一般调用。这两种调用形式如图4-17所示。分析 把内存中的字变量NUM的值,转换为4个ASCII码表示的十六进制数码串的工作设计成一个子程序,在这个子程序中再调用另一个子程序,由它完成从BCD码到ASCII码的转换。

4.5.3 子程序的嵌套

某程序调用一个或若干个子程序,称为子程序一般调用。某个程序调用某一子程序,而该子程序又调用另外一个子程序,就称为子程序的嵌套调用。这两种调用形式如图4-17所示。

img92

图4-17 主程序调用方式示意图

【例4-15】 编程实现6字节数相加。

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

DATA SEGMENT

ADD1 DB FEH,86H,7CH,35H,68H,77H

ADD2DB 45H,BCH,7DH,6AH,87H,90H

SUMDB 6DUP(?)

COUNT DB 6

DATA ENDS

STACK SEGMENT

DB 100 DUP(?)

STACK ENDS

CODE SEGMENT

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

START:MOV AX,DATA

MOV DS,AX

MOV AX,STACK

MOV SS,AX

MOV SI,OFFSET ADD1

MOV DI,OFFSET ADD2

MOV BX,OFFSET SUM

MOV CX,COUNT ;循环初值为6

AGAIN:CALLSUB1;调用子程序

LOOP AGAIN;循环调用6次

MOV AH,4CH

INT 21H

;子程序入口参数:SI,DI,BX 出口参数:SI,DI,BX完成一个字节相加SUB1 PROC

PUSH AX;保护AX的值

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

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

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

INC SI;修改指针

INC DI

INC BX

POP AX;恢复AX的值

RET

SUB1 ENDP

CODE ENDS

END START

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

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

STACK SEGMENT

DB 200 DUP(?)

STACK ENDS

DATA SEGMENT

NUM DW 25AFH

STRING DB 4DUP(?),0DH,0AH,′$′

DATA ENDS

CODE SEGMENT

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

START:MOV AX,DATA

MOV DS,AX

MOV AX,STACK

MOV SS,AX

LEA BX,STRING

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

PUSH NUM;将源数据压入堆栈

CALLBINIHEX;调用子程序

LEA DI,STRING

MOV AH,09H

INT 21H

BINIHEX PROC

PUSH BP

MOV BP,SP

PUSH AX

PUSH DI

PUSH CX

PUSH DX

PUSHF;以上为保护现场

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

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

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

MOV DX,AX;保护原始数据

MOV CX,4

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

CALLBCDIASI;调子程序

STD

STOSB;保护转换数据

PUSH CX;保护CX的值

MOV CL,4

SHRDX,CL

MOV AX,DX

POP CX

LOOP AGAIN

POPF

POP DX

POP CX

POP DI

POP AX

POP BP

RET 4

BINHEX ENDP

BCDIASI PROC;将AL中的BCD码转换成ASCII码

CMP AL,′A′:与A的ASCII码比较

JLLP

ADD AL,07H;大于A加30H后还要加7

LP:ADD AL,30H;小于A只加30H

RET

BCDIASI ENDP

CODE ENDSEDN START

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈