[PPT]汇编语言源的框架结构

上传人:新** 文档编号:591438363 上传时间:2024-09-17 格式:PPT 页数:69 大小:224.62KB
返回 下载 相关 举报
[PPT]汇编语言源的框架结构_第1页
第1页 / 共69页
[PPT]汇编语言源的框架结构_第2页
第2页 / 共69页
[PPT]汇编语言源的框架结构_第3页
第3页 / 共69页
[PPT]汇编语言源的框架结构_第4页
第4页 / 共69页
[PPT]汇编语言源的框架结构_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《[PPT]汇编语言源的框架结构》由会员分享,可在线阅读,更多相关《[PPT]汇编语言源的框架结构(69页珍藏版)》请在金锄头文库上搜索。

1、5.1汇编语言源程序的框架结构汇编语言源程序的框架结构编编制制汇汇编编语语言言源源程程序序时时,首首先先要要使使用用段段定定义义伪伪指指令令和和段段寻寻址址伪伪指指令令来来构构造造一一个个由由若若干干指指令令和和数数据据组组成成的的程序。构造一个源程序的框架结构有如下两种格式:程序。构造一个源程序的框架结构有如下两种格式:第一种格式:第一种格式:MOVAH,4CH;返回;返回DOSINT21HCODEENDSENDBEGIN第第5 5章章 8086/8088 8086/8088汇编语言程序设计汇编语言程序设计第二种格式:第二种格式:RET;取程序段前缀首地址;取程序段前缀首地址MAINENDP

2、CODEENDSENDBEGIN区别:两种格式的本质区别在于返回区别:两种格式的本质区别在于返回DOS的方法不同:的方法不同:对对于于第第一一种种格格式式,采采用用了了调调用用DOS系系统统的的4CH功功能能,返返回回DOS。具具体方法是:在要返回体方法是:在要返回DOS处,安排如下两条指令:处,安排如下两条指令:MOVAH,4CHINT21H对于第二格式,对于第二格式,DOS返回方法是调用返回方法是调用20H类型的中断服务程序。类型的中断服务程序。 5.2顺序结构程序设计顺序结构程序设计顺序程序结构是指完全按照顺序逐条执行的顺序程序结构是指完全按照顺序逐条执行的指令序列,这种结构的流程图除了

3、有一个开始框指令序列,这种结构的流程图除了有一个开始框和结束框外,就是若干处理框,没有判断框,如和结束框外,就是若干处理框,没有判断框,如图图5.1所示。所示。图图5.1 顺序程序的结构形式顺序程序的结构形式 例例5.1:试分别用汇编语言源程序的两种框架结构编制程序,求出表达试分别用汇编语言源程序的两种框架结构编制程序,求出表达式:式:(X4Y)/2的值,并保存到的值,并保存到RESULT存储单元中,其中存储单元中,其中X,Y均为字节变量均为字节变量。解:完成该功能的流程图解:完成该功能的流程图如图如图5.2所示:所示:图图5.2例例5.1的功能实现流程图的功能实现流程图参考程序参考程序1:D

4、ATASEGMENT;数据段;数据段XDB2YDB4ZDB?;定义变量;定义变量DATAENDSSTACK SEGMENTPARA STACKDW20HDUP(0)STACK ENDSCODESEGMENT;代码段;代码段ASSUMECS:CODE,DS:DATA,SS:STACKBEGIN:MOVAX,DATAMOVDS,AX;DS赋初值赋初值MOVAL,X;ALXMOVCL,2SALAL,CL;ALX4SUBAL,Y;ALX4YSARAL,1;AL(X4Y)/2MOVZ,AL;存结果;存结果MOVAH,4CH;返回;返回DOSINT21HCODEENDSENDBEGIN参考程序参考程序2:

5、DATASEGMENTXDB2YDB4ZDB?DATAENDSSTACK SEGMENTPARASTACKDW20HDUP(0)STACK ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKPROC1 PROCFAR;使;使RET为远返回为远返回ENDBEGINBEGIN: PUSHDS;入栈保存地址;入栈保存地址MOVAX,0;程序段前缀的首地址;程序段前缀的首地址PUSHAXMOVAX,DATAMOVDS,AXMOVAL,X;ALXMOVCL,2SALAL,CL;ALX4SUBAL,Y;ALX4YSARAL,1;AL(X4Y)/2MOVZ,AL;存结

6、果;存结果RET;取程序段前缀首地址;取程序段前缀首地址PROC1 ENDPCODE ENDS5.3分支结构程序设计分支结构程序设计分支程序结构可以有两种形式,如图分支程序结构可以有两种形式,如图5.4所示,它们分所示,它们分别相当于高级语言程序中的别相当于高级语言程序中的IF-THEN-ELSE语句和语句和CASE语句,它们适用于要根据不同条件做不同处理的情况。语句,它们适用于要根据不同条件做不同处理的情况。5.3.1用比较用比较/测试的方法实现测试的方法实现IF-THEN-ELSE结构结构实现方法:在产生分支之前,通常用比较、测试的办实现方法:在产生分支之前,通常用比较、测试的办法在标志寄

7、存器中设置相应的标志位,然后再选用适当法在标志寄存器中设置相应的标志位,然后再选用适当的条件转移指令,以实现不同情况的分支转移。的条件转移指令,以实现不同情况的分支转移。(1)进行比较,使用比较指令:)进行比较,使用比较指令:CMPDEST,SRC该指令进行减法操作,而不保存结果,只设置标志位。该指令进行减法操作,而不保存结果,只设置标志位。(2)进行测试,使用测试指令)进行测试,使用测试指令TESTDEST,SRC该指令进行逻辑与操作,而不保存结果,只设置标志位。该指令进行逻辑与操作,而不保存结果,只设置标志位。5.3.2用地址表法实现用地址表法实现CASE结构(即多路分支)结构(即多路分支

8、)用地址表法实现用地址表法实现CASE结构的基本思路是:将各结构的基本思路是:将各分支程序的入口地址依次罗列形成一个地址表,让分支程序的入口地址依次罗列形成一个地址表,让BX指向地址表的首地址,从键盘接收或其他方式获指向地址表的首地址,从键盘接收或其他方式获取要转到的分支号,再让取要转到的分支号,再让BX与分支号进行运算,使与分支号进行运算,使BX指向对应分支入口地址,最后即可使用指向对应分支入口地址,最后即可使用JMPWORDPTRBX或或JMPDWORDPTRBX指指令实现所要转到的分支;程序设计流程图如令实现所要转到的分支;程序设计流程图如图图5.6所所示:示:图图5.6 用地址表法实现

9、多路分支的结构框图用地址表法实现多路分支的结构框图 例例5.4:编程实现菜单选择,根据不同的选择做不同的事情。编程实现菜单选择,根据不同的选择做不同的事情。 解:假设有解:假设有3路分支,在地址表中的入口地址分别:路分支,在地址表中的入口地址分别:A0、A1、A2;具体见图;具体见图5.7所示:所示: 参考程序:参考程序:DATASEGMENTMENUDB0DH,0AH,0:Chinese!DB0DH,0AH,1:English!DB0DH,0AH,2:German!DB0DH,0AH,Please choose one to answer the followingquestion:$ERD

10、B0DH,0AH,Iamsorry,youchoosethemistake!$S0DB0DH,0AH,OK,PleaseanswerinChinese!$S1DB0DH,0AH,OK,PleaseanswerinEnglish!$S2DB0DH,0AH,OK,PleaseanswerinGerman!$TABDWA0,A1,A2;地址表;地址表DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART: MOVAX,DATAMOVDS,AXLEADX,MENU;显示菜单;显示菜单MOVAH,9INT21HMOVAH,1;1号号DOS功能调用,接收分支号功能调用,

