ImageVerifierCode 换一换
格式:PPTX , 页数:105 ,大小:305.53KB ,
资源ID:4224469      下载积分:18 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4224469.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(汇编语言程序流程控制语句及程序设计.pptx)为本站上传会员【人****来】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

汇编语言程序流程控制语句及程序设计.pptx

1、第4章 程序设计方法第4章 程序流程控制语句 及程序设计4.1 程序设计方法概述程序设计方法概述4.2 顺序程序设计顺序程序设计4.3 DOS系统功能调用系统功能调用4.4 分支程序设计分支程序设计4.5 循环程序设计循环程序设计4.6 子程序设计子程序设计第4章 程序设计方法4.1 概述概述4.1.1 汇编语言程序设计的一般步骤汇编语言程序设计的一般步骤4.1.2 流程图流程图第4章 程序设计方法4.1.1 汇编语言程序设计的一般步骤汇编语言程序设计的一般步骤汇编语言程序设计一般有以下几个步骤:汇编语言程序设计一般有以下几个步骤:1分析问题,确定算法分析问题,确定算法2绘制流程图绘制流程图3

2、根据流程图编制程序根据流程图编制程序4调试程序调试程序第4章 程序设计方法4.1.2 流程图流程图1流程图的概念流程图的概念流流程程图图是是由由特特定定的的几几何何图图形形、指指向向线线、文文字字说说明明来来表表示示数数据据处处理理的的步步骤骤,形形象象描描述述逻逻辑辑控控制制结结构构以以及及数数据据流流程程的的示示意意图图。流流程程图图具具有有简简洁洁、明明了了、直观的特点。直观的特点。2流程图符号表示流程图符号表示(1)起止框:表示程序)起止框:表示程序的开始和结束。的开始和结束。起止框起止框第4章 程序设计方法(2)判断框)判断框(3)处理框)处理框(4)调用框)调用框 第4章 程序设计

