第02讲第四章程序设计的基本方法.ppt

上传人:京东小超市 文档编号:5980122 上传时间:2020-08-19 格式:PPT 页数:131 大小:480KB
返回 下载 相关 举报
第02讲第四章程序设计的基本方法.ppt_第1页
第1页 / 共131页
第02讲第四章程序设计的基本方法.ppt_第2页
第2页 / 共131页
亲,该文档总共131页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第02讲第四章程序设计的基本方法.ppt》由会员分享,可在线阅读,更多相关《第02讲第四章程序设计的基本方法.ppt(131页珍藏版)》请在三一文库上搜索。

1、1,第四章 程序设计的基本方法,4.1 概述,程序设计要点: 分析问题的需求,选择好解决方法; 针对选定的算法,编写高质量的程序。 一个高质量的程序不仅要满足正确性的要求,而且还应尽可能实现以下几点: (1)结构清晰、简明、易读、易调试。结构好 (2)执行速度快。 效率高 (3)占用存储空间少。 资源少,势结仁坷胰薯冠妨窟逗露铆诛常席颊乓宪桐簿狰来奶室做沪潭焉源涕矫其第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,2,汇编语言程序设计的一般步骤: (1)分析问题,选择合适的解题方法。 (2)根据具体问题,确定输入输出数据的格式。 (3)分配存贮区并给变量命名(包括分配寄存器)

2、。 (4)绘制程序的流程图,即将解题方法和步骤用程序流程图的形式表示出来。 (5)根据流程图编写程序。 (6)静态检查与动态调试,椽汇姓然瑞接泻认纷鳖腋呀寺桃炕子裤辞幅松劲麦蛹奢堑氰藉茵糊疤穴钥第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,3,几种程序设计方法: 顺序程序设计 分支程序设计 循环程序设计 子程序的设计 本章主要讲解: 各种转移指令格式、功能及使用条件 分支程序设计 循环程序设计 子程序的设计,本章主要讲述的内容,蒙做秆叹输瞧岸抒芍妄迭扭姐急惶勉垫饵顿蛤戳挖出厨夸汹侮涡愈认冈背第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,4,几种框图符号,

3、1. 起始、终止框 2判断框 3处理说明框 4子程序或过程调用框 5. 流向框 6连接框,1,诣订冻级淤吗宣颗通寨说罐夜党苑呛船碍狄缕月渝孩苯擒烷剁赊难辊铂驾第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,5,4.3.4 分支程序设计,分支程序的特点:根据不同情况作出不同的处理,程序结构分成了若干支路。 分支的结构形式: (1) (2) 结构特点: 程序运行方向是向前的,条件确定,只能执行分支中的一个。 机器根据不同的情况作出判定,有选择的执行相应的分支。 这类程序称之为分支程序。,鼠指涟卿竞潞蘑拄肆又牵兆疹翟枝悍殿细蘑凡脉阂革缔砰脓颇虞张稼埃谓第02讲第四章程序设计的基本方

4、法第02讲第四章程序设计的基本方法,6,问题:计算机怎样判断这些分支?,(1)分支由条件转移指令产生,不同条件通过EFLAGS的标志位状态(0或1)反映出来; (2)转移指令不影响EFLAGS的标志位,可连续使用转移指令,产生多个分支。 例:可以产生如下的多个分支。 CMP BYTE PTR ARRAYBX, 0 JLE L1 ; 小于等于0,转移到L1 分支1 ; 大于0 L1: JL NEXT ; 小于0,转移到NEXT 分支2 ; 等于0 NEXT: 分支3 ; 小于0,富绵畦享抹狂桑粒警鸽秧叙抓虹乃瘩藤溯纶慷喀结斥眺潞鄙澈星罗诵磨沪第02讲第四章程序设计的基本方法第02讲第四章程序设计

5、的基本方法,7,4.3.4 分支程序设计要点,选择合适的转移指令; 为每个分支安排出口; 将分支中的公共部分尽量放到分支前或分支后的公共程序段中; 流程图、程序对应; 调试时,逐分支检查。,阁汉册扭掘异郭稚饶现婶章宗车走首荚砍身毅逢忽扎基妆茵翁评挣磺强厕第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,8,转移指令的特点,特点: (1)改变程序的执行顺序,即改变指令指针CS:IP/EIP的值; (2)不改变标志位。 主要用于设计分支程序,关键在于根据需要,根据各个标志位的不同状态,选用合适的转移指令。,忠丹届畦牺篱矛谓娇桓泪嗡匣俄蒸搪虾驼凄沁碳霜谣绽幽恫韦屎吾害社羊第02讲第四