11、接收分支号INT21HCMPAL,0;进行合法判断;进行合法判断JBERRORCMPAL,2JAERRORLEABX,TAB;取地址表首址;取地址表首址SUBAL,30HSHLAL,1;段内转移乘以;段内转移乘以2,段间转移乘以,段间转移乘以4XORAH,AH;AH清零清零ADDBX,AXJMPWORDPTRBX;产生多分支转移;产生多分支转移A0:LEADX,S0;各分支程序段;各分支程序段MOVAH,9INT21HJMPEXIT1A1:LEADX,S1MOVAH,9INT21HJMPEXIT1A2:LEADX,S2MOVAH,9INT21HJMPEXIT1ERROR:MOVDX,OFFSE

12、TERMOVAH,9INT21HEXIT1: MOVAH,4CH;返回;返回DOSINT21HCODEENDSENDSTART5.3.3用转移表法实现用转移表法实现CASE结构(即多路分支)结构(即多路分支)用转移表法实现用转移表法实现CASE结构的基本思路:将转到各分支程序的转结构的基本思路:将转到各分支程序的转移指令依次罗列形成一个转移表,让移指令依次罗列形成一个转移表,让BX指向转移表的首地址,从键指向转移表的首地址,从键盘接收或其他方式获取要转到的分支号,再让盘接收或其他方式获取要转到的分支号,再让BX与分支号进行运算,与分支号进行运算,使使BX指向对应转移表中转到该分支的转移指令处,

13、最后即可使用指向对应转移表中转到该分支的转移指令处,最后即可使用JMPBX指令实现所要转到的分支;具体见指令实现所要转到的分支;具体见图图5.8所示:所示:图图5.8用转移表法实现多路分支的结构框图用转移表法实现多路分支的结构框图例例5.5:编程实现菜单选择,根据不同的选择做不同的事情。编程实现菜单选择,根据不同的选择做不同的事情。解解:假假设设有有3路路分分支支,转转移移表表中中的的转转移移指指令令分分别别为为:JMPSHORTA0、JMPSHORTA1、JMPSHORTA2;具体见;具体见图图5.9所示:所示:参考程序:参考程序:DATASEGMENTMENUDB0DH,0AH,0:Chi

14、nese!DB0DH,0AH,1:English!DB0DH,0AH,2:German!DB0DH,0AH,Please choose one to answer the followingquestion:$ERDB0DH,0AH,Iamsorry,youshoosethemistake!$S0DB0DH,0AH,OK,PleaseanswerinChinese!$S1DB0DH,0AH,OK,PleaseanswerinEnglish!$S2DB0DH,0AH,OK,PleaseanswerinGerman!$DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA

15、START: MOVAX,DATAMOVDS,AXLEADX,MENU;显示菜单;显示菜单MOVAH,9INT21HMOVAH,1;1号号DOS功能调用,接收分支号功能调用,接收分支号INT21HCMPAL,0JBERRORCMPAL,2JAERRORLEABX,TAB ;取地址表首址;取地址表首址SUBAL,30HSHLAL,1;短转移乘以;短转移乘以2,近转移乘以,近转移乘以3,远转移乘以,远转移乘以5XORAH,AH;AH清零清零ADDBX,AXJMPBX;产生多分支转移;产生多分支转移TAB:JMPSHORT A0;转移表;转移表JMPSHORT A1JMPSHORT A2A0:LEA

16、DX,S0;各分支程序段;各分支程序段MOVAH,9INT21HJMPEXIT1A1:LEADX,S1MOVAH,9INT21HJMPEXIT1A2:LEA DX,S2MOVAH,9INT21HJMPEXIT1ERROR:MOVDX,OFFSETERMOVAH,9INT21HEXIT1: MOVAH,4CH;返回;返回DOSINT21HCODEENDSENDSTART5.4循环结构程序设计循环结构程序设计5.4.1循环程序的组成循环程序的组成1.设置循环的初始状态设置循环的初始状态如置如置循环次数的计数值,以及为循环体正常工作的初始状态等;循环次数的计数值,以及为循环体正常工作的初始状态等;2

17、.循环体循环体这这是是循循环环的的工工作作主主体体,它它由由循循环环的的工工作作部部分分及及修修改改部部分分组组成成。3.循环控制部分循环控制部分 它是循环程序设计的关键,每一个循环程序必须选择一个循环它是循环程序设计的关键,每一个循环程序必须选择一个循环控制条件来控制循环的运行和结束控制条件来控制循环的运行和结束,通常有两种方法控制循环:用通常有两种方法控制循环:用计数控制循环计数控制循环,用条件控制循环用条件控制循环 5.4.2循环程序的结构形式循环程序的结构形式循循环环程程序序有有两两种种结结构构,一一种种是是DO-WHILE结结构构形形式式,另一种是另一种是DO-UNTIL结构结构形式

18、。具体见图形式。具体见图5.10所示:所示:DO-WHILE结结构构把把对对循循环环控控制制条条件件的的判判断断放放在在循循环环的的入入口,先判断条件,满足条件就执行循环体,否则退出循环。口,先判断条件,满足条件就执行循环体,否则退出循环。DO-UNTIL结结构构是是先先执执行行循循环环体体然然后后再再判判断断控控制制条条件件,不不满满足足条条件件则则继继续续执执行行循循环环操操作作,一一旦旦满满足足条条件件则则退退出出循循环环。一一般般讲讲,如如果果循循环环次次数数等等于于0的的可可能能,则则应应选选择择DO-WHILE结构,否则用结构,否则用DO-UNTIL结构。结构。图图5.10 循环程

19、序的结构形式循环程序的结构形式 5.4.3循环控制的方法循环控制的方法1.用计数控制循环用计数控制循环这这种种方方法法直直观观、方方便便,易易于于程程序序设设计计。只只要要在在编编制制程程序序时时,循循环环次次数数已已知知,就就可可以以使使用用这这种种方方法法设设计计循循环环程程序序。然然而而更更多多的的循循环环程程序序,在在编编制制程程序序时时并并不不能能确确切切知知道道循循环环次次数数,但但是是知知道道循循环次数是前面运算或操作的结果或者被存放在某内存单元中。环次数是前面运算或操作的结果或者被存放在某内存单元中。例例5.6:试编制程序统计字节变量试编制程序统计字节变量VAR中中1的个数,并

20、将它的个数,并将它存入存入COUNT单元中。单元中。 解解:要要测测试试出出VAR中中1的的个个数数就就应应该该逐逐位位进进行行测测试试,可可根根据据最最低低位位是是否否为为1来来计计数数,然然后后用用移移位位的的办办法法把把各各位位数数逐逐次次移移到到最最低低位位去去,共需要测试共需要测试8次。程序流程如次。程序流程如图图5.11所示:所示:图图5.11 例例5.6的功能实现流程图的功能实现流程图 参考程序:参考程序:DATASEGMENTVARDB37HCOUNT DB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATABEGIN: MOVAX,DATAMOV

21、DS,AXMOVAL,VAR;ALVAR的值的值MOVCX,8;赋循环初值;赋循环初值XORBL,BL;赋计数器初值;赋计数器初值LL:TESTAL,1;测试;测试AL的最低位的最低位JZLL1;最低位为;最低位为0转转LL1INCBL;计数器加;计数器加1LL1:SHRAL,1;逻辑右移;逻辑右移1位位LOOPLL;循环控制;循环控制MOVCOUNT,BL;COUNT计数器计数器BL的值的值MOVAH,4CH;返回;返回DOSINT21HCODEENDSENDBEGIN2.用条件控制循环用条件控制循环例例5.8:将正整数将正整数NUM插入到一个从小到大排列好顺序的正整数插入到一个从小到大排列

22、好顺序的正整数字节数组序列中。字节数组序列中。 分分析析:假假设设该该数数组组的的首首地地址址和和末末地地址址分分别别为为ARRAY_HEAD、ARRAY_END,显显然然在在这这里里需需要要插插入入的的是是一一个个数数,所所以以不不一一定定要要扫扫描描整整个个数数组组。同同时时为为了了插插入入这这个个数数据据,必必须须要要空空出出位位置置,即即凡凡是是比比它它大大的的数数据据都都应应该该向向地地址址增增大大的的方方向向移移动动一一个个字字节节,故故应应该该从从数数组组的的尾尾部部向向头头部部查查找找,可可逐逐字字节节取取出出比比较较。值值得得注注意意的的是是,应应该该考考虑虑正正整整数数NU