3、方法(5)指向线)指向线(6)连接框)连接框 第4章 程序设计方法4.2 顺序程序设计顺序程序设计下面举例说明顺序程序的设计。下面举例说明顺序程序的设计。【例例】试编写一程序计算以下表达式的值。试编写一程序计算以下表达式的值。=(v-(*+-540)/x式中式中x、v均为有符号字数据。均为有符号字数据。设设、的的值值存存放放在在字字变变量量、V中中,结结果果存存放放在在双双字字变变量量之之中中,程程序序的的流流程程图图如如图图4.1所示。所示。第4章 程序设计方法图图4.1 4.1 顺序运算程序流程图顺序运算程序流程图第4章 程序设计方法源程序如下:源程序如下:DATASEGMENTXDW20

4、0YDW100ZDW3000VDW10000W DW2 DUP(?)(?)DATAENDSSTACK SEGMENT STACK DB 200 DUP(0)STACK ENDSCODESEGMENTASSUME DS:DATA,CS:CODE,SS:STACK第4章 程序设计方法START:MOVAX,DATA MOVDS,AX;DATAAX MOVAX,X IMULY;(;(X)*(Y)DX:AX MOVCX,AX MOVBX,DX;(;(DX:AX)(BX:CX)MOVAX,Z CWD;(;(Z)符号扩展)符号扩展 ADDCX,AX ADCBX,DX;(;(BX:CX)+(DX:AX)(B

5、X:CX)SUBCX,540 SBBBX,0;(;(BX:CX)-540(BX:CX)MOVAX,V 第4章 程序设计方法 CWD;(;(V)符号扩展)符号扩展SUBAX,CXSBBDX,BX ;(;(DX:AX)-(BX:CX)(DX:AX)IDIV X;(;(DX:AX)/XMOVW,AX;商;商WMOVW+2,DX;余数;余数DXW+2MOVAH,4CHINT 21HCODE ENDS;退出;退出DOS 状态状态 ENDSTART第4章 程序设计方法【例例】已已知知某某班班学学生生的的英英语语成成绩绩按按学学号号(从从1开开始始)从从小小到到大大的的顺顺序序排排列列在在TAB表表中中,要

6、要查查的的学学生生的的学学号号放放在在变变量量NO中中,查查表表结结果果放放在在变量变量ENGLISH中。中。编写程序如下:编写程序如下:第4章 程序设计方法STACK SEGMENT STACK DB 200 DUP(0)STACK ENDSDATASEGMENTTABDB 80,85,86,71,79,96 DB 83,56,32,66,78,84NO DB 10ENGLIST DB?DATAENDSCODE SEGMENT第4章 程序设计方法 ASSUME DS:DATA,SS:STACK,CS:CODEBEGIN:MOVAX,DATA MOVDS,AX LEABX,TAB MOVAL,

7、NO DECAL XLATTAB MOVENGLISH,AL MOVAH,4CH INT21H CODE ENDS ENDBEGIN第4章 程序设计方法4.3 DOS系统功能调用系统功能调用4.3.1 系统功能调用方法系统功能调用方法4.3.2 常用的常用的DOS系统功能调用系统功能调用第4章 程序设计方法4.3.1 系统功能调用方法系统功能调用方法DOS系统功能调用的方法一般可分为以下几步:系统功能调用的方法一般可分为以下几步:设置所要调用功能的入口参数。设置所要调用功能的入口参数。在在AH寄存器中存入所要调用功能的功能号。寄存器中存入所要调用功能的功能号。INT 21H指令自动转入中断子程

8、序入口。指令自动转入中断子程序入口。相相应应中中断断子子程程序序运运行行完完毕毕,可可按按规规定定取取得得出出口口参数。参数。第4章 程序设计方法4.3.2 常用的常用的DOS系统功能调用系统功能调用1单字符输入(单字符输入(1号调用)号调用)2单字符显示(单字符显示(2号调用)号调用)3打印输出打印输出(5号调用)号调用)4结束调用(结束调用(4CH号调用)号调用)5显示字符串(显示字符串(9号调用)号调用)6字符串输入(字符串输入(10号调用)号调用)第4章 程序设计方法1单字符输入(单字符输入(1号调用)号调用)格式:格式:MOV AH,1 INT21H功能:接受从键盘输入字符的功能:接

9、受从键盘输入字符的ASCII码送入寄存器码送入寄存器AL中,中,并送显示器显示。并送显示器显示。2单字符显示(单字符显示(2号调用)号调用)格式:格式:MOV DL,待显示字符的,待显示字符的ASCII码码 MOV AH,2 INT 21H功功能能:将将DL寄寄存存器器中中的的字字符符送送显显示示器器显显示示,如如果果DL中中为为CTRL+BREAK的的ASCII码,则退出。码,则退出。第4章 程序设计方法3打印输出(打印输出(5号调用)号调用)格式:格式:MOV DL,待打印字符的,待打印字符的ASCII码码 MOV AH,5 INT21H功能:将功能:将DL寄存器中的字符送打印机打印。寄存

10、器中的字符送打印机打印。4结束调用(结束调用(4CH号调用)号调用)格式:格式:MOV AH,4CH INT 21H功能:终止当前程序并返回调用程序。功能:终止当前程序并返回调用程序。第4章 程序设计方法5显示字符串(显示字符串(9号调用)号调用)格式:格式:LEADX,待显示字符串首偏移地址,待显示字符串首偏移地址 MOVAH,9 INT21H功能:将当前数据区中以功能:将当前数据区中以结尾的字符串送显示器显示。结尾的字符串送显示器显示。6字符串输入(字符串输入(10号调用)号调用)格式:格式:LEADX,缓冲区首偏移地址,缓冲区首偏移地址 MOVAH,10 INT21H功功能能:从从键键盘

11、盘上上输输入入一一字字符符串串到到用用户户定定义义的的输输入入缓缓冲冲区区中中,并并送送显显示器显示。示器显示。第4章 程序设计方法10号系统功能调用的输入缓冲存储区的定义号系统功能调用的输入缓冲存储区的定义缓冲区名缓冲区名 DB 缓冲区大小缓冲区大小 ;规定输入缓冲区的大小规定输入缓冲区的大小 DB 0 ;实际输入字符的个数实际输入字符的个数 DB 缓冲区大小缓冲区大小 DUP(0);键盘输入的字符存放在该输入缓冲区中键盘输入的字符存放在该输入缓冲区中例:例:BUF DB 80 DB 0 DB 80 DUP(0)第4章 程序设计方法DATASEGMENTSTRDB 0DH,0AH,Examp

12、le of string display!DATAENDSSTACK SEGMENT STACKDB100 DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DATA,CS:CODE,SS:STACK【例例】若要在屏幕上显示字符串若要在屏幕上显示字符串“Example of string display!”,则程序如下:,则程序如下:第4章 程序设计方法BEGIN:MOV AX,DATAMOV DS,AXLEA DX,STRMOV AH,9INT21HMOV AH,4CH INT21HCODEENDSEND BEGIN第4章 程序设计方法DATA SEGMENTINF

13、O1 DB0DH,0AH,INPUT STRING:INFO2 DB0DH,0AH,OUTPUT STRING:BUFA DB81 DB?【例例】从键盘上输入一串字符到输入缓冲区,然后从键盘上输入一串字符到输入缓冲区,然后将输入的字符串在显示器上以相反的顺序显示。将输入的字符串在显示器上以相反的顺序显示。第4章 程序设计方法 DB80 DUP(0)BUFB DB81 DUP(0)DATA ENDSSTACKSEGMENT STACK DB200 DUP(0)STACKENDSCODE SEGMENTASSUMEDS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATA

14、MOV DS,AX第4章 程序设计方法 LEADX,INFO1MOVAH,9 ;9号调用,显示输入提示信息号调用,显示输入提示信息INT21HLEADX,BUFAMOVAH,10 ;10号号调调用用,键键盘盘输输入入字字符符串串到到缓缓 冲区冲区BUFAINT21HLEASI,BUFA+1 MOVCH,0 ;取字符长度取字符长度CX MOVCL,SIADDSI,CX ;SI 指向字符串尾部指向字符串尾部LEADI,BUFB ;DI指向字符串变量指向字符串变量BUFB第4章 程序设计方法NEXT:MOVAL,SI MOVDI,AL DECSI INCDI LOOP NEXT MOVBYTE PT

15、R DI,LEADX,INFO2 MOVAH,9 ;9号调用,显示输出号调用,显示输出提示信息提示信息 INT21H第4章 程序设计方法LEADX,BUFBMOVAH,9 ;反向显示字符串;反向显示字符串INT21HMOVAH,4CHINT21HCODEENDSEND START第4章 程序设计方法4.4 分支程序设计分支程序设计4.4.1 控制转移类指令控制转移类指令4.4.2 分支程序设计分支程序设计*4.4.3 用跳转表实现多分支程序设计用跳转表实现多分支程序设计第4章 程序设计方法4.4.1 控制转移类指令控制转移类指令1 1、无条件转移指令无条件转移指令2 2、条件转移指令条件转移指

16、令第4章 程序设计方法1、无条件转移指令、无条件转移指令段内转移段内转移:指在同一代码段的范围内进行转移,只需要改变指在同一代码段的范围内进行转移,只需要改变IP寄存器的内容。一般有三种用法。寄存器的内容。一般有三种用法。(1)段内直接短转移)段内直接短转移格式:格式:JMP SHORT 标号名标号名(2)段内直接转移)段内直接转移格式:格式:JMP 标号名标号名;该标号的属性为近标号该标号的属性为近标号(3)段内间接转移)段内间接转移格式:格式:JMP CX ;将将(CX)寄存器的内容送寄存器的内容送IP寄存器寄存器 JMP WORD PTR 1234H ;将字存储单元将字存储单元1234H

17、中的内容送中的内容送IP寄存器寄存器第4章 程序设计方法段间转移段间转移:指要转移到另一个代码段去执行程序,此时不指要转移到另一个代码段去执行程序,此时不仅需要改变仅需要改变IP寄存器中的内容,还要修改寄存器中的内容,还要修改CS段寄存器的内段寄存器的内容才能达到转移的目的,因此段间转移需要修改两个寄存器容才能达到转移的目的,因此段间转移需要修改两个寄存器中的内容。一般有两种用法。中的内容。一般有两种用法。(1)段间直接转移)段间直接转移格式:格式:JMP FAR PTR 标号名标号名 ;该标号具有远属性该标号具有远属性(2)段间间接转移)段间间接转移格式:格式:JMP DWORD PTR 1

18、234H ;将双字存储单元的低字内容送将双字存储单元的低字内容送IP寄存器,寄存器,双字存储单元的高字内容送双字存储单元的高字内容送CS寄存器寄存器 第4章 程序设计方法 简单条件转移指令简单条件转移指令 无符号数条件转移指令无符号数条件转移指令 有符号数条件转移指令有符号数条件转移指令 判断判断CXCX的值为的值为0 0则转移指令则转移指令它们都有通用的语句格式和功能。它们都有通用的语句格式和功能。语句格式:语句格式:标号:标号:操作符操作符 短标号短标号功能:如果条件满足,则(功能:如果条件满足,则(IPIP)位移量)位移量IPIP。2 2、条件转移指令、条件转移指令第4章 程序设计方法共

19、有共有10条指令,根据五个标志位条指令,根据五个标志位ZF、SF、OF、PF和和CF的的两种状态(两种状态(0或或1)分别进行转移。)分别进行转移。(1)JE/JZ ;ZF=1则转移,测试前次操作结果是否等于则转移,测试前次操作结果是否等于0 JNE/JNZ ;ZF=0则转移,测试前次操作结果是否不等于则转移,测试前次操作结果是否不等于0(2)JS ;SF=1则转移,测试前次操作结果是否为负数则转移,测试前次操作结果是否为负数 JNS ;SF=0则转移,测试前次操作结果是否为正数则转移,测试前次操作结果是否为正数(3)JO ;OF=1则转移,测试前次操作结果是否有溢出则转移,测试前次操作结果是

20、否有溢出 JNO ;OF=0则转移,测试前次操作结果是否没有溢出则转移,测试前次操作结果是否没有溢出简单条件转移指令简单条件转移指令第4章 程序设计方法(4)JC ;CF=1则转移则转移,测试前次操作结果是否有进(借)位测试前次操作结果是否有进(借)位 JNC ;CF=0则转移则转移,测试前次操作结果是否无进(借)位测试前次操作结果是否无进(借)位(5)JP ;PF=1则转移则转移,测试前次操作结果中测试前次操作结果中1的个数是否为偶数的个数是否为偶数 JNP ;PF=0则转移则转移,测试前次操作结果中测试前次操作结果中1的个数是否为奇数的个数是否为奇数【例例】下面程序段测试下面程序段测试AX

21、的低四位是否全的低四位是否全0,如果均是如果均是0,使,使CX=0,否则使否则使CX=-1。MOV CX,-1 TEST AX,000FH JNZ NEXT MOV CX,0NEXT:第4章 程序设计方法无符号数条件转移指令无符号数条件转移指令无符号数条件转移指令往往跟在比较指令之后,根据运算结果设置的无符号数条件转移指令往往跟在比较指令之后,根据运算结果设置的条件标志状态确定转移方向。这类指令视比较对象为无符号数。根据条件标志状态确定转移方向。这类指令视比较对象为无符号数。根据不同状态设置了高于、高于等于、低于、低于等于四条指令。不同状态设置了高于、高于等于、低于、低于等于四条指令。(1)J

22、A/JNBE;当;当CF=0且且ZF=0时转移。用于两个无符号数时转移。用于两个无符号数a、b的的比较,若比较,若ab则条件满足实现转移。则条件满足实现转移。(2)JAE/JNB;当;当CF=0或或ZF=1时转移。用于两个无符号数时转移。用于两个无符号数a、b的的比较,若比较,若ab或或a=b则条件满足实现转移。则条件满足实现转移。(3)JB/JNAE;当;当CF=1且且ZF=0时转移。用于两个无符号数时转移。用于两个无符号数a、b的的比较,若比较,若ab则条件满足实现转移。则条件满足实现转移。(4)JBE/JNA;当;当CF=1或或ZF=1时转移。用于两个无符号数时转移。用于两个无符号数a、

23、b的的比较,若比较,若a=BXAX=BX,转移到,转移到NEXTNEXTXCHGXCHG AXAX,BX BX ;若;若AXBXAXb则条件满足实现转移。则条件满足实现转移。(2)JGE/JNL;当;当SF=OF或或ZF=1时转移。用于两个有符号数时转移。用于两个有符号数a、b的的比较,若比较,若ab或或a=b则条件满足实现转移。则条件满足实现转移。(3)JL/JNGE;当;当SF OF且且ZF=0时转移。用于两个有符号数时转移。用于两个有符号数a、b的比较,若的比较,若ab则条件满足实现转移。则条件满足实现转移。(4)JLE/JNG;当;当SF OF或或ZF=1时转移。用于两个有符号数时转移

24、用于两个有符号数a、b的比较,若的比较,若a=BXAX=BX,转移到,转移到NEXTNEXTXCHGXCHG AXAX,BXBX;若;若AXBXAXBX,交换,交换NEXTNEXT:第4章 程序设计方法语句格式:语句格式:JCXZ JCXZ 短标号短标号功能:当功能:当CX=0CX=0时,则转移到标号所指出的地址处时,则转移到标号所指出的地址处执行。执行。判断判断CXCX的值为的值为0 0则转移指令则转移指令第4章 程序设计方法4.4.2 分支程序设计分支程序设计【例例】编写计算下面函数值的程序:编写计算下面函数值的程序:1X0Y=0X=0 -1X0设设输输入入数数据据为为X、输输出出数数据

25、据Y,且且皆皆为为字字节节变变量量。程程序序流程图如图流程图如图4.2所示。所示。程序如下:程序如下:第4章 程序设计方法图图4.2 分支运算分支运算程序流程图程序流程图第4章 程序设计方法DATASEGMENTX DB -10Y DB?DATAENDSSTACK SEGMENT STACK DB 200 DUP(0)STACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODESTART:MOVAX,DATA第4章 程序设计方法 MOVDS,AX CMPX,0;与;与0进行比较进行比较 JGEA1;X0转转A1 MOVY,-1;X 0时,时,-1Y

26、 JMPEXITA1:JGA2;X0转转A2 MOVY,0;X=0时,时,0Y JMPEXITA2:MOVY,1;X0,1Y EXIT:MOVAH,4CH INT21H CODE ENDS ENDSTART第4章 程序设计方法【例例】试试编编一一程程序序,求求三三个个带带符符号号字字数数据据中中的的最最大大值值,并并将将最最大大值值存存入入MAX字字单单元元中中。设设三三个个带带符符号号数数分分别别在在三三个个字字变变量量X、Y、Z中存储。中存储。程序流程图如图程序流程图如图4.3所示所示:第4章 程序设计方法图图4.3 程序流程图程序流程图 第4章 程序设计方法程序如下:程序如下:STACK

27、 SEGMENT STACK DB 200 DUP(0)STACK ENDSDATA SEGMENTX DW 00ABHY DW 5Z DW 200MAX DW?DATA ENDSCODE SEGMENT第4章 程序设计方法 ASSUME DS:DATA,SS:STACK,CS:CODE START:MOV AX,DATA MOV DS,AX MOV AX,X CMP AX,Y;XY?JG L1 MOV AX,Y;YZ?CMP AX,Z JG EXITL2:MOV AX,Z JMP EXIT 第4章 程序设计方法L1:CMPAX,Z;XZ?JLE L2EXIT:MOVMAX,AX MOVAH,

28、4CH INT 21HCODE ENDS END START第4章 程序设计方法4.4.3 用跳转表法实现多分支程序设计用跳转表法实现多分支程序设计(补充补充)【例例】设某程序有设某程序有8路分支,试根据给定的路分支,试根据给定的N值(值(18),将程序的执行转移到其中的一),将程序的执行转移到其中的一路分支。路分支。程序流程如图程序流程如图4.4所示。所示。第4章 程序设计方法第4章 程序设计方法程序如下:程序如下:DATASEGMENTTABDW P1,P2,P3,P4,P5,P6,P7,P8N DB 5DATAENDSSTACK SEGMENT STACK DB 200 DUP(0)ST

29、ACK ENDSCODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODE 第4章 程序设计方法START:MOVAX,DATA MOVDS,AX MOVAL,N DECAL ADDAL,AL ;形成表内偏移;形成表内偏移 MOVBL,AL MOVBH,0 JMPWORD PTR TABBX第4章 程序设计方法P1:JMPEXITP2:JMPEXITP3:JMPEXITP4:第4章 程序设计方法 JMPEXIT P8:EXIT:MOVAH,4CH INT21HCODE ENDS ENDSTART 注注:上上述述程程序序中中的的无无条条件件转转移移指指令令的的转转移移

30、地地址址采采用用的的是是变变址址寻寻址址。同同理理,转转移移地地址址也也可可以以用用寄寄存存器器间间接接寻寻址址或基址加变址寻址。或基址加变址寻址。第4章 程序设计方法4.5 循环程序设计循环程序设计4.5.1 循环程序的结构循环程序的结构4.5.2 单重循环程序设计单重循环程序设计4.5.3 多重循环程序设计多重循环程序设计第4章 程序设计方法1)循环指令循环指令LOOP2)相等相等/为零循环指令为零循环指令LOOPE/LOOPZ3)不相等不相等/不为零循环指令不为零循环指令LOOPNE/LOOPNZ循环指令循环指令该组指令执行的步骤:该组指令执行的步骤:(1)CX-1 CX;(2)检查是否