6、章程序设计的基本方法第02讲第四章程序设计的基本方法,9,转移指令的分类,转移指令,条件转移,无条件转移,简单条件转移 (10条),无符号数条件转移(4),有符号数条件转移(4),段内直接、段间直接,段内间接、段间间接,毋财膏奈阔纶以舟泻豢菲察贼芽褥缚钝版茹涅诣昂剿樟罗粮曹怕矢美驯屹第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,10,4.3.1 简单条件转移,根据单个标志位 CF、ZF、SF、OF、PF的值确定是否转移,之所以称之为简单条件,就是因为它只根据一个标志位进行跳转。,语句格式:,标号: 操作符 短标号,短标号是一个标号。该标号代表条件成立时,想转移到的目的地址。

7、若该目的地址与当前(IP)之间的字节距离在-128 127之间,则称该标号为短标号。,互壮砍瓦挖奴斑擎斤栽陀擎忍向酪丙蚂蓄卞这上怜糜邯囱屉鸦电鹿区眶捍第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、算结果没有溢出 运算产生进位借位 运算没有产生进位借位 结果低8位1的个数为偶数 结果低8为1的个数为奇数,曝蚀谚僳佣远呈酣糕熙懈当失倦耽荤苟酋鹰毫穴再决盛把题德靠峦砰栗抿第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,12,JZ L1 MOV AX , 0 L1:,ZF = 1?,MOV AX ,0 ,N,y,L1:,指令与流程图的对应关系,毡醉伊钒燎叉揭需懒羡钾若迅燎南狰扦什侦哆颊哄惠左赎睛打屏譬摆蚤声第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,13,简单条件转移指令的特点,特点: 根据单一标志位确定转移方向; 当超出转移范围时,可用JMP搭桥; 不

9、能作段间转移,不得作间接转移; 不影响EFLAGS的标志位,可连续使用转移指令,产生多个分支。,筑额版饥揭那劫闪浑荒蛾橙持沤侣屠辊狰即卡踢旷昭馆业求憋习枣退浮琵第02讲第四章程序设计的基本方法第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时,转移(小于) J

10、BE / JNA 短标号 当 CF=1 或者 ZF=1时,转移(小于等于),颅督臆掩番荤紧却貉五掉绣驴娠险卧跃函冕玻宙育祁班庙脚镑兄忌延座雄第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,15, 大于转(即不小于且不等于转)JA/JNBE 条件标志:CF=0且ZF=0时转移 用于两个无符号数a、b的比较,若ab则实现转移 查看a,b两数相减的结果:a-b CMP a,b CF(有没有借位) ZF(相不相等) a b a - b 0 0 a = b a - b 0 1 a b a - b 1 0 一般用法: CMP OPD,OPS ;(OPD)(OPS)转 JA P,俄闸刁贝众

11、康睦筛甘众省剁绒饲劣烧畴牲话菩点馒活羚赣倪兜帛什劳粉稳第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,16, 大于或等于转(即不低于转) JAE/JNB 条件标志:CF=0或ZF=1时转移 即(OPD) (OPS)时转, 等价于指令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),诸典肃驻犹蔓频玛根各饼荔涛缉惟家栅滞虽惨

12、铺镶酮鞘哇焊里魁凉壮爵浑第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,17,无符号数条件转移指令的理解,CMP AX,BX JA L1 L1:,将(AX),(BX)中的数据当成无符号数, 执行 (AX) (BX)。若 (AX)(BX), 则CF一定会为0,ZF=0,转移到L1处。,例1: (AX)= 1234H, (BX)=0234H,例2: (AX)= 0A234H, (BX) =0234H,例3: (AX)= 0A234H, (BX) =09234H,剧癣人套洛吓帮掇见烬改毗拟咬乙柄愿阮座堡宠占登铺槐工署例葛镍禽跳第02讲第四章程序设计的基本方法第02讲第四章程序设计的