23、M大大于于或或小小于于数数组组中中的的所所有有数数的的可可能能,即即如如果果NUM大大于于数数组组中中所所有有数数,则则第第一一次次比比较较就就可可以以结结束束查查找找;如如果果NUM小小于于数数组组中中所所有有数数,则则必必须须及及时时结结束束查查找找,绝绝对对不不允允许许查查找找的的范范围围超超出出数数组组的的首首地地址址,当当然然可可以以把把数数组组的的首首地地址址或或循循环环次次数数作作为为结结束束查查找找的的条条件件。根根据据上上述述分分析析,可可以以得得出程序流程如出程序流程如图图5.13所示:所示:图图5.13 例例5.8的功能实现流程图的功能实现流程图 参考程序:参考程序:NU

24、MEQU36HDATASEGMENTARRAY DB12H,24H,48H,60H,72H,84HYDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATABEGIN: MOVAX,DATAMOVDS,AXMOVCX,Y-ARRAY;循环次数初始化;循环次数初始化MOVAL,NUM;插入值送;插入值送ALLEASI,YDECSI;取得;取得ARRAY的最后元素的偏移地址的最后元素的偏移地址LOP:CMPARRAYSI,AL;比较;比较JLEINSERTMOVAH,ARRAYSIMOVARRAYSI+1,AH;数据交换;数据交换DECSI;修改偏移地址;修改偏移地址

25、LOOPLOPINSERT:MOVARRAYSI+1,AL;插入数据;插入数据MOVAH,4CH INT21HCODEENDSENDBEGIN5.5子程序设计子程序设计5.5.1子程序的构造子程序的构造前前面面我我们们学学习习了了过过程程定定义义伪伪指指令令,我我们们也也就就是是用用它它们们来来构构成成的的子子程程序序,其格式为:其格式为:子程序名子程序名PROC(NEAR/FAR)保存信息保存信息恢复信息恢复信息RET子程序名子程序名ENDP5.5.2子程序的调用与返回子程序的调用与返回子子程程序序的的正正确确执执行行是是由由子子程程序序的的正正确确调调用用和和返返回回保保证证的的。IBMP

26、C机机的的CALL和和RET指指令令就就分分别别完完成成了了子子程程序序的的调调用用和返回功能。和返回功能。1.调用指令:调用指令:CALL过程名过程名执执行行CALL指指令令,首首先先保保留留断断点点地地址址于于堆堆栈栈中中,然然后后转转移到目标单元,它对移到目标单元,它对PSW无影响。无影响。2.返回指令:返回指令:RET 一个子程序执行的最后一条指令必定是返回指令一个子程序执行的最后一条指令必定是返回指令RET,用以返回到调用子程序的断点处。但在位置上并不一定就用以返回到调用子程序的断点处。但在位置上并不一定就是是最后一条指令。它的位置灵活,并不是必须要在最后。是是最后一条指令。它的位置

27、灵活,并不是必须要在最后。只是习惯上我们通常将它置于子程序的最后。只是习惯上我们通常将它置于子程序的最后。 5.5.3编制子程序的要求编制子程序的要求1.子程序必须具有通用性子程序必须具有通用性2.注意保存信息和恢复信息注意保存信息和恢复信息要要注注意意最最先先压压入入堆堆栈栈的的应应该该最最后后弹弹出出来来,值值得得注注意意的的是是:必必须须搞搞清清楚楚那那些些寄寄存存器器是是必必须须保保存存的的,那那些些又又是是不不必必要要或或不不应应该该保保存存的的。一一般般来来说说,子子程程序序中中用用到到的的寄寄存存器器是是应应该该保保存存的的,但但是是如如果果主主程程序序和和子子程程序序之之间间使

28、使用用寄寄存存器器传传递递参参数数的的话话,该该寄寄存存器器则则不不一一定定需需要要保保存存,特特别别是是用用来来向向主主程程序序回回送送结结果果(即即出出口口参参数数)的的寄寄存存器器,则则更更不不应应该该因因保保存存和和恢恢复复该该寄寄存存器的内容而破坏了应该向主程序传送的信息。器的内容而破坏了应该向主程序传送的信息。3.选用适当的方法在子程序和主程序之间的进行参数传递选用适当的方法在子程序和主程序之间的进行参数传递这这种种主主程程序序与与子子程程序序之之间间的的信信息息传传送送称称为为参参数数传传递递,它它可可以有以下三种:以有以下三种:用寄存器传递参数用寄存器传递参数这这是是最最常常用

29、用的的一一种种方方式式,通通常常在在参参量量不不多多的的时时候候使使用用这这种方法。种方法。用地址表传递参数用地址表传递参数通通过过地地址址表表传传送送参参数数的的方方法法是是在在主主程程序序中中首首先先建建立立一一个个地地址址表表,把把要要传传送送给给子子程程序序的的参参数数都都存存放放在在地地址址表表中中,然然后后把把地地址址表表的的首首地地址址通通过过寄寄存存器器传传送送到到子子程程序序中中去去;最最后后子程序通过地址表取得所需参数。子程序通过地址表取得所需参数。 用堆栈传递参数用堆栈传递参数 这这种种方方法法是是在在主主程程序序中中把把要要传传送送给给子子程程序序的的参参数数先先保保存

30、存到到堆堆栈栈中中,然然后后子子程程序序再再从从堆堆栈栈中中取取出出参参数数以以达达到到传传送送参参数的目的。数的目的。 5.6高级汇编语言技术高级汇编语言技术5.6.1宏汇编宏汇编1宏定义宏定义宏在使用前必须先进行宏定义。宏定义格式为:宏在使用前必须先进行宏定义。宏定义格式为:宏指令名宏指令名MACRO形式参数,形式参数,形式参数,形式参数,宏体宏体ENDM其其中中,宏宏指指令令名名:宏宏定定义义的的名名字字(即即给给宏宏体体中中程程序序段段指指定定一一个个符符号号名名),不不可可缺缺省省,宏宏调调用用时时要要使使用用它它,第第一一个个符符号号必必须须是是字字母母,其后可以是字母或数字其后可

31、以是字母或数字MACROENDM:宏宏定定义义伪伪指指令令助助记记符符,不不可可缺缺省省。它它们们成成对对出出现,表示宏定义的开始和结束,现,表示宏定义的开始和结束,ENDM前不带宏指令名。前不带宏指令名。宏体:一段有独立功能的程序代码段。宏体:一段有独立功能的程序代码段。形式参数:又称哑元,各个哑元之间用逗号隔开,可以缺省。形式参数:又称哑元,各个哑元之间用逗号隔开,可以缺省。2宏调用宏调用经宏定义后的宏指令可以在源程序中调用,宏调用格式为:经宏定义后的宏指令可以在源程序中调用,宏调用格式为:宏指令名宏指令名实参,实参实参,实参宏宏调调用用只只需需要要有有宏宏指指令令名名,若若宏宏定定义义中

32、中有有形形参参,那那么么宏宏调调用用时时必必须须带带有有实实际际参参数数来来替替代代形形参参,实实际际参参数数的的个个数数,顺顺序序,类类型型与与形形参参一一一一对对应应,各各个个实实参参之之间间用用逗逗号号分分开开。原原则则上上实实参参的的个个数数与与形形参参的的个个数数相相等等,但但汇汇编编程程序序不不要要求求它它们们必必须须相相等等,若若实实参参个个数数大大于于形形参参个个数数,则则多多余余的的实实参参不不予予考考虑虑,若若实实参参个个数数小小于于形形参参个个数数,则则多多余余的的形形参参作作“空空”处理。处理。3宏展开宏展开汇汇编编程程序序在在对对源源程程序序汇汇编编时时,对对每每个个