31、满足测试条件,如满足则检查是否满足测试条件,如满足则IP+(标号标号)位移量位移量 IP;(3)如果不满足测试条件,则如果不满足测试条件,则IP值不变,即退出循环,程序继续值不变,即退出循环,程序继续 顺序执行。顺序执行。第4章 程序设计方法1 1循环指令循环指令LOOPLOOP语句格式:语句格式:LOOP LOOP 短标号短标号功能:功能:(CXCX)0 0,则程序转移(循环),则程序转移(循环);否则,顺序执行。否则,顺序执行。说明:说明:使用使用LOOPLOOP指令可代替两条指令指令可代替两条指令,DEC CX DEC CX JNE JNE 短标号短标号第4章 程序设计方法2 2相等相等

32、/为零循环指令为零循环指令LOOPE/LOOPZLOOPE/LOOPZ语句格式:语句格式:LOOPE LOOPE 短标号短标号 LOOPZ LOOPZ 短标号短标号功能:功能:(CXCX)0 0且且ZF=1ZF=1,则程序转移(循,则程序转移(循 环);否则,顺序执行。环);否则,顺序执行。第4章 程序设计方法分析下面的例子,该程序完成什么功能?分析下面的例子,该程序完成什么功能?DATA SEGMENT BUF DB AAABBCD COUNT EQU$-BUFDATA ENDS MOV AL,A MOV DI,OFFSET BUF MOV CX,COUNT DEC DINEXT:INC D