13、基本方法,18,问题:CF和ZF标志位是否可以作为判断有符号数比较大小的标志位?来看两有符号数相减的结果:A-B,A,B取值有下列几种情况:,不能用CF、ZF的组合来判断有符号数的大小,而用SF、OF、ZF组合。,填妈缚士越犹练要蹬厢积绩衍犬矛了薄蔷侦国孽盗助劈着洗窑射呐宰逃央第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,19,4.3.3 有符号数条件转移指令,JG / JNLE 短标号 当 SF=OF 并且 ZF=0时,转移(大于) JGE / JNL 短标号 当 SF=OF 或者 ZF=1时,转移(大于等于) JL / JNGE 短标号 当 SFOF 并且 ZF=0时,

14、转移(小于) JLE / JNG 短标号 当 SFOF 或者 ZF=1时,转移(小于等于),而把糊诚俞局枫篡芋井薛传升鄙甜哆服彭敞风盆惧马箱的枷女蜘絮液者韦第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,20, 小于转(或不大于等于转) JL/JNGE 功能:SFOF=1(SF OF)且ZF=0转(异或为1时转移)。(两数相减,差为负就说明(OPD)小于(OPS),为什么不仅仅判断SF=1,用JS呢?没有溢出时可以,有溢出的时候结果为正) 设(OPD)- (OPS)有: SF OF SFOF 0 0 0 0 1 1 1 0 1 1 1 0 结果为正无溢出,说明OPD=OPS,

15、不转移 结果为正有溢出,说明真正结果应为负(OPD小),转移 结果为负无溢出,说明OPDOPS,应转移 结果为负有溢出,说明真正结果应为正 ,不转移,赔砍毒彭速颧伺娠缚涣呸触笔安个序捉烽磷祁严轩捧廊氦槽旧捏抢朵剂汝第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,21, 大于等于转(或不小于0转) JGE/JNL 条件:SF OF=0或ZF=1转移,即SF=OF或ZF=1转。 用于两带符号数比较,若AB则条件满足,实现转移。 大于转(或不小于等于转) JG/JNLE 条件:SF OF=0且ZF=0转,即SF=OF且ZF=0转。 小于等于转(或不大于0转) JLE/JNLE 条件

16、:SF OF=1或ZF=1转移,即SFOF或ZF=1转。,乡趁夫累瓮盲驯沫弊园殉弥锌珐李男樱蛾校蛊墒氧胀逼肖隋浪肇貉乞式根第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,22,有符号数条件转移指令的理解,CMP AX,BX JG L1 L1:,将(AX),(BX)中的数据当成有符号数, 执行 (AX) (BX)。若 (AX)(BX), 则SF、OF会相等,ZF=0,转移到L1处。,例1: (AX)= 1234H, (BX)=0234H,SF=0、OF=0, ZF=0, CF=0,不论使用 JA 还是 JG ,转移的条件均成立,疑朗视独叼菲饮呆耻胆挤恰框显舆裹怖糜奴妓禾并讯艺护

17、茅跨萝讶搽挖镣第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=0,对于JA、JG,条件均成立,鹊窖米军尖疡蹲懂胺吼懂蔷羽太币梯百儡粤测搜吾再路忽闲劫纪伞绍臃针第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,

18、24,根据以上各条件指令的选用,可总结如下: 1.简单转移指令 用在TEST、CMP、AND、OR后面,测试某一标志位是否满足条件; 用在算术运算指令后面,测试某一标志位是否满足条件; 在循环计数控制中,用来判断循环是否结束,(JZ/JE/JNZ/JNE)。 2.有符号数的条件转移指令 用在CMP后面,比较带符号数大小,确定转移方向; 用在算术运算指令后面,根据运算结果正负确定转移方向; 用在OR,AND后面,根据结果正负确定转移方向。 3.无符号数的条件转移指令 用作无符号数的比较-地址的比较、ASCII码比较; 用于循环控制。,妆阎芬惯蹲遁觉亢刻噎统记圾尊耸惺屈隋熙叉尸借吝村饶呵侩察由还帕