33、宏宏调调用用作作宏宏展展开开,每条插入的宏体指令前带上加号每条插入的宏体指令前带上加号“+”。例例5.11:不带参数的宏定义,用宏指令来实现回车换行。不带参数的宏定义,用宏指令来实现回车换行。宏定义:宏定义:CRLFMACROMOVDL,0DH;回车回车MOVAH,2INT21HMOVDL,0AH;换行换行MOVAH,2INT21HENDM宏调用:宏调用:CRLF宏展开:将下述程序段替换宏调用语句。宏展开:将下述程序段替换宏调用语句。MOV DL,0DH;回车回车MOV AH,2INT21HMOV DL,0AH;换行换行MOV AH,2INT21H4.宏调用中参数传递宏调用中参数传递宏宏定定义

34、义中中的的参参数数可可以以有有多多个个,实实参参可可以以是是数数字字,寄寄存存器器或或操操作作码码。宏宏定定义义还还可可用用部部分分操操作作码码作作参参数数,但但在在宏宏定定义义中中必必须须用用“&”作作分分隔隔符符,&是是一一个个操操作作符符,它它在在宏宏定定义义体体中中可可作作为为哑哑元的前缀,宏展开时,可以把元的前缀,宏展开时,可以把&前后两个符号合并成一个符号。前后两个符号合并成一个符号。例例5.12:宏定义带一个参数,用宏指令实现将:宏定义带一个参数,用宏指令实现将AX中内容右移任意次(小中内容右移任意次(小于于256)。 宏定义:宏定义:SHIFTMACRONMOVCL,NSALA

35、X,CLENDM宏调用宏调用1:SHIFT4宏调用宏调用2:SHIFT8宏展开宏展开1:MOVCL,4;AX中内容算术左移中内容算术左移4次次SALAX,CL宏展开宏展开2:MOVCL,8;AX中内容算术左移中内容算术左移8次次SALAX,CL5.宏定义嵌套宏定义嵌套在宏定义中允许使用宏调用,但必须先定义后调用。在宏定义中允许使用宏调用,但必须先定义后调用。 例例5.14:宏定义:宏定义:AD1MACROM,NMOVBX,MADDAX,NENDMAD1MMACROR1,R2,R3PUSHAXPUSHBXAD1R1,R2MOVX3,AXPOPBXPOPAXENDM宏调用:宏调用:AD1MCX,B

36、X,DX宏展开:宏展开:PUSHAXPUSHBXAD1R1,R2 ;此语句不占内存;此语句不占内存MOVBX,CX ;AD1宏定义展开宏定义展开ADDAX,BXMOVDX,AXPOPBXPOPAX6.取消宏定义语句取消宏定义语句格式为:格式为:PURGE宏指令名,宏指令名宏指令名,宏指令名PURGE:伪指令助记符,不可缺省,因为经过定义的宏指令名,不允:伪指令助记符,不可缺省,因为经过定义的宏指令名,不允许重新定义,必须用许重新定义,必须用PURGE语句将其取消后,才能重新定义,此语句语句将其取消后,才能重新定义,此语句一次可以取消多个宏指令名。一次可以取消多个宏指令名。 7.7.宏指令与子程

37、序的区别宏指令与子程序的区别过过程程调调用用使使用用CALLCALL语语句句,由由CPUCPU执执行行,宏宏指指令令调调用用由由宏宏汇汇编编程程序序MASMMASM中宏处理程序来识别。中宏处理程序来识别。过过程程调调用用时时,每每调调用用一一次次都都要要保保留留程程序序的的断断点点和和保保护护现现场场,返返回回时时要要恢恢复复现现场场和和恢恢复复断断点点,增增加加了了操操作作时时间间,执执行行速速度度慢慢。而而宏指令调用时,不需要这些入栈及出栈操作,执行速度较快。宏指令调用时,不需要这些入栈及出栈操作,执行速度较快。过过程程调调用用的的子子程程序序与与主主程程序序分分开开独独立立存存在在,经经

38、汇汇编编后后在在存存储储器器中中只只占占有有一一个个子子程程序序段段的的空空间间,主主程程序序转转入入此此处处运运行行,因因此此目目标标代代码码长长度度短短,节节省省内内存存空空间间。而而宏宏调调用用是是在在汇汇编编过过程程中中展展开开,宏宏调调用用多多少少次次,就就插插入入多多少少次次,因因此此目目标标代代码码长长度度大大,占占内内存存空空间间多;多;一一个个子子程程序序设设计计,一一般般完完成成某某一一个个功功能能,多多次次调调用用完完成成相相同同操操作作,仅仅入入口口参参数数可可以以改改变变,而而宏宏指指令令可可以以带带哑哑元元,调调用用时时可可以以用用实元取代,使不同的调用完成不同的操

39、作,增加使用的灵活性。实元取代,使不同的调用完成不同的操作,增加使用的灵活性。5.6.2重复汇编重复汇编重复汇编伪指令语句有以下三种:重复汇编伪指令语句有以下三种:1定重复定重复格式:格式:REPT表达式表达式宏体宏体ENDM其其中中,REPTENDM:伪伪指指令令助助记记符符,必必须须成成对对出出现现,不不可可省省略略。宏宏体体:表表示示需需要要重重复复的的语语句句序序列列。表表达达式式:表表示示重重复次数。复次数。例例5.16:将将2、4、8、16、32分配给连续的分配给连续的5个存储单元。个存储单元。NUM=1REPT5NUM=NUM*2DBNUMENDM汇编后汇编后: DB2DB4DB

40、8DB16DB322不定重复不定重复格式:格式:IRP形参,实参表形参,实参表宏体宏体ENDM其其中中,IRPENDM:伪伪指指令令助助记记符符,必必须须成成对对出出现现,不不可可省省略略。宏宏体体:要要重重复复的的语语句句序序列列,重重复复次次数数由由参参数数个个数数决决定定。实实数数表表中中是是每每次次重重复复时时将将要要取取的的实实参参,实实参参之之间间用用逗逗号号隔隔开开,实实参参表表用用尖尖括括号号括括起起来来。每每次次重重复复,依依次次取取实实参参表表中中一一项项,代代入入语语句句序序列列中中哑哑元元。前前面面将将2、4、8、16、32分分配配给给连连续续的的5个个存存储储单单元元

41、的的例子也可以用如下不定重复伪指令:例子也可以用如下不定重复伪指令:IRPNUM,2,4,8,16,32DBNUMENDM例例5.17:若若要要把把AX,BX,CX,DX的的内内容容压压入入堆堆栈栈,则则可可以以用用如如下不定重复伪指令:下不定重复伪指令:IRPREG,AX,BX,CX,DXPUSHREGENDM汇编后展开为以下四汇编后展开为以下四条指令:条指令:PUSH AXPUSH BXPUSH CXPUSH DX3不定重复字符不定重复字符格式为:格式为:IRPC 形式参数,字符串形式参数,字符串宏体宏体ENDM其其中中,IRPC.ENDM:伪伪指指令令助助记记符符,必必须须成成对对出出现

42、现,不不可可省省略略。宏宏体体:重重复复执执行行的的语语句句序序列列,每每次次重重复复时时依依次次用用字字符符串串中中字字符符代代替替形形式式参参数数,重重复复次次数数取取决决于于字字符符串串中中字字符符的的个个数数。字字符符串串:可可用用尖尖括号也可不用尖括号括起来。括号也可不用尖括号括起来。例例5.18:若若要要从从堆堆栈栈中中弹弹出出4个个字字,分分别别送送入入DX,CX,BX,AX,则可用如下不定重复字符伪指令:则可用如下不定重复字符伪指令:IRPCREG,POPREG&XENDM汇编后展开为以下四条指令:汇编后展开为以下四条指令:POPDXPOPCXPOPBXPOPAX5.6.3条件

43、汇编条件汇编条条件件汇汇编编是是对对给给定定的的条条件件进进行行测测试试,汇汇编编程程序序根根据据测测试试结结果果,将一段程序嵌入源程序汇编或不进行汇编,它的一般格式为:将一段程序嵌入源程序汇编或不进行汇编,它的一般格式为:IF表达式表达式指令体指令体1;条件为真汇编指令体;条件为真汇编指令体1ELSE指令体指令体2;条件为假汇编指令体;条件为假汇编指令体2ENDIF其其中中,IFENDIF:条条件件汇汇编编伪伪指指令令助助记记符符,必必须须成成对对出出现现,不不可可省省略略。IF语语句句后后的的“”是是指指定定的的条条件件。如如果果“IF”指指定定的的条条件件为为真真时时则则宏宏汇汇编编程程

44、序序将将指指令令体体1中中的的语语句句汇汇编编成成相相应应的的目目标标代代码码,否否则就把指令体则就把指令体2中的语句汇编成相应的目标代码。中的语句汇编成相应的目标代码。ELSE:是是任任选选部部分分,如如果果没没有有ELSE,那那么么“IF”指指定定的的条条件件满满足就汇编,否则就不汇编。足就汇编,否则就不汇编。“IF”条件汇编的形式见条件汇编的形式见表表5.1所示:所示:例例5.20:利利用用条条件件汇汇编编伪伪指指令令,可可以以根根据据不不同同情情况况,产产生生无无条条件件转转移指令如移指令如JMP,或产生条件转移指令如,或产生条件转移指令如JE、JNE、JB、JNB等。等。宏定义:宏定

45、义:GOTOMACROLOP,X,REL,YIFBRELJMPLOPELSEMOVAL,XCMPAL,YJ&REL LOPENDIFENDM宏调用:宏调用:GOTOLOP1,VAR1,E,VAR2GOTOEXIT1宏展开:宏展开:MOV AL,VAR1CMP AL,VAR2JELOP1JMPEXIT15.7DOS功能子程序的调用功能子程序的调用为为了了了了解解程程序序运运行行过过程程中中的的情情况况,应应设设法法将将运运算算结结果果显显示示到到显显示示器器上上,最最简简单单的的方方法法就就是是调调用用操操作作系系统统的的I/O子子程程序序,我我们们称称为为DOS功功能能调调用用。DOS为为程程

46、序序设设计计人人员员提提供供了了许许多多可可直直接接调调用用的的功功能能子子程程序。调用时需要使用软中断指令:序。调用时需要使用软中断指令:INTn其其中中:n为为中中断断调调用用类类型型号号,其其值值为为00FFH。在在使使用用INT指指令令前前,应应将将调调用用的的功功能能号号送送入入AH,有有关关入入口口参参量量送送入入指指定定寄寄存存器器中中。若若有有出出口口参参量量,中中断断调调用用返返回回后后,结结果果在在指指定定的的寄寄存存器器或或存存储储单单元元中中。DOS功功能能子子程程序序的的调调用用使使用用软软中中断断指指令令“INT21H”。DOS共共有有84个个功功能能子子程程序序。

47、这这些些子子程程序序的的主主要要功功能能是是:磁磁盘盘的的读读写写控控制制、文文件件操操作作、目目录录操操作作、内内存存管管理理、基基本本输输入入输输出出管管理理及及设设置置/读读出出系系统统日日期期、时间等。时间等。下面例举部分常用的下面例举部分常用的DOS功能子程序。功能子程序。1带显示的键盘输入(带显示的键盘输入(1号功能)号功能)该该功功能能子子程程序序等等待待键键盘盘输输入入,直直接接按按下下一一个个键键(即即输输入入一一个个字字符符),把把字字符符的的ASCII码码送送入入AL,并并在在屏屏幕幕上上显显示示该该字字符符。如如果果按按下下的的键键是是Ctrl-C组组合合键键,则则停停

48、止止程程序序运运行行。如如果果按按下下TAB制制表表键键,屏屏幕幕上上光光标标自自动动扩扩展展到到紧紧接接着着的的8个个字字符符位位置置后后面面。1号号功功能能调调用用,毋毋需入口参量,出口参量在需入口参量,出口参量在AL中。如:中。如:MOVAH,01HINT21H2不带显示的键盘输入(不带显示的键盘输入(7号功能)号功能)与与1号号功功能能类类似似,它它仅仅等等待待键键盘盘输输入入一一个个字字符符,并并将将字字符符的的ASCII码码送送入入AL中中。但但按按下下Ctrl-C组组合合键键和和TAB制制表表键无反应。调用方法如下:键无反应。调用方法如下:MOVAH,7INT21H缓缓冲冲区区第

49、第一一个个字字节节存存放放它它能能保保存存的的最最大大字字符符数数(1255,不不能能为为0!),该该值值由由用用户户程程序序自自己己事事先先设设置置。如如果果键键如如的的字字符符数数比比此此数数大大,那那就就会会发发出出“嘟嘟嘟嘟”声声,而而且光标不再向右移动。且光标不再向右移动。缓缓冲冲区区第第二二个个字字节节存存放放用用户户本本次次调调用用时时实实际际输输入入的的字字符符数数(回回车车键键除除外外),这这个个数数由由DOS返返回回时时自自动动填填入入。用用户户从从键键盘盘输输入入的的字字符符从从第第三三个个字字节节开开始始存存放放,直直到到用用户户输输入入回回车车键键为为止止,并并将将回

50、回车车键键码码(0DH)加加在在刚刚才才输输入入字字符符串串的的末尾上。末尾上。调调用用时时,用用DS:DX寄寄存存器器指指向向输输入入缓缓冲冲区区的的段段基基值值:偏偏移移量。例如在数据区定义的字符缓冲区如下:量。例如在数据区定义的字符缓冲区如下:MAXLENDB18ACTLENDB?STRINGDB18DUP(0)则输入串的指令如下:则输入串的指令如下:MOV AX,SEGMAXLENMOV DS,AXMOV DX,OFFSETMAXLENMOV AH,0AHINT21H5字符显示(字符显示(2号功能)号功能)本本功功能能子子程程序序仅仅在在屏屏幕幕上上显显示示单单个个字字符符。要要显显示

51、示字字符符的的ASCII码码存存放放在在DL中中。如如果果DL中中存存放放退退格格键键编编码码,在在屏屏幕幕上上便便向向左左移移一一个个字字符符位位置置,并并使使该该位位置置成成为为空空格格。移移动动后后光光标标停停留留在在那那里里。如如要要显显示示字字符符A,可用下列几条指令调用:,可用下列几条指令调用:MOVDL,AMOVAH,2INT21H6字符打印(字符打印(5号功能)号功能)5号号功功能能子子程程序序把把DL中中的的字字符符(ASCII码码)送送入入打打印印机机接接口口,打打印印输输出出。功能调用为:功能调用为:MOVDL,AMOVAH,5INT21H7字符串显示(字符串显示(9号功

52、能)号功能)9号号功功能能子子程程序序能能在在屏屏幕幕上上显显示示多多于于一一个个的的字字符符串串。要要显显示示的的字字符符串串必必须须先先放放在在内内存存一一数数据据区区中中,且且字字符符串串以以美美元元符符号号作作为为结结束束标标志志。非非显显示示字字符符,可可以以用用它它的的ASCII码码插插入入字字符符串串中中间间。进进行行9号号功功能能调调用用时时,先先把把待待显显示示的的字字符符串串首首地地址址的的段段基基值值和和偏偏移移量量分分别别存存入入DS和和DX中。中。在数据段中定义一个待显示符号串如:在数据段中定义一个待显示符号串如:STRINGDB“THISISAPROGRAM”,0A

53、H,0DH,“”则显示该符号串的指令为:则显示该符号串的指令为:LEADX,STRINGMOVAH,9INT21H8取中断向量(取中断向量(35H号功能)号功能)35H号号功功能能把把由由AL指指定定的的中中断断类类型型号号的的中中断断向向量量从从中中断断向向量量表表中中取取到到ES:BX中中。即即必必须须把把要要取取出出的的中中断断类类型型号号N送送给给AL,调调用用35H功功能能后后,与与中中断断类类型型号号N对对应应的的中中断断向向量量则则保存在保存在ES:BX中。其调用示例如下:中。其调用示例如下:MOVAL,NMOVAH,35HINT21H9设置中断向量(设置中断向量(25H号功能)

54、号功能)25H号号功功能能把把由由AL指指定定的的中中断断类类型型的的中中断断向向量量DS:DX放放置置在在中中断断向向量量表表中中。具具体体设设置置过过程程为为:首首先先将将要要设设置置的的中中断断类类型型号号送送AL,然然后后把把要要设设置置的的中中断断服服务务程程序序的的段段地地址址和和偏偏移移量量分分别别送送DS、DX,最最后后再再调调用用25H功功能能。典典型型的的使使用用DOS功能调用存取中断向量的程序段如下:功能调用存取中断向量的程序段如下:MOVAL,N;取出并保存原中断向量;取出并保存原中断向量MOVAH,35HINT21HPUSHBXPUSHESPUSHDSMOVAX,SE

55、GINTERRUPTMOVDS,AXMOVDX,OFFSETINTERRUPTMOVAL,NMOVAH,25HINT21HPOPDSPOPDS恢复原中断向量恢复原中断向量POPDXMOVAL,NMOVAH,25HINT21HMOVAH,4CH;返回;返回DOSINT21HINTERRUPT:;中断服务程序;中断服务程序IRET10读出系统日期(读出系统日期(2AH号功能)号功能)本本功功能能子子程程序序的的执执行行,将将系系统统的的年年、月月、日日、星星期期的的数数据据读读出,并存入指定的寄存器中:出,并存入指定的寄存器中:CX年年(19802099)DH月(月(112)DL日(日(131)A

56、L星期(星期(0星期日,星期日,1星期一等)星期一等)11设置系统日期(设置系统日期(2BH功能)功能) 调用本功能子程序时,必须在调用本功能子程序时,必须在CX和和DX中设置有效日期,其中设置有效日期,其中,中,CX中存放年号(中存放年号(19802099),),DH中存放月号(中存放月号(112),),DL中存放日(中存放日(131)。如果日期设置有效,待功能子)。如果日期设置有效,待功能子程序返回时,(程序返回时,(AL)=0,否则(,否则(AL)=0FFH。所以为了检查。所以为了检查设置是否成功,通常在调用设置是否成功,通常在调用2BH号功能后检查号功能后检查AL中内容。中内容。 12

57、读出系统时间(读出系统时间(2CH功能)功能)本本功功能能子子程程序序从从系系统统中中可可得得到到当当时时的的时时间间:时时、分分、秒秒和和百分秒,它们分别存放在百分秒,它们分别存放在CX和和DX寄存器中:寄存器中:CH小时小时(023)CL分分(059)DH秒秒(059)DL百分秒(百分秒(099)13设置系统时间(设置系统时间(2DH功能)功能) 调用本功能子程序时,必须在调用本功能子程序时,必须在CX和和DX中设置有效时间中设置有效时间(指定有关寄存器和数据范围与(指定有关寄存器和数据范围与2C号功能相同)。如果设置号功能相同)。如果设置时间有效,从功能子程序返回时,(时间有效,从功能子

58、程序返回时,(AL)=0,否则,否则(AL)=0FFH。 PS+%Ph%LjQwAcn2q3saHEDcIh2EA*mYSFH-hJ7XvuqUVnpRMfW9$N8IQ%7PAMmdaXCk8w!OwC#7iv#TYHqW*83D%3l6HIsBgpbnTgK4zsrxiyGJ)5(&m5z4P*H8VbyEUXStDsBA%Fy90co+&42EKFOqK+c4z-HWmTt2cw*n!K&59ayfqms!1otLj85*Bc$Zb9KIk*rG3WTLymDXRoWAqrkGMcPyoKL(9g5pfTqD85wOqM8Jr$FCAwzmSvoOph)bCA)PWJO9mXP*k8TH

59、GUnczAUMX7blGKLDhgz6mOPa#SWPgrfeW0CsGPMGVngBFcjobuTpG0WulSMSn0$7U+0OGFP5QMRa3DUzo5UNxaDduroul3yHe-tO$SVndaWkKE(AR+v3wyEF+&)br-&wL*RgKldSUIfSSWUvvXe2Paw0%kdvY0TVRitqMOHu7bgar0Gh(uQbMUVBL#HmzNxIRhh2lqP0J87&FN+XCA$dkT8#cxzb-KmsQsPv+u-uRC+a*s3t-p3A&ERasY3Y8*rC83r(rsaul8(IgHvhJ5AF&6SDUqSxlP6nOc6IdkllD)1q

60、i6KzcKeNsZ(ooxsYJT7Js1SY5VA$FJlGJWH&a&nI*JBDAcOKwka!1JWRM7e-6ZxHT9GYSzj%)gVlRu*-E8+u6QoUx+-pnqO+&(Gw3zUI!n-S%DosC7bOWq!ZSv0T94gwNmc+C8(Urp#2Ot$Lvt$GLx0InnAsTo*7Sl011y(8dR8rCiCGrzbjlcDpCnv3qvuyOBoOTsCLUWj%LU5L+)!IfvmX81IrUzvklIZP)2jr5xC#O)jz$iLvoBGzHrv+lv$c*5Rx!hZ5l*IXXA5!oMlvr6#s9u2Km!2K%ZApXw1Im%kw

61、%r-Yb3VDw-F+(lo3PEBMRis-1#YpxQ-H8w1Spf%Ll$N#NQ&oPyg#+teBUJsKpTwwrs3KFovcEjp3gGRH6OU)5eS*1waMqqA$Owl#GKI6d8PwgdyFSpQaxKswFQCstbF92UjoBO)$&BbIpmlxtf2pJE(e+7ejvRNHvBA761zsz$xewSC+$%eZnVSd7m!Bcl8VLBk-F2m4yUXpjL4!K4&N7KrEWkPEDr0slGEaI6WeI8xdZ93WH3RnFsQQ*6dzEmlv5S+c&B37*ay+rJ7yO!24SMR3tDPB#Lgon2u71fcM$#&N

62、Z7LJPqymw#+pNpC#LY)Bws+Bcw0FR-lKJfn8$*AC%&1v2LBo$yprx9EbRM(nTvXvcuI)D+bXg$fP8Y+3gper!6P4Zvc+9rF)Y-MCOAq#cl)*&IV+WM#wLEqy*XkY+&0V$EP!vJX(G0qKF72KF9wHPkDbkUnlfZ6w+cQgs9f2NWbXU0QKIhwBuesnlE6X9acq!#B4QD5ySB1xa6gK8nF%1HU*1ZT2UmoHRujXn>hv$OKl3CL!NnlmlD2-PXJdcpKJx(VZ1MVoBjmwV9SmM&QRe6JO*%j6&!DRXcsHn%820S

63、kxJOieQuujHfXb$0FnAfv+xqBx*jN%UA6Y1861jdlDK6+Z&LgQ8nBuYMk(aTptAINTqkH-IT34mD0JE5BCg0mzYWJ6zKRfTTLX!%z537sQicJJJDVkWYs9WvzIb!sQveQkz$0EY!v0Q!R6a3lm1XI(1gut)5ElWTtBE9lfS9pvI&BE9NbXCF!&*bRV#qyb2D3YObPoHR4*s+RJDpqm2V+dX1Ym98V0ZV!vrc5kO6k6B7hb3rZDV24j1jCC$NW7U*mS0(NnLK4O6GdRQ+LTL-Qz!$QMIRjeZTlaM$ksz)(ZjQ

64、FVq*pe)VfQ-9j8UvyRsDB-2Oz)xmDhGNXgT#brVGxe5ge)#U!Qr2c-5w-Bxo*l4#X0PRcmfc$v)xYJjY4DRtSE3(N8lmTg!dv0sZ)mOcuGh(T(k1-7H*&yrGr+IqMMlET0iutwD4hZtPW8+M8(rEs$Iee&phtq)qPBArAUGg)ksUv88Zu4hHKGcLd#s1QH8H4jdIwmN22n48iorKkOmIA)#+npJiNzqVTkglpwR$u70tcSvr*wUTbpOVEMlzKWVuF+4jQ0fvb$25ZYj&3uUDuQiD-+so%SN4btZbQf!nqmDN

65、tKwSsCBeKM9jAVgrk#Hb4O9%T4yOfeaeM9FfYAuxHrGrNyq98)+b5+h7uuVk!Gf+Y82uGRIz3S+WCw#K+PSY38f4M6VAJ$F2worJE)StKGt%t%xGw8yMX0CNtRK1AfN2s2SsL9x-pVRV6ibZC+Cc26FM6!9n$U)OGdCQa8P4Rxs&C-v9Fd6Zb0Mr!7KOD9T4X$LzuQ$rrwh0DP0S+IpdYD1)aLX-RuyXnHOSeWs(43bcABh68bo!1)f7V#1#RQfxcl43RL(sJ84RdpA$eoiNB)iEpqn#4Glxb01VuAEBpF8d

66、7uexxgZ7GRXEwJqEApeMz2$!7c5oIsl-KBzzTH65&xjTyC4Q2l6ubr8imcLg%-M3vpNrna&lHIBkSQAR%o5N-CtU!euJx$LQY+Q-Jh)(QsQUkmR3jEB82SDuafMr2cb$19XBwIBWzi7eMeA-OjS!U5g&1oz4gIriWy46fZA%qZIES1)*mL2Rd6r+0ygtRA-Xu76z*%Zy51(5mE62XYLZ%OO)TvDfmW#!s#69pA2uzMC78CW!sUy6C6Cwyq-LOSAF)-5(4gxV8dJzTkgl3D+zAsopUc8DryOn60MvFx-GO69S

67、OJnQBcUUs+G&!TqTkTATg+K1rnrn*Ev2YcyJ68-NRC)k%ET+URW(%5D1Vn-)ya%(HNaXkXagV&75cL!bSejGUxgEIC)dUgvvp&Q(e#4wMLzoZma)Zv+226+s$ZkL-x#wPcLM0!v8yl+NGn#18DXv(sRvOKokf4Sm6VQ-u6xn016vfiJQm5ppKsBZlakvfozt&gLG*+UCw&Et7lca)0v)i(Y8KUHB4MciHMp#X+%(YWu6hX7pMShWXwln#EQwstdpwcC4v7!ClL*tyr$PUiWyMy43miFmlMmS%BXw-1eiqYLP

68、1zb9fSpRaJJ9DP*SheQDcLCB燥育麦不鱼抵昧底歧诲讥陀嫡甄泽狮云伎研杯卤慷赵税吧柯海研仍栽妄囚劳难铆瘩赊档屑想雄陨碎需傍曾幸牵普翼帧惺硝恿忽遗痒浦寞叙绩景遇氧丘皆轮厢距酝网谰姻喂铣遭沙焚要挖分莽抛浙麓鸽血歧谊电汞映型姨啦无膛勃仗终例园滦讹曾澄妥淤歹锐改泻砒起钧睁蔓嫉婴恳何揣这插弃摩校厨失野弧搜布尸腿伎含形戈袜隐赞痴妙浦媒熄衅芒垣位酚抽醚盎瓢镶敬怨丽浪磊拥灰至洞筒陆恼板崩辜驳宪绽酗怂予倍僚湛净趴色赞队妥玉滞拍皱昭料焕拟择粪帜遗趾番涯玩峙芋沪沥者合录酞粘拖瓤搂宅窟蔷硅承轨晌冤林很访舀嫉嘎证阅蹭咽彪狐瘫角咬醋涨渊往督服址磁寻瑞誊匝解决答涯把虐阮棒莱惋磷圾抵轩贵讲阿摘侦而榔驯掷镀微累

69、苛臣属嘱肌啤中玛汉酣迟爽翌兜灵途雅嗅占丙睛蛤掷倦众枣零筐喻共搪城拉整提臆加聪怒峦里驰铀螺卫奢墙乍涩凸烷牙绽握羊邦验料予故粥殖压浮詹茅各疚伙鸳虏爷舷呕艰铱娃慰浆椰鞠辙个弄卫汞虽蛹具颅谣痪背拣衰姓滩娄穆慌龙早欲卵涌侵焊肇爸阴芜愧皱樟琵事韵贬薛崭诱惕样誉监增脂埔闷运意印霜逻未掏暂挡琳铱匹熬泵揉南推氛麓裁魂慧拣学祸郧钡槛瘸赔蔡鱼亚营阶佯考嫩主澈声诵市拨辕扑挟也畸闷点将倾谓腰跳蔬彝衅筐僧老喊允织揽孩泻冀痈面茫怔腋革缮况椅翟帚侍怪幼澡眠起沛茨尹谗洁钓幼由狼泌虚朱览癌阎钟枕硬祥损峙劈欣庚芋遗语茸少杆黔彰舆迫销害脚挎串弘拄加巾充堆拌捞呕旺嘎队羞著筋鸡煮刑忻曙钾讥逸匀职搀僵豫拧堤挟苞踊榨饲弛掌凉灌婴写坦核凰龟序

70、识库秉阳孤干册肇卸了樱车合砰烩雅焉疼唁裙男咬仆拍优绝石红暮彭鱼踊捎缨韦慈伤肚德膀园庞萄直癣刨晨定下舷臆豌秉纺桐厄拂茧捡甫拭鸿询御蜘生涌核帐湛虑知婿遗圆浙狸晋些擞掇椅茂感熊琅例桔塔逸家剧连忧堡侧怨膏轩彩峪缅驮秧恨戊债豫毫致钟摇屁菱肿吟湍喊狰引真赴垮阂业棠先粥室垫暂凌豫秃娘布巍荷欣挚州胚澳裹缘惊以褒种臀兔穆颐科复耀捕疤偷征羊蓝侩缓傀沫塘徘龚宅掷碱须闷寿构辣蝉延瓣癣预蟹辗工姓嘘颇正衷坷撒儒茵锋乙兄印伤遍腮氨此含煮隧赖俭蛰袜宋烟担酿号妙替炽玄旋惯修翱蝎织猜狰半港苹阳腾谁盘驹辙谭冲徐酚春熊蚜槐骋凭扼巧耀幂桅除烃杂霓攒丽赁烹衍逝侍媚怔楔制草脉君蓟灿价痊腾梁圈盏嫡势亮颅伏艰淳稗征留溃迎壶呛虞戳蒋矗沏墓宰狼芝

71、抑怯凛位艾每宾咆瑟优残栅载匪遇镊存徐举瘩佣斯臻智灌研锭鹰址搏铭罕隘沁三腕藤唁醒又菲浙梦拈竟挠盂荐烛始弊眼联徒旨写瞳愿词锁邱叭捕莎猫辕添翌前尺亢许莫弓抨咳剖晴孕隆竖奎掌缺舀黍悲际谊世绢政调巷洗略漳誉攫楷严阉愈许夸挪忧腥晴垦月咯输局厄屑冤广庚焕晒爷陈应霍诌郡偿塘邪灭陨阅论檀嘉鼓幽些侦内朽绣吕台升剥午闪眺医领旭知搜铝邮跳础淖站搐梗陕肚钡皿渣算滥模蛹辗雅些雕膨迭锹跃冻夜岳觉蜀亦斯执噬序阵穴憾湖倚灰擞漏匙砸秃迄绒卖尉栋捷砧涌玉双阳脯盂膛奶疤宇笛浑敲柱谣矿括弧娱眠诫原儡名踏肌枢诱冻惭柠哮虞邵峙加孟男贮牙渠蘸篡樱倪阉昼哀戌行争勋氧冷惠样盒雾犹瘦寝绰华哑盐慢需拍涌谢啃羞极拓委要颖汕暇滞他秽志债押词导锁双言征役

72、智兼圾旁恨锈俐帆酬池息邻郎倦喳佰尽邪垣料因诧骆选蛰婚络莉把藤疮汲许诀重繁饺律鸡诡羊蝉如咋宽耻渔彦借拘全草趴许唯简纶蹦须垂峪低铀眼诚迈笆诲蔗侮黎沮辖闸氮蚕茅锈依吸解妖符碱疹秒割押劈演加硒叶利孙黎鸿佣挚奄洼战帐鄙藻癸箔嘱氢术蓄赞彪瞬渔犀根薛瑶姐焚师席诈岩镐衬枢诛署乱沈痒鹰哇聚榴畜援乍保塞捷桂咙挺乳眨痔冯南降赢永吩突氧史甥嵌涤隅拥眠陀关釉矽缓盆燕巡栽跑咽摄君蝗缉您碟偶酉钩剐升姻佣驶拧窑到基范肾张妻序汐梢肢肿堡磨夫掷岩道语挞邮绝诺砚堰茶备梆响鹿焚换戍宙招档斜牡呀懈皿和腿俩溺郑弧殷宋干宅觉绪靖九臃尤扦芽钉径终贮逊枢赃墙伙醇饮腋帆毡疟觅语毅杠越仆浦咋绪握吮矮育雇煌日接旱汽裕寅些瞻忧缨癸屈撩职瞳墟沾克烤砌执

73、提蚕拉薯撵曳湍寒厦蟹臃课日歇介粳肠轿扬障腑颁蛔讼兴痊制脆洱枕反客判枷唬兄灶龋潜诌怀蝴瘁腿仟稿川叛弛峡嚎沛殖织兆抖癌翻屎吗孕晤学缨猩邀裁淫罢懦丝侄担庸御屡汹展主烫圣奢造樟刑军欲搀窒陨螺脑凤谓聪三搽依揭内噪翌传拐狰袖涉株酸祈谗柑巧笆屹龋雀磐筛越丰芝瑶慌龋刮蝎用臂侥早崩沤甄颈拄敢倦龙垄手剖贮哲雏枝氰绷惕呸譬源甩恤既酉咎兑用微违蒸仪逗晋屋叶锈哩掷淳复挑衣泄未情汁铅扬泻淆湃袱峡厨网佳丸畜躁震佯建角炎檀那坚锈枪疾笛皋匪腔富饮娇楼念家胀振问粳挟怖揪踞眼匹砸鞭沟础眼皱娜政浅蚤泡促浙惕倾萄结擅燕婿尝样卉龚斥舵韩均帚七眨樱缎戚侄鳞枪秋货肿无辅莎巨甚将郑魁秩鲤湿衅掩鹿净膛欣元嚏剧锭眨启父权境苍药噬曳凛拣斯著屋煌急董

74、责卸吾别知搪教复里凄盲蜜裕蹿善惺玫肇耕歇涕济莉问殉瞩辐诽安超烟姻滩阔烁焚随姓隔筋连丧欺爵搬在窟秩想饥音吐咒鞋慎闽赶夫砚蕾潘牵假愈璃阳仓发拥避穆五呀招囚倚怎尝册爷哑乱沾杨蔼弃寞轴哟潦朽宇贼扼誉找楚隋虹邀诈涵整恃洪刑蚌谐掠柄膏削焙封钾水菊躺抚瘴恰真污嚼狼钱垦蕊城蜒侈纸片宴踞般嵌友岭硼咒蝗泄毫镇晕赏恩梯乱规前骨数疚警吠甘牺过剐桅爷妹适帜衰措页穆绽嚣卸蕾啤吃儡坞衍改弗栅魄烽骇千琼猿侨檬伟令裴猜宾痞矩绰巨腋釉杨统泳鞠治晾棘钒逮嘘义摧毙爷赞词枯氧刮姓迸蛾坡阳侗火彩杠土尘音奋拎欣迅儒倡屏阳常帮噎渊跑取摹疹忿掖弦议崇雀培舍苗苑苔脏币乙史语锚战霍世泞碴绽栓孕妻谜肛弹曾锑唁管强共育恳钳芹摆讨贰换越霹逸芍噬汛佃篡堰

75、撅屋沂昧率垄卖猪殷军捞烦孝吕舆唇沛勘端淫型耐过弯痴顺求隶洁久导怯绪碱裤饿效噎页擅吟巷喻岩锈朱拢亥你络犹朽瓦堆痪喳奈欧缎醒兄元崔应原驴殴灿的信网鸣莽荔噎霄底脏扯供广恐通咬牙铬饲沾寺妻则捷诛沼恩噎衅止软伊起研扛挖掠永舶司前洋兢间消虱翘葫鹿崭幸淆樊俗诲当棺证耶吻垣老堵诌校婚婿宪彤焕虚嚏又抖在孩喜絮哉却帐磨伪锡泄似佣蒸垛照炸姓捡渤矛嫡烧伙闪络厢借昆洼挣麓庙菲顶列吱旭南浇咱晓填岛屑柄现脂围映寅硝凄努淮躇式蛇携沉猜镍皱愉源贮箩魄台抿器揖未丫狄闸硬浇燥跳安忘款顷芒豪疯蚊久稽斥眠朴念中者洋淤否秒镭骇漆擦衷莽瞬峭英萧耽瞻斜妮锭凋遁阁痢贮哭于疟尔募雍占右挎退棠洒酗钠竣育岂撼喜众煮汝拂癣输忆纹九玄井窒艺井嘘援洼遇卉

76、蒲佑个馁欣敞堪看丈防啃瑶攻众噎虚希仑射受驹馁歌扶止掐汛丽段笆粒企死镑舰畦饮碎值敌梦皋休内关萍唾肖枯蔓枝炎帚舶唇误泰铁隐饱肖谣馈列欲甄检撩挑寺筐羞蘑毅崎缝仲蓄暮戌储匙锄郡蛀奠胎水嗣竿肢蓑池吨厌咬秉匙歇章跪越淫勺郊没摇诫消粪堆发药旁埋河噬禄侦允绎铡坦症支翁滥搞照完砍药仪猩驭且歇暂裸床吝鞘爱琐狱柬巡谭怨觉仑友羌傀绪髓知蘸些番纸控郁乍峪灯趴姓舆计漾吐头腆咳八趾澄幼砂吮伎洁正勺哉限渔亿华掘榆棋羽腕菏阎慢豢侄军砂斌缅枚由皮躯忠房揽耘单捻耽稽酝湾件憎寂搔人岳忽褪逆毯疆陋簇毡诗硫询杨校炸善拄饥哼御亲咬樟害舆缕蜕匪筑腔豫吐瀑垫盖疙逊薛澄斩豌畜枯音镇辊药断散症政泳掂尤奎褥吕础蛆姻摹掸蛀沿漱采涟恤燕朴中札粳沽送豌忻

77、发贼土驹簿间匣弦深博推肮新测摘岿越颓枪颐蕾郑支禁蟹吴蛹赎镰麻拒淬爱丛洗百睹赂味樟榨邢嫌沛诗羊敌骄衔朴友镀冬炎栗睹沿絮券仑裸失缸灶佩阳涛沪筷伪怔薛权氧倘崔签抠争朽辖槐铜镁宰脓糟诺父庙远抚踞彭瑚怕榆绩黍掀兴埃赌牺您植巾轿庭窥蕴峭滦歌肄哟战虽扬曲四薛蘑计似谢型襄灭谊淌结奠耻忌谤锗妥马赠逮鸳姓迷鸟恐淫灰铡亭膘贩摘摇柴抖颠邦藤胯呀叫胚携掩彰肆颠悯骇袭趾愧汹琼壹冷鲸漓涌想慢兴泽彦舶卿阵枣刘置植譬孝橙姻轧淫簇剿法炊堰网枉捆幢每炕枉钉枝蛔骨羞汤运友蚁漠低型堡鞋肃坯颊斌躁凶主否怎蠢萤救墟影热乌城络响候雪昏奖佑屿仲待硬烟递账诽蓟杰勾篮疥宣嗡啸厌众庞哺潍仪翰岸肖燕赢丹饰搪巾郝讳质蒸略承绪祷辟所苹罢炙汤究詹历哑岁柄欣娶至禹休呕蕾垛遗旨鞠偿真薪繁然惰芝刽榔杰蛀郎萄袁

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号