《第五章汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《第五章汇编语言程序设计.ppt(92页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第5 5章章 汇编语言程序设计汇编语言程序设计汇编语言程序的步骤:汇编语言程序的步骤:(1)明确任务,确定算法。)明确任务,确定算法。(2)绘流程图。)绘流程图。(3)根据流程图编写汇编语言程序。)根据流程图编写汇编语言程序。(4)上机调试程序。)上机调试程序。或或或或起始框起始框执行框执行框判断框判断框终止框终止框连接框连接框图图5.1 5.1 标准流程图符号标准流程图符号5.1 5.1 汇编语言程序的上机过程汇编语言程序的上机过程1 1、源文件的建立和汇编、源文件的建立和汇编(1)(1)建立源程序文件建立源程序文件(2)(2)汇编源程序文件汇编源程序文件汇编程序主要功能:汇编程序主要功能
2、:检查源程序中的语法错误并给出出错信息。检查源程序中的语法错误并给出出错信息。产生目标文件,列表文件和对照文件。产生目标文件,列表文件和对照文件。展开宏指令。展开宏指令。汇编操作过程:汇编操作过程:设设在在当当前前C C盘盘上上已已经经建建立立了了一一个个扩扩展展名名为为ASMASM的的源源程程序序文文件件MYASMMYASM,汇编时发出如下命令:汇编时发出如下命令:C C:MASM MYASM MASM MYASM (或(或MASM MYASM.ASM MASM MYASM.ASM)具体的三个输入提示行显示如下:具体的三个输入提示行显示如下:Object Filename Object Fi
3、lename MYASM.OBJMYASM.OBJ:Source Listing NUL.LSTSource Listing NUL.LST:(:(可打入源文件名或省略)可打入源文件名或省略)Cross Reference NUL.CRFCross Reference NUL.CRF:(:(可打入源文件名或省略)可打入源文件名或省略)汇编程序对源文件进行汇编,若无错误信息则显示如下结果:汇编程序对源文件进行汇编,若无错误信息则显示如下结果:0 Warning Errors0 Warning Errors 0 Severe Errors 0 Severe Errors2.2.目标文件的链接目标文
4、件的链接连接软件连接软件LINKLINK的功能:的功能:1)1)找到要连接的所有目标文件;找到要连接的所有目标文件;2)2)确定所有段的地址值;确定所有段的地址值;3)3)确定所有浮动地址和外部符号所对应的存储地址;确定所有浮动地址和外部符号所对应的存储地址;4)4)生成生成.EXE.EXE可执行文件。可执行文件。连接软件为连接软件为 LINK.EXELINK.EXE,其过程如下:其过程如下:设设源源文文件件MYASM.ASMMYASM.ASM已已经经由由汇汇编编软软件件汇汇编编后后生生成成MYASM.OBJMYASM.OBJ,其其连连接命令为:接命令为:C C:LINK MYASM LINK
5、 MYASM 或或 LINK MYASM.OBJLINK MYASM.OBJ 则则在在屏屏幕幕上上显显示示连连接接软软件件的的版版本本号号和和三三个个输输入入提提示示行行,三三个输入提示行显示如下:个输入提示行显示如下:Run File MYASM.EXERun File MYASM.EXE:List File NUL.MAPList File NUL.MAP:Libraries.LIBLibraries.LIB:3.3.执行文件的调试执行文件的调试 5.2 5.2 顺序结构程序设计顺序结构程序设计 语句语句1 1语句语句2 2语句语句3 3图图5.2 5.2 顺序结构流程顺序结构流程开始开始
6、结束结束例例 5.1 5.1 用用 8086CPU8086CPU的的 指指 令令 实实 现现 两两 个个 3232位位 无无 符符 号号 数数 乘乘 法法 的的 程程 序序 设设 计。计。1 1)明确任务,确定算法。)明确任务,确定算法。2 2)绘流程图(图)绘流程图(图5.35.3)设置地址指针设置地址指针AXAX被乘数的低被乘数的低1616位位B BSISI乘数的低乘数的低1616位位D D部分积部分积1=BD1=BD部分积部分积1 1存入缓冲区存入缓冲区AXAX被乘数的高被乘数的高1616位位A A部分积部分积2=AD2=AD部分积部分积1 1的高的高1616位位部分积部分积2 2的低的
7、低1616位位进位加至部分积进位加至部分积2 2的高的高1616位位结果存入缓冲区结果存入缓冲区部分积部分积3=BC3=BC与前面结果的对与前面结果的对应应1616位相加位相加保存进位保存进位部分积部分积4=AC4=AC恢复进位恢复进位部分积部分积4 4与前面的和相加与前面的和相加保存结果到缓冲区保存结果到缓冲区DIDI乘数的高乘数的高1616位位C C1 11 1结束结束开始开始图图5.3 5.3 例例5.15.1流程图流程图3 3)根据流程图编写汇编语言程序)根据流程图编写汇编语言程序1 NAME 32 BIT MULTIPLY1 NAME 32 BIT MULTIPLY2 DATA2 D
8、ATA SEGMENTSEGMENT3 MULNUN DW 00003 MULNUN DW 0000,0FFFFH0FFFFH,00000000,4 4 0FFFH 0FFFH,4 DUP4 DUP(?)(?)5 DATA5 DATA ENDS ENDS6 STACK SEGMENT PARA STACKSTACK 6 STACK SEGMENT PARA STACKSTACK 7 DB 100 DUP7 DB 100 DUP(?)(?)8 STACK ENDS8 STACK ENDS9 CODE9 CODE SEGMENT SEGMENT1010 ASSRME CS ASSRME CS:CO
9、DECODE,DSDS:DATADATA,11 SS11 SS:STACKSTACK,ESES:DATADATA12 MAIN PROC FAR12 MAIN PROC FAR13 START13 START:PUSH DSPUSH DS14 14 MOVMOVAXAX,0 015 15 PUSHPUSHAXAX1616 MOV MOVAXAX,DATADATA17 17 MOVMOVDSDS,AX AX1818 MOV MOVESES,AX AX19 19 LEALEABXBX,MULNUM MULNUM20 MULU3220 MULU32:MOVMOVAXAX,BXBX2121 MOV M
10、OVSISI,BX+4BX+422 22 MOVMOVDIDI,BX+6BX+623 23 MULMULSISI24 24 MOV BX+8MOV BX+8,AXAX25 25 MOVMOVBX+0AHBX+0AH,DXDX26 26 MOV MOVAXAX,BX+2BX+227 27 MULMULSISI2828 ADD ADDAXAX,BX+0AHBX+0AH2929 ADC ADCDXDX,0 030 30 MOVMOVBX+0AHBX+0AH,AXAX3131 MOV MOVBX+0CHBX+0CH,DXDX3232 MOV MOVAXAX,BXBX3333 MUL MULDIDI34
11、34 ADD ADDAXAX,BX+0AH BX+0AH 3535 ADC ADCDXDX,BX+0CHBX+0CH3636 MOV MOVBX+0AHBX+0AH,AXAX37 MOV37 MOVBX+0CHBX+0CH,DXDX3838 PUSHF PUSHF3939 MOV MOVAXAX,BX+2BX+24040 MUL MULDI DI 4141 POPF POPF4242 ADC ADCAXAX,BX+0CHBX+0CH4343 ADC ADCDXDX,0 04444 MOV MOVBX+0CHBX+0CH,AXAX4545 MOV MOVBX+0EHBX+0EH,DXDX4646
12、 RET RET47 MAIN47 MAIN ENDP ENDP48 CODE48 CODE ENDS ENDS49 END49 ENDSTART START 例例5.2 5.2 用查表的方法将一位十六进制数转换成与它相应的用查表的方法将一位十六进制数转换成与它相应的 ASCASC码。码。1 1)明确任务,确定算法。)明确任务,确定算法。2 2)绘流程图(图)绘流程图(图5-45-4)SISI表起始地址表起始地址AH0AH0ALHEXALHEX计算表地址计算表地址SISISISIAXAXALSIALSIASCIALASCIAL开始开始结束结束图图5.4 5.4 例例5.25.2流程流程3 3)
13、根据流程图编写汇编语言程序)根据流程图编写汇编语言程序DATADATA SEGMENT SEGMENTTABLE DB 30HTABLE DB 30H,31H31H,32H32H,33H33H,34H34H,35H35H,36H36H,37H37H DB 38H DB 38H,39H39H,41H41H,42H42H,43H43H,44H44H,45H45H,46H46HHEX DB HEX DB?ASCI DB ASCI DB?DATA ENDSDATA ENDSTACK1 SEGMENT PARA STACKTACK1 SEGMENT PARA STACK DW 20H DUP DW 20
14、H DUP(0 0)TOP LABEL WORDTOP LABEL WORDSTACK1 ENDSSTACK1 ENDSCOSEG SEGMENTCOSEG SEGMENT ASSUME CS ASSUME CS:COSEGCOSEG,DSDS:DATADATA,SSSS:STACK1STACK1BEINGBEING:MOV AXMOV AX,DATADATA MOV DS MOV DS,AXAX MOV AXMOV AX,STACK1STACK1 MOV SS MOV SS,AXAX MOV SP MOV SP,OFFSET TOP OFFSET TOP MOV SI MOV SI,OFFS
15、ET TABLEOFFSET TABLE MOV AH MOV AH,0 0 MOV AL MOV AL,HEXHEX ADD SI ADD SI,AXAX MOV AL MOV AL,SISI MOV ASCI MOV ASCI,ALAL MOV AH MOV AH,4CH4CH INT 21H INT 21HCOSEG ENDSCOSEG ENDS END BEING END BEING 5.3 5.3 分支结构程序设计分支结构程序设计 判定条件判定条件S S1 1S S2 2S S1 1判定条件判定条件S S2 2S Sn n(a a)二分支结构二分支结构(b b)多分支结构多分支结构(
16、b b)(a a)图图5.5 5.5 分支程序的结构形式分支程序的结构形式5.3.1 5.3.1 二分支结构二分支结构 例例5.3 5.3 在在长长度度小小于于256256的的字字符符串串中中分分别别统统计计数数字字、字字母母和和其其 它字符的个数。它字符的个数。1 1)明确任务,确定算法。)明确任务,确定算法。2 2)绘流程图)绘流程图N N结束结束开始开始SIBUFSIBUF首址首址CHSICHSICLCHCLCHBX0BX0SISI+1SISI+1AHSIAHSIAH30HAH39HAH39H?AH41HAH5AHAH5AH?CH=0CH=0?BHBH+1BHBH+1BLBL+1BLBL
17、+1SISI+1SISI+1CHCHCHCH1 11 11 12 22 23 33 3SISI存储区首址存储区首址SIBHSIBHSI+1BLSI+1BLCLCLCLCLBHBHCLCLCLCLBLBLSI+2CLSI+2CLY YY YY YY YY YN NN NN NN N图图5.6 5.6 例例5.35.3流程图流程图3 3)根据流程图编写汇编语言程序)根据流程图编写汇编语言程序DATA SEGMENTDATA SEGMENTBUF DB NBUF DB N DB 07HDB 07H,2AH2AH,47H47H,6AH6AH,96H96HNUM DB 3 DUP(NUM DB 3 DU
18、P(?)DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTMAIN PROC FARMAIN PROC FAR ASSUME CSASSUME CS:CODECODE,DSDS:DATADATASTARTSTART:PUSH DSPUSH DS SUB AXSUB AX,AXAX PUSH AXPUSH AX MOV AXMOV AX,DATADATA MOV DSMOV DS,AXAX MOV SIMOV SI,OFFSET BUFOFFSET BUF MOV CHMOV CH,SISIMOV CLMOV CL,CHCHMOV BXMOV BX,0 0INC
19、 SIINC SILP:MOV AHLP:MOV AH,SI SICMP AHCMP AH,30H30HJL NEXTJL NEXTCMP AHCMP AH,39H39HJG ABCJG ABCINC BHINC BHJMP NEXTJMP NEXTABCABC:CMP AHCMP AH,41H41HJL NEXTJL NEXTCMP AHCMP AH,5AH5AHJG NEXTJG NEXTINC BL INC BL NEXTNEXT:INC SIINC SI DEC CH DEC CH JNZ LPJNZ LP MOV SIMOV SI,OFFSET NUMOFFSET NUM MOV S
20、IMOV SI,BHBH MOV SI+1MOV SI+1,BLBL SUB CLSUB CL,BHBH SUB CLSUB CL,BLBL MOV SI+2MOV SI+2,CLCL RETRETMAIN ENDPMAIN ENDPCODE ENDSCODE ENDSEND STARTEND START 例例5.4 求补码数的绝对值。求补码数的绝对值。1)明确任务,确定算法。)明确任务,确定算法。2)绘流程图(图)绘流程图(图5-7)N NAXXADRAXXADRAXAX求补求补XADRAXXADRAX开始开始结束结束图图5.7 5.7 例例5.45.4流程图流程图AX=0AX=0?Y Y3
21、)根据流程图编写汇编语言程序)根据流程图编写汇编语言程序STACK SEGMENT STACKSTACK SEGMENT STACK DW 300 DUP DW 300 DUP(?)(?)TOP LABEL WORDTOP LABEL WORDSTACK ENDS STACK ENDS DATA SEGMENTDATA SEGMENTXADR DW XADR DW?DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTMAIN MAIN PROC FARPROC FAR ASSUME CS ASSUME CS:CODECODE,DSDS:DATADATA,SSSS
22、:STACKSTACK MOV AX MOV AX,STACKSTACK MOV SS MOV SS,AXAX MOV SP MOV SP,OFFSET TOPOFFSET TOPSTARTSTART:PUSH DSPUSH DS MOV AX MOV AX,0 0 PUSH AX PUSH AX MOV AX MOV AX,DATADATA MOV DS MOV DS,AXAX MOV AX MOV AX,XADRXADR AND AX AND AX,AX AX JNS DONE JNS DONE NEG AX NEG AX MOV XADR MOV XADR,AXAXDONEDONE:RE
23、T RET MAIN ENDP MAIN ENDPCODE ENDSCODE ENDS END START END START 5.3.2 5.3.2 多分支结构多分支结构1.1.条件逐次测试法条件逐次测试法例例5.5 5.5 编编程程实实现现使使键键盘盘上上A A、B B、F F六六个个字字母母键键成成为为6 6个个输输 入命令,使之分别对应入命令,使之分别对应6 6个具有不同算法的控制子程序。个具有不同算法的控制子程序。1 1)明确任务,确定算法。)明确任务,确定算法。2 2)绘流程图(图)绘流程图(图5-85-8)Y YY YY YY YY YALAL键盘输入键盘输入转向转向PAPA入口
24、入口AL=AAL=A?AL=BAL=B?AL=CAL=C?AL=DAL=D?AL=EAL=E?转向转向PBPB入口入口转向转向PCPC入口入口转向转向PDPD入口入口转向转向PEPE入口入口N NN NN NN NN N转向转向PFPF入口入口AL=FAL=F?Y YN N图图5.8 5.8 例例5.55.5流程图流程图3 3)根据流程图编写汇编语言程序)根据流程图编写汇编语言程序 MOV AHMOV AH,l l INT 21H INT 21H CMP AL CMP AL,AA JE PA JE PA CMP AL CMP AL,BB JE PB JE PB CMP AL CMP AL,FF
25、 JE PF JE PF HLT HLT PA PA:PBPB:PFPF:2.2.列表跳转法列表跳转法(1)(1)根据表内地址跳转法根据表内地址跳转法例例5.6 5.6 利用表内地址跳转法来实现例利用表内地址跳转法来实现例5.55.5的要求的要求 1 1)明确任务,确定算法)明确任务,确定算法。数据段数据段PAPAPBPBPFPFBASEBASEBASE+2BASE+2代码段代码段操作码操作码操作码操作码PAPAPBPBPAPA为为首首址址的程序段的程序段PBPB为为首首址址的程序段的程序段图图5.9 5.9 地址跳转表地址跳转表2 2)绘流程图(图)绘流程图(图5-105-10)Y YN N
26、N N结束结束开始开始ALAL键盘输入字符键盘输入字符AL41HAL46HAL46H?ALALALAL41H41HBXBX取地址跳转表首址取地址跳转表首址AH0AH0ALAL计算表内地址计算表内地址计算表地址计算表地址BXBXBXBXAXAX根据地址转向相应分支根据地址转向相应分支Y Y图图5.10 5.10 流程图流程图3)根据流程图编写汇编语言程序)根据流程图编写汇编语言程序ADATA SEGMENTADATA SEGMENTBASE DW PABASE DW PA,PBPB,PCPC,PDPD,PEPE,PFPFKEY DB KEY DB?ADATA ENDSADATA ENDSASTA
27、CK SEGMENT PARA STACK STACKASTACK SEGMENT PARA STACK STACK DW 100 DUP DW 100 DUP(?)(?)TOP LABEL WORDTOP LABEL WORDASTACK ENDSASTACK ENDSACODE SEGMENTACODE SEGMENT ASSUME CS ASSUME CS:ACODEACODE,DSDS:ADATAADATA,SSSS:ASTACKASTACKMAIN PROC FARMAIN PROC FARSTARTSTART:PUSH DSPUSH DS MOV AX MOV AX,0 0 PUS
28、H AXPUSH AX MOV AX MOV AX,ADATAADATA MOV DS MOV DS,AXAX MOV AX MOV AX,ASTACKASTACK MOV SS MOV SS,AXAX MOV SP MOV SP,OFFSET TOP OFFSET TOPLOPLOP:MOV AH MOV AH,1 1 INT 21H INT 21H CMP AL CMP AL,41H41H JB LOP JB LOP CMP AL CMP AL,46H46H JA LOP JA LOP SUB AL SUB AL,41H41H MOV BX MOV BX,OFFSET BASEOFFSET
29、 BASE MOV AH MOV AH,0 0 ADD AL ADD AL,ALAL ADD BX ADD BX,AXAX JMP WORD PTRBX JMP WORD PTRBX RET RETMAIN ENDPMAIN ENDPCODE ENDSCODE ENDSEND STARTEND START(2 2)根据表内指令跳转法)根据表内指令跳转法例例5.7 5.7 利用表内指令跳转法来实现例利用表内指令跳转法来实现例5.55.5的要求的要求1 1)明确任务,确定算法。)明确任务,确定算法。数据段数据段E9E9PAHPAHPALPALBASEBASEE9E9PBHPBHPBLPBLE9E9
30、PFHPFHPFLPFLJMP PAJMP PAJMP PBJMP PBJMP PFJMP PF图图5.11 5.11 转移指令跳转表转移指令跳转表2 2)绘流程图(图)绘流程图(图5-125-12)Y YY YALAL键盘输入字符键盘输入字符AL41HAL46HAL46H?BXBX取指令跳转表首址取指令跳转表首址根据地址转向相应分支根据地址转向相应分支N NN N结束结束开始开始ALALALAL41H41HAH0AH0ALAL表内偏移量表内偏移量求表地址求表地址BXBX+AXBXBX+AX图图5.12 5.12 流程图流程图3 3)根据流程图编写汇编语言程序)根据流程图编写汇编语言程序DAT
31、A SEGMENTDATA SEGMENTBASE DB E9BASE DB E9,PALPAL,PAHPAH,E9E9,PBLPBL,PBHPBH,E9E9,PCLPCL,PCH PCH DB E9 DB E9,PDLPDL,PDHPDH,E9E9,PELPEL,PEHPEH,E9E9,PFLPFL,PFH PFH DATA ENDSDATA ENDS LOPLOP:MOV AHMOV AH,1 1 INT 21HINT 21H CMP ALCMP AL,41H41H JB LOP JB LOP CMP ALCMP AL,46H46H JA LOPJA LOP SUB ALSUB AL,41
32、H41H MOV AHMOV AH,0 0MOV BLMOV BL,ALALADD ALADD AL,ALALADD ALADD AL,BL BL MOV BXMOV BX,OFFSET BASEOFFSET BASEADD BXADD BX,AXAXJMP BXJMP BX (3 3)根据表内关键字跳转法)根据表内关键字跳转法例例5.8 5.8 利用表内关键字跳转法实现例利用表内关键字跳转法实现例5.55.5的要求的要求1 1)明确任务,确定算法。)明确任务,确定算法。数据段数据段41H41HPAPA42H42HPBPB46H46HPFPFBASEBASE关键字关键字PAPA程序入程序入n
33、n关键字关键字PBPB程序入程序入n n关键字关键字PFPF程序入程序入n n图图5.13 5.13 关键字跳转表关键字跳转表2 2)绘流程图(图)绘流程图(图5-145-14)结束结束开始开始ALAL键盘输入字符键盘输入字符AL41HAL46HAL46H?SISI取关键字跳转表首址取关键字跳转表首址SISI+3SISI+3BXBX入口地址入口地址根据地址转向相应分支根据地址转向相应分支Y YY YN NN NALALSISI?Y YN N图图5.14 5.14 流程图流程图3)根据流程图编写汇编语言程序)根据流程图编写汇编语言程序BDATA SEGMENTBDATA SEGMENTBASE
34、DB 41HBASE DB 41H DW PADW PA DB 42HDB 42H DW PBDW PB DB 43HDB 43H DW PCDW PC DB 44HDB 44H DW PDDW PD DB 45HDB 45H DW PEDW PE DB 46HDB 46H DW PFDW PFBDATAT ENDSBDATAT ENDSLOPLOP:MOV AHMOV AH,1 1 INT 21HINT 21H CMP ALCMP AL,41H41H JB LOP JB LOP CMP ALCMP AL,46H46H JA LOPJA LOP MOV SIMOV SI,OFFSET BASE
35、OFFSET BASENEXTNEXT:CMP ALCMP AL,SISI JE DOJE DO ADD SIADD SI,3 3 JMP NEXTJMP NEXTDODO:MOV BXMOV BX,WORD PTR SI+1WORD PTR SI+1 JMP WORD PTR BX JMP WORD PTR BX 5.4 5.4 循环结构程序设计循环结构程序设计5.4.1 5.4.1 循环程序的组成与结构形式循环程序的组成与结构形式两种循环程序结构:两种循环程序结构:WHILE_DOWHILE_DO结构和结构和DO_UNTILDO_UNTIL结构结构循环初始状态循环初始状态Y Y循环体循环体
36、N N图图5.15 WHILEDO5.15 WHILEDO结构结构循环控制条件循环控制条件循环初始状态循环初始状态循环体循环体Y YN N图图5.16 DOUNTIL5.16 DOUNTIL结构结构循环控制条件循环控制条件例例5.9 试试编编写写一一程程序序统统计计出出某某一一内内存存单单元元中中1的的个个数数并并将将结结 果存入果存入RESULT单元中。单元中。1)明确任务,确定算法。)明确任务,确定算法。2)绘流程图(图)绘流程图(图5-17)N N结束结束CX0CX0开始开始AXAX逻辑左移一位逻辑左移一位CXCX+1CXCX+1AXXDAAXXDAAXAX为零?为零?CF=1CF=1?
37、RESULTCXRESULTCXY YN NY Y图图5.17 5.17 流程图流程图3)根据流程图编写汇编语言程序)根据流程图编写汇编语言程序DATA SEGMENTDATA SEGMENTXDA DW 3AD8HXDA DW 3AD8HRESULT DW RESULT DW?DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTMAIN PROC FARMAIN PROC FAR ASSUME CSASSUME CS:CODECODE,DSDS:DATADATASTARTSTART:PUSH DSPUSH DS MOV AXMOV AX,0 0 PUSH AX
38、PUSH AX MOV AXMOV AX,DATADATA MOV DSMOV DS,AXAX MOV CXMOV CX,0 0 MOV AXMOV AX,XDAXDAAGAINAGAIN:AND AXAND AX,AXAX JZ EXITJZ EXIT SHL AXSHL AX,1 1 JNC NEXTJNC NEXT INC CXINC CXNEXTNEXT:JMP AGAIN JMP AGAIN EXITEXIT:MOV RESULTMOV RESULT,CXCX RETRETMAIN ENDPMAIN ENDPCODE ENDSCODE ENDS END START END START
39、 5.4.2 5.4.2 循环程序的控制方法循环程序的控制方法(1 1)计数法)计数法计数法分为正计数法和倒计数法。计数法分为正计数法和倒计数法。例例5.10 5.10 编编制制程程序序将将两两个个n n字字节节的的无无符符号号数数相相加加,结结果果存存入入SUMSUM 开始的开始的n+1n+1字节存储区中。字节存储区中。1 1)明确任务,确定算法。)明确任务,确定算法。2 2)绘流程图(图)绘流程图(图5-185-18)Y YCX=0CX=0?结束结束BXDATA1BXDATA1首址首址开始开始ALSIALSI清进位标志清进位标志CFCFCXCXn nALAL+BX+CFALAL+BX+CF
40、SIDATA2SIDATA2首址首址DISUMDISUM首址首址DIALDIALBXBX+1BXBX+1SISI+1SISI+1DIDI+1DIDI+1CXCXCXCX1 1保存结果至指定位置保存结果至指定位置1 11 1N N图图5.18 5.18 流程图流程图3)根据流程图编写汇编语言程序)根据流程图编写汇编语言程序SSEG SEGMENT PARA STACKSSEGSSEG SEGMENT PARA STACKSSEGSTACK DB 150 DUPSTACK DB 150 DUP(?)(?)SSEG ENDSSSEG ENDSDATA SEGMENTDATA SEGMENTDATA1
41、 DB N DUPDATA1 DB N DUP(?)(?)DATA2 DB N DUPDATA2 DB N DUP(?)(?)SUM DB N+1 DUPSUM DB N+1 DUP(?)(?)DATA ENDSDATA ENDSCSEG SEGMENTCSEG SEGMENT ASSUME CS ASSUME CS:CSEGCSEG,DSDS:DATADATA,SSSS:SSEGSSEGMAIN PROC FARMAIN PROC FARSTARTSTART:PUSH DSPUSH DS MOV AXMOV AX,0 0 PUSH AXPUSH AX MOV AXMOV AX,DATADAT
42、A MOV DSMOV DS,AXAX MOV AXMOV AX,SSEGSSEG MOV SSMOV SS,AXAX MOV SPMOV SP,SIZE STACKSIZE STACK LEA BXLEA BX,DATA1DATA1 LEA SILEA SI,DATA2DATA2 LEA DILEA DI,SUMSUM MOV CXMOV CX,N N CLCCLCAGAINAGAIN:MOV ALMOV AL,SI SI ADC ALADC AL,BXBX MOV DIMOV DI,ALAL INC BXINC BX INC SIINC SI INC DIINC DI LOOP AGAIN
43、LOOP AGAIN ADC BYTE PTR DIADC BYTE PTR DI,0 0 RETRETMAIN ENDPMAIN ENDPCSEG ENDSCSEG ENDS END STARTEND START(2 2)条件控制法)条件控制法条件控制法条件控制法利用已知的条件对循环进行控制的方法。利用已知的条件对循环进行控制的方法。分两种情况:分两种情况:如如循循环环最最大大次次数数已已知知,但但有有可可能能使使用用一一些些特特征征或或条条件件使使循循环环提前结束。提前结束。循环次数未知,利用条件中的特征结束循环。循环次数未知,利用条件中的特征结束循环。例例5.11 5.11 编编制制程程
44、序序用用单单字字符符输输出出的的DOSDOS功功能能调调用用向向屏屏幕幕输输出出以以 “%”%”结束的字符串。结束的字符串。1 1)明确任务,确定算法。)明确任务,确定算法。2 2)绘流程图(图)绘流程图(图5-195-19)结束结束SIDATASIDATA首址首址开始开始ALSIALSISISI+1SISI+1显示字符显示字符AL=%AL=%?Y YN N图图5.19 5.19 流程图流程图3 3)根据流程图编写汇编语言程序)根据流程图编写汇编语言程序 DSEG SEGMENTDSEG SEGMENT DATA DB HOW ARE YOU DATA DB HOW ARE YOU?%DSEG
45、 ENDS DSEG ENDS SSEG SEGMENT PARA STACK KEG SSEG SEGMENT PARA STACK KEG STACK DB 200 DUP STACK DB 200 DUP(0 0)SSEG ENDSSSEG ENDS CSEG SEGMENT CSEG SEGMENT MAIN PROC FAR MAIN PROC FAR ASSUME CS ASSUME CS:CSEGCSEG,DSDS:DSEGDSEG,SSSS:SSEGSSEG START START:MOV AXMOV AX,DSEG DSEG MOV DS MOV DS,AXAX MOV AX
46、 MOV AX,SSEGSSEG MOV SS MOV SS,AXAX MOV SPMOV SP,SIZE STACKSIZE STACK LEA SI LEA SI,DATADATAAGAINAGAIN:MOV DLMOV DL,SISI CMP DLCMP DL,%JZ ENDOUT JZ ENDOUT MOV AH MOV AH,2 2 INT 21HINT 21H INC SIINC SI JMP AGAIN JMP AGAINENDOUTENDOUT:RETRET MAIN ENDP MAIN ENDPCSEG ENDSCSEG ENDS END START END START(3
47、3)逻辑尺控制法)逻辑尺控制法例例5.12 5.12 设设有有1616个个内内存存单单元元需需要要修修改改,修修改改规规律律是是:第第1 1、3 3、6 6、9 9、1212号号单单元元均均加加5 5,其其余余单单元元均均加加1010,试试用用循循环环结构编程实现。结构编程实现。1 1)明确任务,确定算法。)明确任务,确定算法。2 2)绘流程图)绘流程图3 3)根据流程图编写汇编语言程序)根据流程图编写汇编语言程序 DATA SEGMENTDATA SEGMENTXDA DB 16 DUPXDA DB 16 DUP(?)(?)LRULER DW 0A490HLRULER DW 0A490HDA
48、TA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTMAIN PROC FARMAIN PROC FAR ASSUME CSASSUME CS:CODECODE,DSDS:DATADATASTARTSTART:PUSH DSPUSH DS XOR AX XOR AX,AX AX PUSH AXPUSH AX MOV AXMOV AX,DATADATA MOV DSMOV DS,AXAX MOV BXMOV BX,0 0 MOV CXMOV CX,10H10H MOV DXMOV DX,LRULERLRULERAGAINAGAIN:MOV AXMOV AX,XDABX
49、XDABX SHL DXSHL DX,1 1 JC ADD5 JC ADD5 ADD AXADD AX,1010 JMP SHORT RESULT JMP SHORT RESULT ADD5ADD5:ADD AXADD AX,5 5RESULTRESULT:MOV XDABXMOV XDABX,AXAX INC BXINC BX LOOP AGAINLOOP AGAIN RETRETMAIN ENDPMAIN ENDPCODE ENDSCODE ENDS END STARTEND START 5.4.3 5.4.3 多重循环程序设计多重循环程序设计注意以下几点:注意以下几点:1 1)设置好各重
50、循环的初始状态,确保各重循环的正常运行。)设置好各重循环的初始状态,确保各重循环的正常运行。2 2)注意内外循环嵌套。)注意内外循环嵌套。3 3)防止死循环现象。)防止死循环现象。例例5.13 5.13 设设某某一一数数组组的的长长度度为为N N,各各元元素素均均为为字字数数据据,试试编编制制 一一个个程程序序使使该该数数组组中中的的数数据据按按照照从从小小到到大大的的次次序序排排 列。列。1 1)明确任务,确定算法。)明确任务,确定算法。2 2)绘流程图)绘流程图3 3)根据流程图编写汇编语言)根据流程图编写汇编语言程序程序 ADATA SEGMENT ADATA SEGMENT DATA