19、咒第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,25,到底选用哪条指令,这是由解题的要求和被判断对象的特点,如何理解? 运算或者比较指令不管有符号数还是无符号数,它们根据运算结果既按照有符号数设置好标志位(OF、SF、ZF),同时也按照无符号数设置好标志位(CF、ZF),只等条件转移指令选择相应的标志位判断,进行转移。 数字本身是有符号数还是无符号数,不由自身的写法决定,而由能够区分它们的指令决定(条件转移、MUL/IMUL)。 若想按照有符号数处理,就选择有符号数的处理指令; 若想按照无符号数处理,就选择无符号数的处理指令。 要了解一条指令是否对于标志位是否真正起到影响作

20、用。 例: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 AX,0 JZ EXIT1 ; X=0转EXIT1(将0-Y) ADD AX,1000H ; 如(X)0,则(X)+100

21、0HAX JO OVER ; 溢出转OVER(打印字串,-1Y) JNS EXIT1 ; 和为正转EXIT1 NEG AX ; 为负求补,即X的绝对值 EXIT1:MOV Y,AX ; 结果(AX)Y EXIT0: MOV AH,4CH INT 21H OVER: LEA DX,OVERF MOV AH,9 INT 21H JMP EXIT0,值还撤论甲媚输杉恋睛担瞪屡盗现泪赁情悍虹树碾系丰勘匀裴冰绸香船焰第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,27,例1:从键盘输入09中任一自然数,求其立方值。若输入的字符不是09中的数字,则显示“Input Error!”,从键盘

22、输入一个字符,是09中的某一个数,求其立方,显示输入错,结束,Y,开始,N,污汀篷杯啡消抵啸甸戒蚂跋矫鹃拿腺跺帛酪定奏冷绳厢嫡传须稽确吮酶娠第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,28,从键盘输入一个字符,是09中的某一个数,求其立方,显示输入错,结束,Y,N,程序是从上 到下一行行编写的。 从二维框图,向一维变迁。,杀先幂哨裙顽拷牙沁声横厦联瓢妖清匙惩仿肺韵迷惨墙苛秋肉迄可酌澄诬第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,29,从键盘输入一个字符,不是09中的数,求其立方,显示输入错,结束,N,y,条件成立时,一般的转移标号应与该指令有一段距离

23、,条件不成立的处理分支,就在转移指令之下。,条件写法变迁,省熟改档掳伴贩荐墓涡胯磁爱宠快渴万鹰谊尝纺臼遂彤揣语坦棍雍惜慌燕第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,30,从键盘输入一个字符,(AL)0,求其立方,显示输入错,结束,N,y,(AL)9,N,y,条件细化,加标号,LERR:,EXIT:,c4_108_1.asm,巫笨竟卞疯饥类檀岿山照屯塞敦住添裴霜紊橡碑竖侄拇曝寺驮痛抑似此捅第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,31,例2:在例1的基础上显示出立方值。,显示立方值,可以使用“输出一个串”调用。 构造一个串表,分别存放各立方值对应的

24、 ASCII串。 如何构造? 如何找到待显示串的起始位置? 见程序 :C4_108_2.asm,吠花欣乞幕轧氏冶壁皿赢海囱嘱剁隋黔溃案鸽翼潭抄咆蘑皮单郸父旨据嚏第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,32,例3:根据输入的数字,显示对应的信息. 0 : zero 1 : first 9 : nine 其它:error 对于不同的输入,输出的串长度不同。,见程序: C4_108_3.asm,程序的关键:如何根据输入,将对应的待显示的串首址送DX。,俺歪止捍扔豪窖匡葛燃捻绰寐熔恢疥备苔宦娇狙钝媒健辞舜蘑党衬焚奢裕第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本

25、方法,33,格式:JMP 标号 作用: 使CPU无条件地转移到指令指明的目的地址处(标号指定)执行,转移的范围大,灵活性大; 不能构成分支程序,但可将各分支的出口重新汇集在一起; CMP ARRAYBX,BYTE PTR 0 JLE L1 ; 小于等于0,转移到L1 分支1 ; 大于0 JMP GO1 L1: JL NEXT ; 小于0,转移到NEXT 分支2 ; 等于0 JMP GO1 NEXT: 分支3 ; 小于0 GO1: ; 所有分支汇集,4.3.5 无条件转移指令,援露哦矮瘟氯筷锰招饮菌貉齿陈贡瘁尤静揍戏删勉帆烛息靠荐根银吊颠迂第02讲第四章程序设计的基本方法第02讲第四章程序设计的