33、I CMP AL,DI LOOPE NEXT 第4章 程序设计方法 MOV BX,DI JNZ EXIT MOV BX,0FFFFH ;当当ZF=1,CX=0时退出循环时退出循环EXIT:.功能:在字符串查找是否存在非功能:在字符串查找是否存在非A字符,若找到,将字符,若找到,将BX指指针指向第一个非针指向第一个非A字符,否则置字符,否则置BX为为-1。注意:有两种可能退出循环的执行。注意:有两种可能退出循环的执行。(1)计数结束)计数结束(CX)=0,此时此时ZF=1,表示所有都是,表示所有都是A字符。字符。(2)ZF=0,表示找到非表示找到非A字符。字符。第4章 程序设计方法3 3不相等不

34、相等/不为零循环指令不为零循环指令LOOPNE/LOOPNZLOOPNE/LOOPNZ语句格式:语句格式:LOOPNE LOOPNE 短标号短标号 LOOPNZ LOOPNZ 短标号短标号功能:功能:(CXCX)0 0且且ZF=0 ZF=0,则程序转移(循,则程序转移(循 环);否则,顺序执行。环);否则,顺序执行。第4章 程序设计方法4.5.1 循环程序的结构循环程序的结构1初始化部分初始化部分2工作部分工作部分3修改部分修改部分4.控制部分控制部分第4章 程序设计方法循环程序的常见结构形式如图循环程序的常见结构形式如图4.5(a)、()、(b)所示。)所示。第4章 程序设计方法4.5.2

