预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共39页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

本章主要教学内容7.1概述7.1.2子程序的特性7.2子程序调用和返回指令从栈顶弹出一个字数据送入IP7.3子程序的定义、调用和返回2.子程序调用方法说明3.现场保护和现场恢复4.子程序的设计方法子程序定义应用举例7.3.2子程序的调用与返回DATASEGMENT MEQU8 NEQU3 RESDW? DATAENDS CODESEGMENT ASSUMECS:CODE,DS:DATA START:MOVAX,DATA MOVDS,AX MOVCX,N CALLSUB1;调子程序计算n! MOVBX,AX MOVCX,M CALLSUB1;调子程序计算m! DIVBX;m!/n!送AX MOVBX,AX7.4子程序的参数传递方法7.4.1通过寄存器传递参数通过寄存器传递参数应用举例DATASEGMENT BCDBUFDB12H,24H,96H,87H,71H,79H,56H,34H,63H,45H COUNTEQU$-BCDBUF ASCBUFDB20DUP(?) DATAENDS STACKSEGMENTPARASTACK‘STACK’ STAPNDB100DUP(?) TOPEQULENGTHSTAPN STACKENDS CODESEGMENT ASSUMECS:CODE,DS:DATA,SS:STACK START:MOVAX,DATA MOVDS,AX MOVES,AX MOVAX,STACK MOVSS,AX MOVAX,TOP MOVSP,AX MOVSI,OFFSETBCDBUF;BCD码的内存区首地址 MOVDI,OFFSETASCBUF;ASCII码的内存区首地址 MOVCX,COUNT;组合BCD码个数 CLD;DF=0,按地址递增方式 LP:LODSB;取一个组合BCD码 MOVBL,AL;暂存 ANDAL,0FH;屏蔽高4位 ORAL,30H;BCD码低位转换为ASCII码 MOVDL,AL;存入DL【例7-4】将给定的一组字数据X、Y代入Z=((X+Y)×2-X)×4公式中,计算相应的Z值DATASEGMENT XDW5,3,8,9,2,5,3,4,7,1 YDW1,5,7,0,4,3,1,4,8,1 ZDW10DUP(?) DATAENDS CODESEGMENT ASSUMECS:CODE,DS:DATA START:MOVAX,DATA MOVDS,AX LEASI,X LEADI,Y LEABX,Z MOVCX,Y-X SHRCX,1 REAPT:MOVAX,[SI] MOVDX,[DI] CALLSUBR MOV[BX],AX ADDSI,2 ADDDI,27.4.2通过堆栈传递参数通过堆栈传递参数应用举例【例7-6】利用堆栈传递参数,实现对2个已定义数组分别求和7.4.3通过存储单元传递参数通过存储单元传递参数应用举例【例7-8】7.5子程序的嵌套与递归子程序的嵌套应用举例7.5.2子程序的递归调用 7.6子程序设计举例2.输入输出子程序设计(2)输出子程序输入输出子程序应用举例7.6.2代码转换子程序2.二进制数转换成十进制数3.十进制数转换成二进制数7.6.3多位数运算子程序1.多位数乘法子程序MBINMUL3:MOVAL,[DI] INCDI MULDL ADD[BX],AL INCBX ADC[BX],AH LOOPMBINMUL3 POPDI POPBX INCBX POPCX LOOPMBINMUL2 POPCX POPAX POPBX RET MBINMULENDP ;子程序名:MBINDISP。 ;功能:以16进制形式输出乘积。 ;入口参数:SI指向乘积的首地址。 ;出口参数:SI指向乘积的首地址 MBINDISPPROCNEAR PUSHCX PUSHDX PUSHSI MOVCX,2*CNT ADDSI,2*CNT-1 MDISP1:MOVDL,[SI]本章小结