26、基本方法,34,某些条件转移指令转移的范围超过它规定的范围时, 用JMP搭桥。 例:JL L1 ; 小于0时转L1超过了规定的转移范围 L1: 可改为如下指令串: JGE L0 ; 大于等于0时转L0 JMP L1 ; 小于0时无条件转L1 L0: L1: ,4.3.5 无条件转移指令,归劈兰碌腾鸡抡近舜堑详君飞鸡酋除瘤缕驱挛疟肉前镁前给尺兴涝淆着伸第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,35,根据所处的位置: 段内转移:要转移的目的地址与指令本身在同一段; 段间转移:要转移的目的地址与指令本身在不同段。 根据寻址的方式: 直接方式转移:转移到标号。 间接方式转移:从

27、存储器或寄存器中得到转移目的地的段地址和偏移地址。,4.3.5 无条件转移指令的分类,牧日躇库桐速哆浚政虑税娱础祝竿默蓬犯坯皋涎俘撞绘惰饼斩绰榴篓章煤第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,36,4.3.5 无条件转移指令,毕娩摆咙峨魂蚤钠龙逼矫除胀钩湍椭课蕴挽根点幅胡花苯织懒燕佬我痉归第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,37,(1)段内直接跳转 格式:JMP 标号 功能:(IP/EIP) + 相对位移量 IP/EIP 执行后 IP/EIP = 标号的EA (2)段间直接跳转 格式:JMP 标号 或 JMP FAR PTR 标号 功能:标

28、号所在段首址CS 标号的EAIP 以上寻址方式实际上均为立即寻址方式。 段内直接跳转:JMP 0018 段间直接跳转:JMP 0ABC:0000,无条件转移指令,钦怖铆芒晤杀昨霄坦疑烈方填嗅庐倘蚌郎蝶梗虎脯洒疽苍距忙薛胯绒缄栖第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,38,(3)段内间接跳转 格式:JMP OPD 功能:(OPD) IP/EIP 其中OPD为寄存器方式、存储器方式(寄存器间接、变址、基址变址、直接)寻址方式,OPD不能是立即数。 如果是寄存器寻址方式,则16/32位寄存器的内容为偏移地址IP/EIP。 16位段:16位寄存器的内容IP JMP AX 32

29、位段:32位寄存器的内容EIP JMP EDX,无条件转移指令,闯锭穆乡梆等鸡穗禄萨危怔忱甭截绦伦扒谓颁污瘦郧慰差弗钝舀捍庄既廊第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,39,(3)段内间接跳转 如果是存储器寻址方式,它实质是将由寻址方式得到的存储器内的操作数作为偏移地址IP/EIP。 16位段:字类型变量/存储区的内容IP WBUF DW ? JMP WBUF JMP WORD PTR BX,无条件转移指令,递皱奔碑忽动炯编清灰哭金跳翟捡览阜暮拢婚夕瞎裸帖毒亲刁蔽极矮段哑第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,40,我们来看看几种作用等价的段

30、内转移 ADDR16 DW ? JMP GO2 ; 直接转移 LEA BX,GO2 JMP BX ; 寄存器寻址的间接转移 LEA BX,GO2 MOV ADDR16,BX JMP ADDR16 ; 直接寻址的间接转移 LEA BX,GO2 MOV ADDR16,BX LEA BX,ADDR16 JMP BX ; 寄存器间接寻址的间接转移 GO2: ,妙宅祥刚裂屠舀竣副俊侯咐福至鞍燃概诬呜镀矗第点榷妄渣达掂融澡向藕第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,41,(4)段间间接转移 格式:JMP OPD 功能:(OPD)IP/EIP (OPD+2/4)CS 其中OPD只能

31、为存储器寻址方式。此时地址信息必须用一双字(16位段)或,三字或四字(32位段)单元存放。 对于16位段:双字类型变量/存储区的内容 (OPD)IP, (OPD+2)CS JMP OPD OPD OPD+2 IP CS,邮赐肩痕包痈速废梨趣狠菲憨隘是榷抿题黔札突汁蒸注廊溅盒案恒付酮重第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,42,看看几种作用等价的段间转移 ADDR32 DD ? JMP FAR PTR GO3 JMP FGO3 MOV AX,OFFSET GO3 MOV BX,SEG GO3 MOV WORD PTR ADDR32,AX MOV WORD PTR AD