35、单重循环程序设计单重循环程序设计1计数控制计数控制2条件控制条件控制第4章 程序设计方法1计数控制计数控制【例例】已知有已知有COUNT个字节数据存放在以个字节数据存放在以BUF为为首址的存贮区中,编写程序统计负数和正数的个数分别首址的存贮区中,编写程序统计负数和正数的个数分别送送MINUS和和PLUS单元。单元。对于循环次数已知的情况,通常采用计数控制方法来实对于循环次数已知的情况,通常采用计数控制方法来实现循环。又分为倒计数法和正计数法。现循环。又分为倒计数法和正计数法。第4章 程序设计方法DATA SEGMENT BUF DB -32,25,36,-18,-46,0,-3 COUNT E

36、QU$-BUF PLUS DB?MINUS DB?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV BL,0 ;统计负数个数的计数器统计负数个数的计数器 MOV DL,0 ;统计正数个数的计数器统计正数个数的计数器 MOV SI,OFFSET BUF MOV CX,COUNT第4章 程序设计方法LOP1:MOV AL,SI CMP AL,0 ;判断是否为正数判断是否为正数 JGE NEXT0 INC BL ;若为负数若为负数,(BL)+1 (BL)JMP NEXT1NEXT0:INC DL ;

37、若为正数若为正数,(DL)+1 (DL)NEXT1:INC SI LOOP LOP1 MOV MINUS,BL MOV PLUS,DL MOV AH,4CH INT 21H CODE ENDS END START 第4章 程序设计方法【例例】编程实现计算如下等式:编程实现计算如下等式:X1+Y1=Z1;X2+Y2=Z2;X3-Y3=Z3;X4-Y4=Z4;X5-Y5=Z5;X6+Y6=Z6;X7-Y7=Z7;X8+Y8=Z8;X9+Y9=Z9;X10+Y10=Z10;X11+Y11=Z11;X12-Y12=Z12。分析:采用分析:采用逻辑尺控制法逻辑尺控制法。用。用0或或1分别表示做减法或加分

