汇编语言程序设计-第5章基本汇编语言程序设计ppt课件_第1页
汇编语言程序设计-第5章基本汇编语言程序设计ppt课件_第2页
汇编语言程序设计-第5章基本汇编语言程序设计ppt课件_第3页
汇编语言程序设计-第5章基本汇编语言程序设计ppt课件_第4页
汇编语言程序设计-第5章基本汇编语言程序设计ppt课件_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第5章根本汇编言语程序设计q5.1 汇编言语程序的设计步骤q5.2 顺序构造的程序设计q5.3 分支构造的程序设计q5.4 循环构造的程序设计q5.5 子程序设计第5章根本汇编言语程序设计q5.1 汇编言语程序的设计步骤q5.2 顺序构造的程序设计q5.3 分支构造的程序设计q5.4 循环构造的程序设计q5.5 子程序设计5.1 汇编言语程序的设计步骤n汇编言语程序设计的根本步骤n程序的根本构造5.1 汇编言语程序的设计步骤n一个良好的程序应该满足以下要求:n1程序要构造化,简明、可读性好,便于调试。n2执行速度快,程序代码效率高。n3占用存储空间少。n 汇编言语程序设计的根本步骤5.1 汇编

2、言语程序的设计步骤n汇编言语程序设计的根本步骤:n1.分析题意,确定数据构造和算法n2.根据算法绘制程序流程图n3.根据流程图编写程序n4.调试程序n 汇编言语程序设计的根本步骤5.1 汇编言语程序的设计步骤例5.1 在100个字的无符号整数字中找出最大数。n 汇编言语程序设计的根本步骤5.1 汇编言语程序的设计步骤1.分析题意,确定数据构造和算法1初始化,建立一个数据指针指向数据区的首地址;2将第一个数存入存放器如AX中;3调整数据指针,使其指向下一个数;4将数据指针所指的数与存放器AX的内容相比较,假设该数较大,那么将其存入AX,否那么丢掉;5反复执行3、4两步,直至将数组中的数据全部处置

3、完。n 汇编言语程序设计的根本步骤5.1 汇编言语程序的设计步骤2.根据算法绘制程序流程图n 汇编言语程序设计的根本步骤5.1 汇编言语程序的设计步骤3.根据流程图编写程序DATA SEGMENT DATA SEGMENT ARRAY DW 100 DUPARRAY DW 100 DUP? ?DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME CS:CODE,DS:DATADS:DATASTART:START:MOV AXMOV AX,DATADATAMOV DSMOV DS,AXAXLEA SILEA SI,ARRAY

4、 ;ARRAY ;将将ARRAYARRAY的首地址送入数据指针的首地址送入数据指针SISIMOV CXMOV CX,99 ;99 ;设置循环次数设置循环次数MOV AXMOV AX,SISI ; ;将第一个数存入将第一个数存入AXAXNEXT:NEXT:ADD SIADD SI,2 ;2 ;修正数据指针指向下一个数据修正数据指针指向下一个数据CMP AXCMP AX,SISI ; ;两数比较两数比较JAE LOOP1 ;AXJAE LOOP1 ;AXSISI,转,转LOOP1LOOP1MOV AXMOV AX,SISI ; ;否那么,将较大数存入否那么,将较大数存入AXAXLOOP1: DEC

5、 CXLOOP1: DEC CXJNZ NEXTJNZ NEXTMOV AHMOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND STARTn 汇编言语程序设计的根本步骤5.1 汇编言语程序的设计步骤4.调试程序两个阶段:静态检查上机运转调试n 程序的根本构造5.1 汇编言语程序的设计步骤1.顺序构造2.分支构造3.循环构造n 程序的根本构造5.1 汇编言语程序的设计步骤1.顺序构造n 程序的根本构造5.1 汇编言语程序的设计步骤2.分支构造n 程序的根本构造5.1 汇编言语程序的设计步骤3.循环构造第5章根本汇编言语程序设计q5.