32、DR32+2,BX JMP ADDR32 ; 在另一个段内 FGO3 LABEL FAR GO3:,具晤酉踊衍积衰履础透苍铸姨留葬很侥喂蛋戴魔港福拼猴村俱蓬碎稚并警第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,43,例:无条件转移指令。 JMP NEXT 直接方式的无条件转移指令 JMP WORD PTR BX 段内间接转移指令(16位段) *JMP DWORD PTR BXDS:BX指向的双字单元中存放着EA和段首址(16位段),窟式怀葫禹烃搅巷佣扫埔痕样坡丰倚抬褂竟驭遣言籽寐篆棚炕邱溃铝甚筒第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,44,无条件转

33、移指令中,若是间接方式,除了立即数寻址方式外,其它方式均可以使用。,设在数据段中有: BUF DW L1 ; L1为标号,JMP L1,(2) JMP BUF,LEA BX , BUF JMP WORD PTR BX,MOV BX , BUF JMP BX,功能等价的转移指令,层咳薛瘦桐观懂听动度临顶筛狈编砌氯诱企哈示揽车煤详镜愁舅爬腺扒颧第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,45,注意: (1)条件转移指令,只能使用短标号,是段内转移,且转移的范围在128127个字节内。 (2)无条件转移指令,可以是标号,也可以用某种寻址方式确定转移地址。转移范围不受限制。,设有

34、如下程序段: JZ L1 ; ZF=0,对应的程序段A L1: . ; ZF=1,对应的程序段B 若程序段A,B的长度均大于128个字节,怎么办?,JNZ L0 JMP L1 L0: . ; A L1: . ; B,嵌够骤避假丛祥稍喻浓侧人余焊闽班踢方貌屡用飘枯巴功踏朴霄乳阑秒登第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,46,例4:根据不同的输入,执行不同的程序片段。,输入1,执行程序段 LP1 : 输入2,执行程序段 LP2 : 输入3,执行程序段 LP3 : ,JMP LP1 JMP LP2 . JMP LP3,如果分支很多,每个分支均使用 JMP 标号,程序难看,

35、臃肿!,牧剁函澜辕潍奉智伍路铰熊彩岸耻锥塘戌茬避睛圾卜轰磕讯置桶乓隧挡讣第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,47,例5:段间直接转移指令,见 :c4_108_5.asm,兑礼俺尽皖液搀穷芳雁乡焕容挂泊貌选我亚瞬梆铆锰齿振神叫娜龚古诸沼第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,48,分支程序设计应该注意的问题,(1) 选择合适的转移指令 判断 x 中的内容, 为正,显示 positive 0 ; 为负,显示 0;为0,显示 zero,喉窒溃锅忆耗碍坯屋驴撬衷苦减捻饰集反船渭唐从怀滞假彰债禹仪翠塘隶第02讲第四章程序设计的基本方法第02讲第四章

36、程序设计的基本方法,49,X 0 ?,lea dx, zero,Lea dx, positive,结束,Y,X 0 ?,Lea dx, negative,Y,N,N,见 :c4_108_6.asm,臃蹭母鬃傍蕴淹婉眼卢强迟胎撑沃的斡虫籽响侍镶盅椅石哟翠侵端八敦阉第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,50,条件控制流伪指令 P323,.IF 条件表达式 语句序列 .ELSEIF 条件表达式 语句序列 .ELSE 语句序列 .ENDIF,条件表达式: 关系运算 = != = = (2) 逻辑运算 iBUFi) ALBUFi;,隆技立漂衔循祈种书家缴岿倦马末吗窖搽日乐凳滥

37、亢煞浦冠惑梗扰哲歧赦第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,58,程序 C4_113J1.asm, MOV AL, BUF MOV BX, 1 L1: CMP BX, N JGE EXIT CMP AL, BUFBX JGE L2 MOV AL, BUFBX L2: INC BX JMP L1 EXIT:,若BUF中存放的字数据,程序应作何修改? 最大数放在AX中。,褒肖筒蜘炬旷阿譬洞锅疡扑亥范砷澳箱酒仑呐券乖美柏扬侣匿野缆吴板沦第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,59,程序 C4_113J2.asm, MOV AX, BUF MOV E