38、别表示做减法或加法运算,在该例中形成的逻辑尺为法运算,在该例中形成的逻辑尺为0000011110100011。第4章 程序设计方法DATA SEGMENT RULE DW 0000011110100011 X DB 21,34,25,56,23,76,84,92,36,38,69,10 Y DB 61,82,72,37,59,51,26,34,57,80,26,22 Z DB 12 DUP(0)DATA ENDSSTACK SEGMENT STACK DB 100 DUP(0)STACK ENDSCODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATASTART

39、MOV AX,DATA MOV DS,AX第4章 程序设计方法 MOV CX,12 MOV AX,RULE MOV SI,OFFSET X MOV BX,OFFSET Y MOV DI,OFFSET Z LOOP1:MOV DL,SI SHR AX,1 ;判断是做加法还是减法判断是做加法还是减法 JC ADD1 ;若对应位为若对应位为“1”做加法做加法 SUB DL,BX JMP END1 ADD1:ADD DL,BX END1:MOV DI,DL ;保存运算结果保存运算结果第4章 程序设计方法 INC SI INC DI INC BX LOOP LOOP1 MOV AH,4CH INT 2

40、1H CODE ENDS END START第4章 程序设计方法2条件控制条件控制【例例】设在内存某一数据区从设在内存某一数据区从STRING地址开始存放地址开始存放了一个字符串,其最后一个字符为了一个字符串,其最后一个字符为“$”(ASCII码为码为24H)。要求检查该字符串中所有字符的奇偶性,规定每个字符对应要求检查该字符串中所有字符的奇偶性,规定每个字符对应的的一一个个字字节节数数中中必必须须有有偶偶数数个个“1”,则则为为正正确确。若若奇奇偶偶性性正正确,结果为确,结果为0,否则结果为,否则结果为-1。对于循环次数未知的情况,通常采用条件控制方法来实对于循环次数未知的情况,通常采用条件