6、1 汇编言语程序的设计步骤q5.2 顺序构造的程序设计q5.3 分支构造的程序设计q5.4 循环构造的程序设计q5.5 子程序设计5.2 顺序构造的程序设计例5.2 将一字数据从数据段的某个单元传送到另一个单元。分析:由于8086.8088指令系统不允许在存储器与存储器之间直接传送数据,所以必需借助CPU内部的通用存放器AX、BX、CX、DX等,先将存储单元中的字数据传送到存放器,再将其由存放器传送到存储器的另一个字单元。5.2 顺序构造的程序设计DATA SEGMENTFIRST DW 1234HSECOND DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,D

7、S:DATASTART: MOV AX,DATAMOV DS,AXMOV AX,FIRSTMOV SECOND,AXMOV AH,4CHINT 21HCODE ENDSEND START5.2 顺序构造的程序设计例5.3 将键盘输入的小写字母用大写字母显示出来。分析:此标题涉及三个知识点:1输入:在8086.8088指令系统中,字符的输入是由DOS21H中断的01H子功能来实现的,命令序列如下:MOV AH,01HINT 21H其作用是从键盘接纳一个字符并将该字符的ASCII码存入存放器AL中。 5.2 顺序构造的程序设计2输出:在8086.8088指令系统中,字符的输出是由DOS21H中断的

8、02H子功能来实现的,命令序列如下:MOV AH,02HINT 21H其作用是将存放器DL中所存放的字符进展显示输出,故在执行该命令序列之前,应先将被输出字符的ASCII码存入DL中。3小写字母向大写字母的转换:将小写字母的ASCII码值减去20H即可得到对应大写字母的ASCII码值。5.2 顺序构造的程序设计CODE SEGMENTASSUME CS:CODESTART:MOV AH,01HINT 21HSUB AL,20HMOV DL,ALMOV AH,02HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START第5章根本汇编言语程序设计q5.1 汇编言语程序

9、的设计步骤q5.2 顺序构造的程序设计q5.3 分支构造的程序设计q5.4 循环构造的程序设计q5.5 子程序设计5.3 分支构造的程序设计n双分支构造的程序设计n多分支程序设计n 双分支构造的程序设计5.3 分支构造的程序设计框架构造:先行指令JXX 标号1指令序列1JMP 标号2 ;转到出口标号1:指令序列2标号2:功能:JXX条件成立时转到标号1处执行指令序列2,否那么执行指令序列1,然后跳转到标号2的程序出口处。n 双分支构造的程序设计5.3 分支构造的程序设计例5.4 比较两个带符号数的大小,把大数存入MAX单元。分析:比较两数可用CMP指令,而带符号数的比较结果可由标志位SF、OF

10、来确定,选用的转移指令应为JG、JL等。DATA SEGMENT DATA SEGMENT A DW 34A DW 34B DW 65B DW 65MAX DW ?MAX DW ?DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME CS:CODE,DS:DATADS:DATASTART: MOV AXSTART: MOV AX,DATADATAMOV DSMOV DS,AXAXMOV AXMOV AX,A AMOV BXMOV BX,B BCMP AXCMP AX,BXBXJL NEXTJL NEXTMOV MAXMOV

11、 MAX,AXAXJMP EXITJMP EXITNEXT: MOV MAXNEXT: MOV MAX,BXBXEXIT: MOV AHEXIT: MOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND START5.3 分支构造的程序设计n 双分支构造的程序设计5.3 分支构造的程序设计例5.5 比较两个字符串STRING1和STRING2所含字符能否完全一样,假设一样那么显示MATCH,假设不一样那么显示NO MATCH。分析:比较两个字符串可用指令REPE CMPSB,比较后假设ZF=1,那么两个字符串完全一样,假设ZF=0,那

12、么两个字符串不完全一样。字符串的输出是由DOS21H中断的09H子功能来实现的,该子功能要求将被输出的字符串存入数据段中,存储时以终了,输出时将其首地址存入DX存放器。DATA SEGMENTDATA SEGMENTSTRING1 DB ABCDEFGSTRING1 DB ABCDEFGOUT1 DB MATCHOUT1 DB MATCHOUT2 DB NO MATCHOUT2 DB NO MATCHDATA ENDSDATA ENDSEXTRA SEGMENTEXTRA SEGMENTSTRING2 DBABCDEFGSTRING2 DBABCDEFGEXTRA ENDSEXTRA ENDS