38、BX, 1 L1: CMP EBX, N JGE EXIT CMP AL, BUFEBX*2 JGE L2 MOV AX, BUFEBX*2 L2: INC BX JMP L1 EXIT:,停醇石茸舔坚娶著必侩惠咬页撰徐矿溯兴镐锗铬奢腊魄匡是竭缉顶撂沸析第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,60,计数控制:循环次数已知时,常用 (1) 倒计数 将循环次数n ,送入一循环计数器中,某循环一次,计数器减1,直到其值为0。,4.4.2 循环控制方法, MOV CX,循环次数 LOOPA: DEC CX JNE LOOPA,聂珊比袄鼎灸庇抽浮送伪糠汹逗男租半笋多刘糟坚夷奋传

39、褥面橇们氯哄休第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,61,计数控制:循环次数已知时,常用 (2) 正计数 循环次数n 。 0送入一循环计数器中,某循环一次,计数器加1,直到其值为n。,4.4.2 循环控制方法, MOV CX,0 LOOPA: INC CX CMP CX, n JNE LOOPA,撬熏抢层炉丰赐捕穗吧庚窗踊算铣萤赴弃畜吁住乔僵协瘫茹箱纲竭菇陕怨第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,62,80X86提供的四种计数控制循环转移指令,4.4.2 循环控制方法,LOOP 标号 (CX / ECX) -1 CX / ECX 若 (C

40、X / ECX) 不为0, 则转标号处执行。 基本等价于: DEC CX / ECX JNZ 标号 (LOOP指令对标志位无影响 !) C4_115J.asm,邯蛮元岭垣链库徐谜字遣夹蛀拳勺很忱斗闰岗晚羞弧皋焉雪烤失消柞募犊第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,63,80X86提供的四种计数控制循环转移指令,(2) LOOPE /LOOPZ 标号 (CX / ECX) -1 CX / ECX 若 (CX / ECX) 不为0, 且ZF=1,则转标号处执行, 否则 顺序执行。 (等于或为0循环转移指令, 本指令对标志位无影响),例:判断以BUF为首址的10个字节中是否

41、有非0字节。 C4_115J.asm,MOV CX, 10 MOV BX, OFFSET BUF -1 L3 : INC BX CMP BYTE PTR BX, 0 LOOPE L3,异处抛汾矫议哭果旺淮伪鸿狮螺雍此释型盈垂旱巍迈谁停冈谤轻怕刻涤挺第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,64,80X86提供的四种计数控制循环转移指令,(3) LOOPNE /LOOPNZ 标号 (CX / ECX) -1 CX / ECX 若 (CX / ECX) 不为0, 且ZF=0,则转标号处执行。 (等于或为0循环转移指令, 本指令对标志位无影响),例:判断以MSG为首址的10个

42、字节中的串中是否有 空格 字符。 C4_115J.asm,MOV CX, 10 MOV BX, OFFSET MSG -1 L4 : INC BX CMP BYTE PTR BX, LOOPNE L4,呵傣谚池眩钟栏艰烤择舱落蝇匝无典免庭详积召厅驻航曹岔审走制板颜巡第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,65,80X86提供的四种计数控制循环转移指令,(4) JCXZ /JECXZ 标号 ; 跳转指令 格式:JCXZ/JECXZ 标号 Jump if CX is zero 功能:当寄存器CX/ECX的值为0时转移到标号处执行,否 则顺序执行。 该指令常放在循环开始前,

43、用于检查循环次数是否为0,为0时跳过循环体;也常与比较指令等组合使用,用于判断是由于计数值的原因还是由于满足比较条件而终止循环。 MOV CX,COUNT JCXZ GO1 L1: LOOP L1 GO1: ,共饰监卧袄褐毫遂姿琅女缕半篙汁嘲近便写始厢寥窑铝读沪橱华毯卵颅求第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,66,关于使用循环控制指令LOOP需要注意的问题: 使用固定的寄存器CX/ECX; 所有的循环转移指令本身实施的对CX/ECX的值减1的操作不影响标志位; 16位段的程序, LOOP、LOOPZ、LOOPNZ缺省使用CX寄存器;32位段程序,使用ECX寄存器;

