第02讲第四章程序设计的基本方法.ppt
《第02讲第四章程序设计的基本方法.ppt》由会员分享,可在线阅读,更多相关《第02讲第四章程序设计的基本方法.ppt(131页珍藏版)》请在三一办公上搜索。
1、1,第四章 程序设计的基本方法,4.1 概述,程序设计要点:分析问题的需求,选择好解决方法;针对选定的算法,编写高质量的程序。一个高质量的程序不仅要满足正确性的要求,而且还应尽可能实现以下几点:(1)结构清晰、简明、易读、易调试。结构好(2)执行速度快。效率高(3)占用存储空间少。资源少,势结仁坷胰薯冠妨窟逗露铆诛常席颊乓宪桐簿狰来奶室做沪潭焉源涕矫其第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,2,汇编语言程序设计的一般步骤:(1)分析问题,选择合适的解题方法。(2)根据具体问题,确定输入输出数据的格式。(3)分配存贮区并给变量命名(包括分配寄存器)。(4)绘制程序的流程
2、图,即将解题方法和步骤用程序流程图的形式表示出来。(5)根据流程图编写程序。(6)静态检查与动态调试,椽汇姓然瑞接泻认纷鳖腋呀寺桃炕子裤辞幅松劲麦蛹奢堑氰藉茵糊疤穴钥第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,3,几种程序设计方法:顺序程序设计分支程序设计循环程序设计子程序的设计本章主要讲解:各种转移指令格式、功能及使用条件分支程序设计循环程序设计子程序的设计,本章主要讲述的内容,蒙做秆叹输瞧岸抒芍妄迭扭姐急惶勉垫饵顿蛤戳挖出厨夸汹侮涡愈认冈背第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,4,几种框图符号,1.起始、终止框 2判断框3处理说明框4子程序
3、或过程调用框5.流向框6连接框,1,诣订冻级淤吗宣颗通寨说罐夜党苑呛船碍狄缕月渝孩苯擒烷剁赊难辊铂驾第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,5,4.3.4 分支程序设计,分支程序的特点:根据不同情况作出不同的处理,程序结构分成了若干支路。分支的结构形式:(1)(2)结构特点:程序运行方向是向前的,条件确定,只能执行分支中的一个。机器根据不同的情况作出判定,有选择的执行相应的分支。这类程序称之为分支程序。,鼠指涟卿竞潞蘑拄肆又牵兆疹翟枝悍殿细蘑凡脉阂革缔砰脓颇虞张稼埃谓第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,6,问题:计算机怎样判断这些分支?,
4、(1)分支由条件转移指令产生,不同条件通过EFLAGS的标志位状态(0或1)反映出来;(2)转移指令不影响EFLAGS的标志位,可连续使用转移指令,产生多个分支。例:可以产生如下的多个分支。CMP BYTE PTR ARRAYBX,0 JLE L1;小于等于0,转移到L1 分支1;大于0L1:JL NEXT;小于0,转移到NEXT 分支2;等于0NEXT:分支3;小于0,富绵畦享抹狂桑粒警鸽秧叙抓虹乃瘩藤溯纶慷喀结斥眺潞鄙澈星罗诵磨沪第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,7,4.3.4 分支程序设计要点,选择合适的转移指令;为每个分支安排出口;将分支中的公共部分尽量
5、放到分支前或分支后的公共程序段中;流程图、程序对应;调试时,逐分支检查。,阁汉册扭掘异郭稚饶现婶章宗车走首荚砍身毅逢忽扎基妆茵翁评挣磺强厕第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,8,转移指令的特点,特点:(1)改变程序的执行顺序,即改变指令指针CS:IP/EIP的值;(2)不改变标志位。主要用于设计分支程序,关键在于根据需要,根据各个标志位的不同状态,选用合适的转移指令。,忠丹届畦牺篱矛谓娇桓泪嗡匣俄蒸搪虾驼凄沁碳霜谣绽幽恫韦屎吾害社羊第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,9,转移指令的分类,转移指令,条件转移,无条件转移,简单条件转移(1
6、0条),无符号数条件转移(4),有符号数条件转移(4),段内直接、段间直接,段内间接、段间间接,毋财膏奈阔纶以舟泻豢菲察贼芽褥缚钝版茹涅诣昂剿樟罗粮曹怕矢美驯屹第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,10,4.3.1 简单条件转移,根据单个标志位 CF、ZF、SF、OF、PF的值确定是否转移,之所以称之为简单条件,就是因为它只根据一个标志位进行跳转。,语句格式:,标号:操作符 短标号,短标号是一个标号。该标号代表条件成立时,想转移到的目的地址。若该目的地址与当前(IP)之间的字节距离在-128 127之间,则称该标号为短标号。,互壮砍瓦挖奴斑擎斤栽陀擎忍向酪丙蚂蓄卞这
7、上怜糜邯囱屉鸦电鹿区眶捍第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,11,简单条件转移指令,JZ/JE ZF=1时,转移JNZ/JNE ZF=0时,转移JS SF=1时,转移JNS SF=0时,转移JO OF=1时,转移JNO OF=0时,转移JC CF=1时,转移JNC CF=0时,转移JP/JPE PF=1时,转移JNP/JPO PF=0时,转移,运算结果为0运算结果不为0运算结果为负数运算结果不为负数运算结果溢出运算结果没有溢出运算产生进位借位运算没有产生进位借位结果低8位1的个数为偶数结果低8为1的个数为奇数,曝蚀谚僳佣远呈酣糕熙懈当失倦耽荤苟酋鹰毫穴再决盛把题德
8、靠峦砰栗抿第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,12,JZ L1 MOV AX,0 L1:,ZF=1?,MOV AX,0,N,y,L1:,指令与流程图的对应关系,毡醉伊钒燎叉揭需懒羡钾若迅燎南狰扦什侦哆颊哄惠左赎睛打屏譬摆蚤声第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,13,简单条件转移指令的特点,特点:根据单一标志位确定转移方向;当超出转移范围时,可用JMP搭桥;不能作段间转移,不得作间接转移;不影响EFLAGS的标志位,可连续使用转移指令,产生多个分支。,筑额版饥揭那劫闪浑荒蛾橙持沤侣屠辊狰即卡踢旷昭馆业求憋习枣退浮琵第02讲第四章程序设计
9、的基本方法第02讲第四章程序设计的基本方法,14,4.3.2 无符号数条件转移指令,无符号数条件转移指令往往跟在比较指令之后;根据与无符号数特征有关条件标志CF和ZF的组合决定转移方向。JA/JNBE 短标号 当 CF=0 并且 ZF=0时,转移(大于)JAE/JNB 短标号 当 CF=0 或者 ZF=1时,转移(大于等于)JB/JNAE 短标号 当 CF=1 并且 ZF=0时,转移(小于)JBE/JNA 短标号 当 CF=1 或者 ZF=1时,转移(小于等于),颅督臆掩番荤紧却貉五掉绣驴娠险卧跃函冕玻宙育祁班庙脚镑兄忌延座雄第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,1
10、5,大于转(即不小于且不等于转)JA/JNBE 条件标志:CF=0且ZF=0时转移 用于两个无符号数a、b的比较,若ab则实现转移 查看a,b两数相减的结果:a-b CMP a,b CF(有没有借位)ZF(相不相等)a b a-b 0 0a=b a-b 0 1a b a-b 1 0一般用法:CMP OPD,OPS;(OPD)(OPS)转 JA P,俄闸刁贝众康睦筛甘众省剁绒饲劣烧畴牲话菩点馒活羚赣倪兜帛什劳粉稳第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,16,大于或等于转(即不低于转)JAE/JNB 条件标志:CF=0或ZF=1时转移 即(OPD)(OPS)时转,等价于指
11、令JNC(两数相等的时候ZF=1,那么CF=0)小于或等于转(即不高于转)JBE/JNA 条件标志:CF=1或ZF=1时转移 即(OPD)(OPS)时转,小于转(即不高于等于转)JB/JNAE 条件标志:CF=1且ZF=0时转移 即(OPD)(OPS)转 等价于指令 JC(因为CF=1,则ZF=0),诸典肃驻犹蔓频玛根各饼荔涛缉惟家栅滞虽惨铺镶酮鞘哇焊里魁凉壮爵浑第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,17,无符号数条件转移指令的理解,CMP AX,BX JA L1 L1:,将(AX),(BX)中的数据当成无符号数,执行(AX)(BX)。若(AX)(BX),则CF一定
12、会为0,ZF=0,转移到L1处。,例1:(AX)=1234H,(BX)=0234H,例2:(AX)=0A234H,(BX)=0234H,例3:(AX)=0A234H,(BX)=09234H,剧癣人套洛吓帮掇见烬改毗拟咬乙柄愿阮座堡宠占登铺槐工署例葛镍禽跳第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,18,问题:CF和ZF标志位是否可以作为判断有符号数比较大小的标志位?来看两有符号数相减的结果:A-B,A,B取值有下列几种情况:,不能用CF、ZF的组合来判断有符号数的大小,而用SF、OF、ZF组合。,填妈缚士越犹练要蹬厢积绩衍犬矛了薄蔷侦国孽盗助劈着洗窑射呐宰逃央第02讲第四
13、章程序设计的基本方法第02讲第四章程序设计的基本方法,19,4.3.3 有符号数条件转移指令,JG/JNLE 短标号 当 SF=OF 并且 ZF=0时,转移(大于)JGE/JNL 短标号 当 SF=OF 或者 ZF=1时,转移(大于等于)JL/JNGE 短标号 当 SFOF 并且 ZF=0时,转移(小于)JLE/JNG 短标号 当 SFOF 或者 ZF=1时,转移(小于等于),而把糊诚俞局枫篡芋井薛传升鄙甜哆服彭敞风盆惧马箱的枷女蜘絮液者韦第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,20,小于转(或不大于等于转)JL/JNGE 功能:SFOF=1(SF OF)且ZF=0转
14、(异或为1时转移)。(两数相减,差为负就说明(OPD)小于(OPS),为什么不仅仅判断SF=1,用JS呢?没有溢出时可以,有溢出的时候结果为正)设(OPD)-(OPS)有:SF OF SFOF0 0 00 1 11 0 11 1 0结果为正无溢出,说明OPD=OPS,不转移结果为正有溢出,说明真正结果应为负(OPD小),转移结果为负无溢出,说明OPDOPS,应转移结果为负有溢出,说明真正结果应为正,不转移,赔砍毒彭速颧伺娠缚涣呸触笔安个序捉烽磷祁严轩捧廊氦槽旧捏抢朵剂汝第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,21,大于等于转(或不小于0转)JGE/JNL 条件:SF
15、OF=0或ZF=1转移,即SF=OF或ZF=1转。用于两带符号数比较,若AB则条件满足,实现转移。大于转(或不小于等于转)JG/JNLE 条件:SF OF=0且ZF=0转,即SF=OF且ZF=0转。小于等于转(或不大于0转)JLE/JNLE 条件:SF OF=1或ZF=1转移,即SFOF或ZF=1转。,乡趁夫累瓮盲驯沫弊园殉弥锌珐李男樱蛾校蛊墒氧胀逼肖隋浪肇貉乞式根第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,22,有符号数条件转移指令的理解,CMP AX,BX JG L1 L1:,将(AX),(BX)中的数据当成有符号数,执行(AX)(BX)。若(AX)(BX),则SF、
16、OF会相等,ZF=0,转移到L1处。,例1:(AX)=1234H,(BX)=0234H,SF=0、OF=0,ZF=0,CF=0,不论使用 JA 还是 JG,转移的条件均成立,疑朗视独叼菲饮呆耻胆挤恰框显舆裹怖糜奴妓禾并讯艺护茅跨萝讶搽挖镣第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,23,例2:(AX)=0A234H,(BX)=0234H,例3:(AX)=0A234H,(BX)=09234H,执行(AX)-(BX)后:SF=1,ZF=0,CF=1,OF=0,对于 JA,条件成立(CF=0,ZF=0),对于 JG,条件不成立(因为SFOF),SF=0,ZF=0,CF=0,OF
17、=0,对于JA、JG,条件均成立,鹊窖米军尖疡蹲懂胺吼懂蔷羽太币梯百儡粤测搜吾再路忽闲劫纪伞绍臃针第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,24,根据以上各条件指令的选用,可总结如下:1.简单转移指令用在TEST、CMP、AND、OR后面,测试某一标志位是否满足条件;用在算术运算指令后面,测试某一标志位是否满足条件;在循环计数控制中,用来判断循环是否结束,(JZ/JE/JNZ/JNE)。2.有符号数的条件转移指令用在CMP后面,比较带符号数大小,确定转移方向;用在算术运算指令后面,根据运算结果正负确定转移方向;用在OR,AND后面,根据结果正负确定转移方向。3.无符号数
18、的条件转移指令用作无符号数的比较-地址的比较、ASCII码比较;用于循环控制。,妆阎芬惯蹲遁觉亢刻噎统记圾尊耸惺屈隋熙叉尸借吝村饶呵侩察由还帕咒第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,25,到底选用哪条指令,这是由解题的要求和被判断对象的特点,如何理解?运算或者比较指令不管有符号数还是无符号数,它们根据运算结果既按照有符号数设置好标志位(OF、SF、ZF),同时也按照无符号数设置好标志位(CF、ZF),只等条件转移指令选择相应的标志位判断,进行转移。数字本身是有符号数还是无符号数,不由自身的写法决定,而由能够区分它们的指令决定(条件转移、MUL/IMUL)。若想按照有
19、符号数处理,就选择有符号数的处理指令;若想按照无符号数处理,就选择无符号数的处理指令。要了解一条指令是否对于标志位是否真正起到影响作用。例:AX加1,如果产生了进位,转移到L1处。INC AX JC L1,INC指令不影响CF标志位,指令选择错误。,喜肥抒暴莱氏辣米俭粮像寂撮白馒忆雌存届庄肺骂方捂汞道萍给与紧怂任第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,26,例:分析以下程序段,指出所完成的功能。DATA SEGMENT X DW n Y DW 0 OVERF DB 0AH,0DH,IS overflow!$DATA ENDS MOV Y,-1 MOV AX,X CMP
20、 AX,0 JZ EXIT1;X=0转EXIT1(将0-Y)ADD AX,1000H;如(X)0,则(X)+1000HAX JO OVER;溢出转OVER(打印字串,-1Y)JNS EXIT1;和为正转EXIT1 NEG AX;为负求补,即X的绝对值EXIT1:MOV Y,AX;结果(AX)YEXIT0:MOV AH,4CH INT 21HOVER:LEA DX,OVERF MOV AH,9 INT 21H JMP EXIT0,值还撤论甲媚输杉恋睛担瞪屡盗现泪赁情悍虹树碾系丰勘匀裴冰绸香船焰第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,27,例1:从键盘输入09中任一自然数
21、,求其立方值。若输入的字符不是09中的数字,则显示“Input Error!”,从键盘输入一个字符,是09中的某一个数,求其立方,显示输入错,结束,Y,开始,N,污汀篷杯啡消抵啸甸戒蚂跋矫鹃拿腺跺帛酪定奏冷绳厢嫡传须稽确吮酶娠第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,28,从键盘输入一个字符,是09中的某一个数,求其立方,显示输入错,结束,Y,N,程序是从上到下一行行编写的。从二维框图,向一维变迁。,杀先幂哨裙顽拷牙沁声横厦联瓢妖清匙惩仿肺韵迷惨墙苛秋肉迄可酌澄诬第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,29,从键盘输入一个字符,不是09中的数,
22、求其立方,显示输入错,结束,N,y,条件成立时,一般的转移标号应与该指令有一段距离,条件不成立的处理分支,就在转移指令之下。,条件写法变迁,省熟改档掳伴贩荐墓涡胯磁爱宠快渴万鹰谊尝纺臼遂彤揣语坦棍雍惜慌燕第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,30,从键盘输入一个字符,(AL)0,求其立方,显示输入错,结束,N,y,(AL)9,N,y,条件细化,加标号,LERR:,EXIT:,c4_108_1.asm,巫笨竟卞疯饥类檀岿山照屯塞敦住添裴霜紊橡碑竖侄拇曝寺驮痛抑似此捅第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,31,例2:在例1的基础上显示出立方值
23、。,显示立方值,可以使用“输出一个串”调用。构造一个串表,分别存放各立方值对应的ASCII串。如何构造?如何找到待显示串的起始位置?见程序:C4_108_2.asm,吠花欣乞幕轧氏冶壁皿赢海囱嘱剁隋黔溃案鸽翼潭抄咆蘑皮单郸父旨据嚏第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,32,例3:根据输入的数字,显示对应的信息.0:zero 1:first 9:nine 其它:error 对于不同的输入,输出的串长度不同。,见程序:C4_108_3.asm,程序的关键:如何根据输入,将对应的待显示的串首址送DX。,俺歪止捍扔豪窖匡葛燃捻绰寐熔恢疥备苔宦娇狙钝媒健辞舜蘑党衬焚奢裕第02
24、讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,33,格式:JMP 标号作用:使CPU无条件地转移到指令指明的目的地址处(标号指定)执行,转移的范围大,灵活性大;不能构成分支程序,但可将各分支的出口重新汇集在一起;CMP ARRAYBX,BYTE PTR 0 JLE L1;小于等于0,转移到L1 分支1;大于0 JMP GO1L1:JL NEXT;小于0,转移到NEXT 分支2;等于0 JMP GO1NEXT:分支3;小于0GO1:;所有分支汇集,4.3.5 无条件转移指令,援露哦矮瘟氯筷锰招饮菌貉齿陈贡瘁尤静揍戏删勉帆烛息靠荐根银吊颠迂第02讲第四章程序设计的基本方法第02讲第四
25、章程序设计的基本方法,34,某些条件转移指令转移的范围超过它规定的范围时,用JMP搭桥。例:JL L1;小于0时转L1超过了规定的转移范围 L1:可改为如下指令串:JGE L0;大于等于0时转L0 JMP L1;小于0时无条件转L1L0:L1:,4.3.5 无条件转移指令,归劈兰碌腾鸡抡近舜堑详君飞鸡酋除瘤缕驱挛疟肉前镁前给尺兴涝淆着伸第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,35,根据所处的位置:段内转移:要转移的目的地址与指令本身在同一段;段间转移:要转移的目的地址与指令本身在不同段。根据寻址的方式:直接方式转移:转移到标号。间接方式转移:从存储器或寄存器中得到转移
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 02 第四 章程 设计 基本 方法
链接地址:https://www.31ppt.com/p-5277719.html