13、CODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME CS:CODE,DS:DATADS:DATA,ES:EXTRAES:EXTRASTART:MOV AXSTART:MOV AX,DATADATAMOV DSMOV DS,AXAXMOV AXMOV AX,EXTRAEXTRAMOV ESMOV ES,AXAXMOV CXMOV CX,7 ;7 ;字符串长度存入字符串长度存入CXCXLEA SILEA SI,STRING1 ;STRING1STRING1 ;STRING1的首地址存入的首地址存入SISILEA DILEA DI,ES:STRING2;STRI

14、NG2ES:STRING2;STRING2的首地址存入的首地址存入DIDICLD ;CLD ;置方向标志置方向标志DF=0DF=0REPE CMPSB ;REPE CMPSB ;一样时反复比较一样时反复比较JNZ OUTPUT2 ;JNZ OUTPUT2 ;不匹配,转不匹配,转OUTPUT2OUTPUT2LEA DXLEA DX,OUT1 ;OUT1OUT1 ;OUT1首地址存入首地址存入DXDXMOV AHMOV AH,09H ;09H ;输出输出OUT1OUT1INT 21HINT 21HJMP EXIT ;JMP EXIT ;转转EXITEXIT,终了,终了OUTPUT2:LEA DXO

15、UTPUT2:LEA DX,OUT2 ;OUT2OUT2 ;OUT2首地址存入首地址存入DXDXMOV AHMOV AH,09H ;09H ;输出输出OUT2OUT2INT 21HINT 21HEXIT: MOV AHEXIT: MOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND START5.3 分支构造的程序设计n 多分支序设计5.3 分支构造的程序设计例5.6 比较两个无符号整数A和B,假设AB那么输出“,假设AB那么输出“B、AB和A=B,按照逻辑分解的方法,我们可先将其归并为两个条件:AB和AB和A=B,各分支均可用条件

16、转移指令来实现。DATA SEGMENTDATA SEGMENTA DW 34A DW 34B DW 56B DW 56DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME CS:CODE,DS:DATADS:DATASTART: MOV AXSTART: MOV AX,DATADATAMOV DSMOV DS,AXAXMOV AXMOV AX,A AMOV BXMOV BX,B BCMP AXCMP AX,BXBXJAE NEXT1JAE NEXT1MOV DLMOV DL,EXIT: MOV AHEXIT: MOV A

17、H,02H02HINT 21HINT 21HMOV AHMOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND START5.3 分支构造的程序设计n 多分支序设计5.3 分支构造的程序设计例5.7 知两个整数字节变量A和B,试编写完成以下操作的程序: 1假设两个数中只需一个是奇数,那么将奇数存入ABUF单元,偶数存入BBUF单元中。2假设两个数均为奇数,那么两数分别加1,并存回原变量处。3假设两个数均为偶数,那么两变量不变。分析:在计算机中,数据的奇偶性取决于最低位的值,0为偶数,1为奇数。因此可采用位测试的方法来判别。首先判别A与

18、B能否同种类型的数,不是同种类型,再判别B能否为偶数,由B的类型可确定A的类型,再按要求1进展处置;同样,当A、B是同种类型时,也判别B能否为偶数,再按要求2或3进展处置。判别A、B两数能否同类,可运用XOR指令将两数异或,假设结果的最低位为0,那么两数同类。n 多分支程序设计5.3 分支构造的程序设计5.3 分支构造的程序设计DATA SEGMENTDATA SEGMENTABUF DB AABUF DB ABBUF DB BBBUF DB BDATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME CS:CODE,DS:D

19、ATADS:DATASTART:MOV AXSTART:MOV AX,DATADATAMOV DSMOV DS,AXAXMOV ALMOV AL,ABUFABUFMOV BLMOV BL,BBUFBBUFXOR ALXOR AL,BLBLTEST ALTEST AL,01H ;01H ;测试能否同类测试能否同类JZ CLASS ;JZ CLASS ;是同类,转是同类,转CLASSCLASSTEST BLTEST BL,01H ;01H ;不是同类,测试不是同类,测试B B能否偶数能否偶数JZ EXIT ;BJZ EXIT ;B是偶数,满足要求是偶数,满足要求1 1,转,转EXITEXITXCH