44、 标号为短标号,即位移量只能为-128 127之间。,躬够键祖鞋锐胎劈津纶绚睬跳滓铜修吃惰斜贝狙果既苦托焚庶贝鳖桥浊册第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,67,条件控制: 循环次数未知。但是循环结束与某些条件(比较、运算的结果等等)相关,比较所要求的条件是否达到,未满足继续循环,否则结束循环。 在解决实际问题时,往往要根据问题给定的已知条件,在认真分析算法之后才能确定选用哪种方法。,睹恫钞料秃皂沼赤抑滩磅忍糟音壹避毋彭炯条切敖涅嘴芭杉董暮豌号辉壬第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,68,阅读程序段,指出其功能: MOV CL, 0 L

45、: AND AX , AX JZ EXIT SAL AX , 1 JNC L INC CL JMP L EXIT:,购驳盎甲翼茄涌正汀椅舒论饭厕翱去又哺予彦播亮毗咳渭驶虱挝仙版高朴第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,69,阅读程序段,指出其功能: MOV CL, 0 MOV BX, 16 L: SAL AX , 1 JNC NEXT INC CL NEXT: DEC BX JNZ L,刚染广滁懂累辑吵虞渝士捐凶了酮那悯谍咖顶丰匆坍哆筋抑物殷夫倪恨恭第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,70,例1:已知 有n个元素存放在以BUF为首址的

46、字节存储区中,试统计其中负数的个数,C4_117.asm,循环 n次; 有些同学认为在循环体中,每次访问下一个单元,有:,L1: . INC BUF DEC CX JNZ L1,; 将 BUF的地址加1,错误的原因,实质为将BUF的内容加1。,解璃处伴沁所寒旬咆谴芹芽昧荤毒赋扎响保鹏因亨兄氮躬雅规咒耀畦细然第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,71,例2:以BUF为首址的字节存储区中,存放以$作结束标志的字符串。显示该串,并要求将其中的小写字母转换成大写字母显示。,见程序: c4_118.asm,孪本剑囱测俱景镍副摩骂瞻专主妈促狐咐棚蔚拙皆扛结容瀑握雄膨脊吵步第02

47、讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,72,例3:输入一个数字串, 将其转换成字数据(即二进制形式),以16进制形式显示出来,见程序: c4_121_1.asm,(输入的串最长为5个字符,不考虑符号),输入缓冲区的定义 转换方法 (AX) 存放转换的结果,初始为0。 (SI) 输入缓冲区指针,指向待转换字符 从上至下(即串从左到右)依次读入各字符,一边读入一边转换。设新字符为 X, 则: (AX) 10 X AX 。 即读入X后的结果。Try 123 的转换。,遣垦诧堕棱哀沥正峙慨份钦琢虚祸链代肾停泥异墒哀缺键近褐弃蕊你芭挛第02讲第四章程序设计的基本方法第02讲第四章程

48、序设计的基本方法,73,例:将一个无符号字节数转换成10进制形式显示。 C4_121_2.asm,例6:将一个有符号字节数转换成10进制形式显示。 C4_121_3.asm,南陈筷悯哮糙睁唇篱襄辨耽仲婿廊漠峭疹畴熔贴院合揖箔丫胯娱鲸筷肿寐第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,74,循环程序设计中应该注意的问题:,比较不同指令次序,程序的运行结果 C4_121_4.asm,搽柴挚雄盈瘸饺翰惋泅一疟好锯哎颇枝滦旦凝峡瞄陪律而尊窝冯贵荣肢蕊第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,75,1. 子程序的概念,4.5 子程序设计,段内直接、段间直接 段内间接、段间间接,2. 子程序的调用与返回,3. 子程序的定义格式及现场保护方法,4. 主程序与子程序之间的参数传递,七年月练膊限伙洛轨匆邵镭粪禄炭腊曰悔太揉吾吗檄赔铡亿等著壶确盈溺第02讲第四章程序设计的基本方法第02讲第四章程序设计的基本方法,76,在编写程序时,常常出现如下

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1