41、控制方法来实现循环。现循环。第4章 程序设计方法 DATA SEGMENT STRING DB THIS IS A STRING$RESULT DB?DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV BX,OFFSET STRING LOP1:MOV AL,BX INC BX CMP AL,24H ;判断是否是判断是否是“$”结束符结束符 JZ DONE 第4章 程序设计方法 OR AL,AL ;判断数的奇偶性判断数的奇偶性 JNP ERROR JMP LOP1DONE:MOV AH,0

42、JMP NEXTERROR:MOV AH,-1NEXT:MOV RESULT,AH MOV AH,4CH INT 21H CODE ENDS END START 第4章 程序设计方法【例例】编编写写程程序序:从从键键盘盘输输入入一一行行字字符符,要要求求第第一一个个键键入入的的字字符符必必须须是是空空格格符符,如如不不是是则则退退出出程程序序;如如是是则则开开始始接接收收键键入入的的字字符符并并顺顺序序存存放放在在首首址址为为BUFFER的的缓缓冲冲区区中中(空空格格符符不不存存入入),直直到到收收到第二个空格符时退出程序。到第二个空格符时退出程序。DATA SEGMENT BUFFER DB

43、 80 DUP(0)FLAG DB?DATA ENDSSTACK SEGMENT STACK DB 200 DUP(0)STACK ENDS第4章 程序设计方法CODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATABEGIN:MOV AX,DATA MOV DS,AX LEA BX,BUFFER MOV FLAG,0NEXT:MOV AH,1 INT 21H TEST FLAG,01H JNZ FOLLOW CMP AL,20H JNZ EXIT第4章 程序设计方法 MOV FLAG,1 JMP NEXTFOLLOW:CMP AL,20H JZ EXIT MO

44、V BX,AL INC BX JMP NEXT EXIT:MOV AH,4CH INT 21H CODE ENDS END BEGIN第4章 程序设计方法4.5.3 多重循环程序设计多重循环程序设计如果一个循环程序的循环体内还包含一个或多个循环结构如果一个循环程序的循环体内还包含一个或多个循环结构的程序,那么这个程序称为双重或多重循环结构程序。的程序,那么这个程序称为双重或多重循环结构程序。【例例】在以在以BUF为首址的字节存储区中存放有为首址的字节存储区中存放有n个个无符号数无符号数X1,X2,Xn,现要求将它们按从小到大的顺,现要求将它们按从小到大的顺序排列在序排列在BUF存储区中,试编写