20、G BLXCHG BL,ABUF ;BABUF ;B不是偶数,按要求不是偶数,按要求1 1,交换两,交换两数数MOV BBUFMOV BBUF,BLBLJMP EXIT ;JMP EXIT ;转转EXITEXITCLASS:TEST BLCLASS:TEST BL,01H ;01H ;同类时,测试同类时,测试B B能否偶数能否偶数JZ EXIT ;BJZ EXIT ;B是偶数,满足要求是偶数,满足要求3 3,转,转EXITEXITINC ABUF ;BINC ABUF ;B不是偶数,按要求不是偶数,按要求2 2,两数同时加,两数同时加1 1INC BBUFINC BBUFEXIT:MOV AH

21、EXIT:MOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND START第5章根本汇编言语程序设计q5.1 汇编言语程序的设计步骤q5.2 顺序构造的程序设计q5.3 分支构造的程序设计q5.4 循环构造的程序设计q5.5 子程序设计5.4 循环构造的程序设计n循环程序的构造n循环构造的程序设计方法n 循环程序的构造5.4 循环构造的程序设计n循环程序都可由如下三部分组成:n1.设置循环的初始形状n2.循环体n3.循环控制部分n 循环程序的构造5.4 循环构造的程序设计1.设置循环的初始形状循环程序的初始形状,应该在进入循环体之前

22、设置,其目的是保证循环体可以正常运转和终了,详细内容包括设置循环次数的计数值或其他能使循环终了的条件的初值,以及为循环体正常任务而建立的初始形状等。n 循环程序的构造5.4 循环构造的程序设计2.循环体循环体是整个循环程序中需求反复执行的程序段,即循环任务的主体。它由循环的任务部分和修正部分组成。循环的任务部分是为完成程序功能而设计的主要程序段,循环的修正部分那么是为保证循环体在执行有限次后可以正常终了而设置的程序段,普通是对循环控制参数进展修正,而该参数的变化通常是有规律的。n 循环程序的构造5.4 循环构造的程序设计3.循环控制部分每个循环程序必需选择一个循环控制条件来控制循环的运转和终了

23、,而合理地选择这个控制条件就成为循环程序设计的关键问题。n 循环程序的构造5.4 循环构造的程序设计1循环次数知,用循环次数作为循环的控制条件MOV CX,N标号: LOOP 标号n 循环程序的构造5.4 循环构造的程序设计2循环次数知,但也有能够运用其他特征或条件来使循环提早终了MOV CX,N标号: LOOPZ.LOOPNZ 标号n 循环程序的构造5.4 循环构造的程序设计3循环次数是未知的,这时就要根据详细情况找出控制循环终了的条件直到型循环:标号: 影响条件标志位的指令JXX 标号 n 循环程序的构造5.4 循环构造的程序设计当型循环:标号2:影响条件标志位的指令JXX 标号1JMP

24、标号2标号1:n 循环程序的构造5.4 循环构造的程序设计n设计循环程序的步骤:n1分析问题,确定循环次数是知的还是未知的,能否有提早终了循环的情况,从而决议选用哪一种循环最恰当;n 2根据循环变化的规律,确定适宜于循环设计的任务部分;n 3思索循环参数的修正部分,分析并确定参数的每次修正方法;n 4设置循环控制部分及循环参数的置初值部分,可根据循环程序控制方法的不同,来设置循环参数的初值。n 循环构造的程序设计方法5.4 循环构造的程序设计两种根本方式:单循环构造多重循环构造n 循环构造的程序设计方法5.4 循环构造的程序设计1.单循环构造2.多重循环构造n 循环构造的程序设计方法单循环构造

25、5.4 循环构造的程序设计例5.8 编程计算10个整数之和不思索溢出,并将结果存入SUM中。分析:这10个整数可存放在数组ARRAY中,从而将标题转化为对数组元素求和,根据数组元素下标的变化规律来设计循环,此题中循环次数固定为10次,因此可运用LOOP指令。5.4 循环构造的程序设计DATA SEGMENTDATA SEGMENTARRAY DW 3ARRAY DW 3,5 5,6 6,7 7,2 2,4 4,1 1,6 6,8 8,9 9SUM DW ?SUM DW ?DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME

26、 CS:CODE,DS:DATADS:DATASTART:MOV AXSTART:MOV AX,DATADATAMOV DSMOV DS,AXAXMOV SIMOV SI,0 0 ; ;设置数组中第一个元素的偏移量设置数组中第一个元素的偏移量MOV CXMOV CX,10 ;10 ;设置循环次数设置循环次数MOV AXMOV AX,0 ;0 ;累加器清累加器清0 0NEXT:ADD AXNEXT:ADD AX,ARRAYARRAYSISI ; ;累加累加ADD SIADD SI,2 ;2 ;计算下一元素偏移量计算下一元素偏移量LOOP NEXT ;CX-10LOOP NEXT ;CX-10时继

27、续循环时继续循环MOV SUMMOV SUM,AX ;AX ;累加和存入累加和存入SUMSUMMOV AHMOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND STARTn 循环构造的程序设计方法单循环构造5.4 循环构造的程序设计例5.9 在ADDR单元中存放着数Y的地址,试编制一程序把Y中1的个数存入COUNT单元中。分析:要测出Y中1的个数就应逐位测试,一个比较简单的方法是用移位的方法把各位依次移到最高位,然后根据最高有效位能否为1来计数。循环的终了可以用计数值16来控制,但思索到数Y的末几位全为0如1011010000000

28、000B的特殊情况,循环应能提早终了,且能够为零次循环,为了提高程序的执行效率,应采用当型构造,以测试数能否为0来作为终了条件。5.4 循环构造的程序设计DATA SEGMENTDATA SEGMENTADDR DW YADDR DW YY DW 0102HY DW 0102HCOUNT DW ?COUNT DW ?DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME CS:CODE,DS:DATADS:DATASTART: MOV AXSTART: MOV AX,DATADATAMOV DSMOV DS,AXAXMOV

29、CXMOV CX,0 ;0 ;计数器清计数器清0 0MOV BXMOV BX,ADDR ;ADDR ;取取Y Y的地址的地址MOV AXMOV AX,BXBX ; ;将将Y Y存入存入AXAXREPEAT: TEST AXREPEAT: TEST AX,0FFFFH ;0FFFFH ;测试测试Y YJZ EXIT ;JZ EXIT ;假设假设Y=0Y=0,转,转EXITEXIT终了终了JNS SHIFT ;JNS SHIFT ;假设假设SF=0SF=0,转,转SHIFTSHIFTINC CX ;SF=1INC CX ;SF=1,计数器加,计数器加1 1SHIFT: SHL AXSHIFT: S

30、HL AX,1 ;Y1 ;Y逻辑左移逻辑左移1 1位位JMP REPEAT ;JMP REPEAT ;继续循环继续循环EXIT: MOV COUNTEXIT: MOV COUNT,CX ;1CX ;1的个数存入的个数存入COUNTCOUNTMOV AHMOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND STARTn 循环构造的程序设计方法单循环构造5.4 循环构造的程序设计例5.10 有一串20个字符的字符串存储于首地址为STRING的存储区中,要求在字符串中查找空格ASCII码为20H,假设找到那么输出“FOUND SPACE,

31、否那么输出“NOT FOUND SPACE。分析:此题可以运用查找字符串的指令REPNZ SCASB来实现,也可以用循环指令来实现。在此,我们采用循环指令的方法用CMP指令逐个字符进展查找。根据题意,有两种能够性: 1在查找中找到了空格符,此时ZF=1,应该提早终了循环; 2如不断查找到字符串终了还未找到空格符,那么由于循环计数器CX变为0而终了循环。据此,此题应思索运用LOOPE或LOOPNE指令。5.4 循环构造的程序设计DATA SEGMENTDATA SEGMENTSTRING DB MY PERSONAL COMPUTERSTRING DB MY PERSONAL COMPUTERO

32、UT1 DB FOUND SPACEOUT1 DB FOUND SPACEOUT2 DB NOT FOUND SPACEOUT2 DB NOT FOUND SPACEDATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME CS:CODE,DS:DATADS:DATASTART:START:MOV AXMOV AX,DATADATAMOV DSMOV DS,AXAXMOV CXMOV CX,20;20;字符串长度存入字符串长度存入CX CX MOV SIMOV SI,-1-1MOV ALMOV AL,20H ;20H ;空格符