45、程序。存储区中,试编写程序。第4章 程序设计方法STACK SEGMENT STACK DB 200 DUP(0)STACK ENDSDATA SEGMENTBUF DB 30H,10H,40H,20H,0FFHN=$-BUFDATA ENDSCODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV SI,1 ;1 (SI)第4章 程序设计方法LOPI:MOV DI,SI INC DI ;(SI)+1 (DI)MOV AL,BUF+SI-1LOPJ:CMP AL,BUF+DI-1 JBE NEXT X

46、CHG BUF+DI-1,AL MOV BUF+SI-1,ALNEXT:INC DI CMP DI,N JBE LOPJ INC SI CMP SI,N-1 JBE LOPI第4章 程序设计方法 MOV AH,4CH INT 21H CODE ENDS END START第4章 程序设计方法4.6 子程序设计子程序设计4.6.1 子程序的概念子程序的概念4.6.2 子程序的定义子程序的定义4.6.3 子程序设计方法子程序设计方法4.6.4 子程序应用举例子程序应用举例4.6.5 子程序的嵌套与递归调用子程序的嵌套与递归调用第4章 程序设计方法4.6.1 子程序的概念子程序的概念在在程程序序设设

47、计计中中,我我们们会会发发现现一一些些多多次次无无规规律律重重复复的的程程序序段段或或语语句句序序列列。解解决决此此类类问问题题一一个个行行之之有有效效的的方方法法就就是是将将它它们们设设计计成成可可供供反反复复调调用用的的独独立立的的子子程程序序结结构构,以以便便在在需需要要时时调用。在汇编语言中,子程序又称调用。在汇编语言中,子程序又称过程过程。调用子程序的程序称为主调程序或主程序。调用子程序的程序称为主调程序或主程序。第4章 程序设计方法4.6.2 子程序的定义子程序的定义子子程程序序的的定定义义是是由由过过程程定定义义伪伪指指令令PROCPROC和和ENDPENDP来来完完成成的的。其

48、格式如下:其格式如下:过程名过程名 PROC NEAR/FARPROC NEAR/FAR RET RET过程名过程名 ENDPENDP其其中中PROCPROC表表示示过过程程定定义义开开始始,ENDPENDP表表示示过过程程定定义义结结束束。过程名是过程入口地址的符号表示。过程名是过程入口地址的符号表示。一般过程名同标号一样,具有三种属性,即段属性、偏一般过程名同标号一样,具有三种属性,即段属性、偏移地址属性以及类型属性。移地址属性以及类型属性。第4章 程序设计方法4.6.3 子程序设计方法子程序设计方法1.子程序的调用和返回子程序的调用和返回2现场的保护与恢复现场的保护与恢复3主程序与子程序

49、参数传递方式主程序与子程序参数传递方式第4章 程序设计方法1 1、子程序的调用和返回、子程序的调用和返回子程序的调用:子程序的调用:(1)call proc_name(2)call far ptr proc_name子程序的返回:子程序的返回:ret注意:堆栈中内容的变化!注意:堆栈中内容的变化!第4章 程序设计方法2现场的保护与恢复现场的保护与恢复例如:若子程序例如:若子程序PROG中改变了寄存器中改变了寄存器AX,BX,CX,DX的值,则可采用如下方法保护和恢复现场。的值,则可采用如下方法保护和恢复现场。PROGPROCPUSH AX ;保护现场;保护现场PUSH BX PUSH CXPU

50、SH DX 第4章 程序设计方法 POP DX ;恢复现场恢复现场POP CXPOP BXPOP AXRET ;返回断点处返回断点处PROCENDP第4章 程序设计方法3主程序与子程序参数传递方式主程序与子程序参数传递方式(1)寄存器法)寄存器法(2)约定单元法)约定单元法(3)堆栈法)堆栈法第4章 程序设计方法4.6.4 子程序应用举例子程序应用举例【例例】将将一一个个给给定定的的二二进进制制数数按按位位转转换换成成相相应应的的ASCII码码字字符符串串,送送到到指指定定的的存存储储单单元元并并显显示示。如如二二进进制制数数10010011转转换换成成字字符符串串为为10010011。要要求

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服