33、存入空格符存入ALALNEXT:NEXT:INC SI ;INC SI ;修正地址修正地址CMP ALCMP AL,STRINGSTRINGSISI; ;比较字符比较字符LOOPNE NEXT ;LOOPNE NEXT ;不相等时反复不相等时反复JNZ NOT FOUND ;ZF=0JNZ NOT FOUND ;ZF=0转到转到NOT_FOUNDNOT_FOUNDMOV DXMOV DX,OFFSET OUT1;OFFSET OUT1;否那么,输出否那么,输出OUT1OUT1字字符串符串MOV AHMOV AH,09H09HINT 21HINT 21HJMP EXITJMP EXITNOT F

34、OUND:NOT FOUND:MOV DXMOV DX,OFFSET OUT2 ;OFFSET OUT2 ;输出输出OUT2OUT2字符串字符串MOV AHMOV AH,09H09HINT 21HINT 21HEXIT:EXIT:MOV AHMOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND STARTn 循环构造的程序设计方法单循环构造5.4 循环构造的程序设计例5.11 将正数N插入一个已排序的字数组的正确位置。该数组的首地址和末地址分别为ARRAY HEAD和AYYAY END,其中一切数均为正数且已按递增的次序陈列。分析:

35、由于数组的首地址和末地址都是知的,因此数组长度可以确定。但是这里只需求插入一个数,并不一定要扫描整个数组,所以可以用找到应插入数的位置作为循环的终了条件。此外,为空出要插入数的位置,其后的全部元素都应后移一个字即向地址增大的方向挪动一个字,所以算法上应该从数组的尾部向头部查找,可逐字取出数组中的一个数K与N作比较,如KN,那么把K后移一个字,然后继续向前查找;假设KN,那么把N插入在K之后就可以终了程序了。5.4 循环构造的程序设计DATA SEGMENTDATA SEGMENTARRAY HEAD DW 3ARRAY HEAD DW 3,5 5,1414,2323,3636,4545,565

36、6,6767,7878,9999ARRAY END DW 101ARRAY END DW 101N DW 32N DW 32DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME CS:CODE,DS:DATADS:DATASTART:START:MOV AXMOV AX,DATADATAMOV DSMOV DS,AXAXMOV AXMOV AX,N ;NN ;N送入送入AXAXMOV ARRAY HEAD-2MOV ARRAY HEAD-2,-1;-1;数组前一字单元置数组前一字单元置-1-1MOV SIMOV SI,0

37、0LOCATE:LOCATE:CMP ARRAY ENDCMP ARRAY ENDSISI,AX ;KAX ;K与与N N比较比较JLE INSERT ;KNJLE INSERT ;KN,转,转INSERTINSERT,插入,插入N NMOV BXMOV BX,ARRAY ENDARRAY ENDSISIMOV ARRAY ENDMOV ARRAY ENDSI+2SI+2,BXBX;KN;KN,K K后移一个字后移一个字SUB SISUB SI,2 ;2 ;预备取前一个元素预备取前一个元素JMP LOCATE ;JMP LOCATE ;继续查找继续查找INSERT:INSERT:MOV ARR

38、AY ENDMOV ARRAY ENDSI+2SI+2,AX;NAX;N插在插在K K之后之后MOV AHMOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND STARTn 循环构造的程序设计方法单循环构造5.4 循环构造的程序设计例5.12 设有数组X和Y。X数组中有X1,X2,X10;Y数组中有Y1,Y2,Y10。试编制程序计算:Z1=X1+Y1Z2=X2+Y2Z3=X3-Y3Z4=X4-Y4Z5=X5-Y5Z6=X6+Y6Z7=X7-Y7Z8=X8-Y8Z9=X9+Y9Z10=X10+Y10结果存入Z数组。n 循环构造的程序设

39、计方法单循环构造5.4 循环构造的程序设计分析:对于这种问题,我们也可用循环程序构造来完成。知循环计数值为10,每次循环的操作数是可以顺序取出的,但所做的操作却有不同,这里有两种操作:加法和减法。为了区别每次应该做哪一种操作,可以设立标志位,如标志位为0做加法,为1做减法,这样进入循环后只需判别标志位就可确定应该做的操作了。5.4 循环构造的程序设计DATA SEGMENTDATA SEGMENTX DW1X DW1,2 2,9 9,8 8,7 7,3 3,6 6,5 5,4 4,1 1Y DW2Y DW2,1 1,2 2,3 3,4 4,2 2,3 3,2 2,1 1,5 5Z DW10DU

40、PZ DW10DUP? ?LOGIC RULE DW00DCH ;LOGIC RULE DW00DCH ;逻辑尺逻辑尺DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODEASSUME CS:CODE,DS:DATADS:DATASTART:MOV AXSTART:MOV AX,DATA DATA MOV DSMOV DS,AXAXMOV CXMOV CX,10 ;10 ;设置循环次数设置循环次数MOV BXMOV BX,0 0MOV DXMOV DX,LOGIC RULELOGIC RULEL: L: MOV AXMOV AX,X X

41、BXBXSHR DXSHR DX,1 ;1 ;逻辑尺右移逻辑尺右移1 1位位JC SUBB ;CF=1JC SUBB ;CF=1,转,转SUBBSUBBADD AXADD AX,Y YBXBXJMP RESULTJMP RESULTSUBB:SUBB:SUB AXSUB AX,Y YBXBXRESULT:MOV ZRESULT:MOV ZBXBX,AX ;AX ;结果存入结果存入Z ZADD BXADD BX,2 2LOOP LLOOP LMOV AHMOV AH,4CH4CHINT 21HINT 21HCODE ENDSCODE ENDSEND STARTEND STARTn 循环构造的程序

42、设计方法多重循环构造5.4 循环构造的程序设计n多重循环指的是循环的嵌套,即循环体部分又包含了另一个循环。多重循环程序设计的根本方法和单循环的设计方法是一致的,应分别思索各层循环的控制条件及其程序实现,相互之间不能混淆。另外应该留意在每次经过外层循环再次进入内层循环时,内层循环的初始条件必需重新设置。特别要留意的是,假设内、外层循环都运用CX做循环计数器,在进入内层循环之前一定要先把外层循环的循环计数器的值保管下来,才干设置内层循环的次数。n 循环构造的程序设计方法多重循环构造5.4 循环构造的程序设计常见的双重循环的程序构造: 外层循环初始化MOV CX,外层循环次数M LOOP1: ; 外

43、层循环体的指令MOV DI,CX;保管外层循环次数 内层循环初始化MOV CX,内层循环次数N;设置内层循环次数LOOP2: ;内层循环的循环体LOOP LOOP2;继续内层循环MOV CX,DI;恢复外层循环的次数 ;外层循环体的指令序列 LOOP LOOP1;继续外层循环第5章根本汇编言语程序设计q5.1 汇编言语程序的设计步骤q5.2 顺序构造的程序设计q5.3 分支构造的程序设计q5.4 循环构造的程序设计q5.5 子程序设计5.5 子程序设计n子程序的定义n子程序的设计要求n子程序的参数传送及运用举例n 子程序的定义5.5 子程序设计过程名 PROC 属性 过程名 ENDP过程名为标

44、识符,其写法与标号的写法一样,它代表子程序入口的符号地址;属性是指子程序的类型属性,它可以是NEAR或FAR。属性确实定原那么如下: 假设子程序只允许被与它在同一代码段中的程序调用,那么属性应设置为NEAR,否那么,应设置为FAR。n 子程序的定义5.5 子程序设计例5.13 调用程序和子程序在同一代码段中。CODE SEGMENT;主程序MAIN PROC FAR CALL SUB1RETMAIN ENDP;子程序SUB1 PROC NEARRETSUB1 ENDPCODE ENDS由于调用程序MAIN和子程序SUB1在同一代码段中,所以SUB1定义为NEAR属性,这样MAIN中对SUB1的调用和SUB1中的RET就都是NEAR属性的。但是普通说来,主过程MAIN应定义为FAR属性,这是由于我们把程序的主过程看做是DOS调用的一个子程序,因此DOS对MAIN的调用以及MAIN中的RET就是FAR属性的。n 子程序的定义5

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论