




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章 程序设计的基本方法,微机原理与接口技术 2010.5,2,4.4 汇编语言程序设计方法,4.4.1 概述 4.4.2 分支程序设计 4.4.3 循环程序设计 4.4.4 子程序设计,3,设计一个程序要点: 认真分析问题的需求,选择好解决方法; 针对选定的算法,编写高质量的程序。 一个高质量的程序不仅要满足设计的要求,而且还应尽可能实现以下几点: (1)结构清晰、简明、易读、易调试。结构好 (2)执行速度快。 效率高 (3)占用存储空间少。 资源少,4.4.1 概述,4,(1)分析问题,选择合适的解题方法。 (2)根据具体问题,确定输入输出数据的格式。 (3)分配存贮区并给变量命名(包括分配寄存器)。 (4)绘制程序的流程图,即将解题方法和步骤用程序流程图的形式表示出来。 (5)根据流程图编写程序。 (6)静态检查与动态调试。,汇编语言程序设计的一般步骤,5,几种框图符号,起始、终止框 判断框 处理说明框 子程序或过程调用框 流向框 连接框,1,6,分支程序的特点:根据不同情况作出不同的处理,程序结构分成了若干支路。 分支的结构形式: (1) (2) 结构特点: 程序运行方向是向前的,条件确定,只能执行分支中的一个。 机器根据不同的情况作出判定,有选择的执行相应的分支。 这类程序称之为分支程序。,4.4.2 分支程序设计,7,(1)分支由条件转移指令产生,不同条件通过FLAGS的标志位状态(0或1)反映出来; (2)转移指令不影响FLAGS的标志位,可连续使用转移指令,产生多个分支。 例:可以产生如下的多个分支。 CMP BYTE PTR ARRAYBX, 0 JLE L1 ; 小于等于0,转移到L1 分支1 ; 大于0 L1: JL NEXT ; 小于0,转移到NEXT 分支2 ; 等于0 NEXT: 分支3 ; 小于0,问题:计算机怎样判断这些分支?,8,选择合适的转移指令; 为每个分支安排出口; 将分支中的公共部分尽量放到分支前或分支后的公共程序段中; 流程图、程序对应; 调试时,逐分支检查。,分支程序设计要点,9,特点: (1)改变程序的执行顺序,即改变指令指针CS:IP的值; (2)不改变标志位。,4.4.2.1 转移指令,设计分支程序的时候,关键在于根据需要,根据各个标志位的不同状态,选用合适的转移指令。,10,转移指令,条件转移,无条件转移,简单条件转移 (10条),无符号数条件转移(4),有符号数条件转移(4),段内直接、段间直接,段内间接、段间间接,转移指令的分类,11,1 无条件转移指令,格式:JMP 标号 作用: 使CPU无条件地转移到指令指明的目的地址处(标号指定)执行,转移的范围大,灵活性大; 不能构成分支程序,但可将各分支的出口重新汇集在一起;,CMP ARRAYBX, BYTE PTR 0 JLE L1 ; 小于等于0 分支1 ; 大于0 JMP GO1 L1: JL NEXT ; 小于0 分支2 ; 等于0 JMP GO1 NEXT: 分支3 ; 小于0 GO1: ; 所有分支汇集,12,某些条件转移指令转移的范围超过它规定的范围时, 用JMP搭桥。 例:JL L1 ; 小于0时转L1 L1: 可改为如下指令串: JGE L0 ; 大于等于0时转L0 JMP L1 ; 小于0时无条件转L1 L0: L1: ,1 无条件转移指令,; 超过了规定的转移范围,13,根据所处的位置分类: 段内转移:要转移的目的地址与指令本身在同一段; 段间转移:要转移的目的地址与指令本身在不同段。 根据寻址的方式分类: 直接方式转移:转移到标号。 间接方式转移:从存储器或寄存器中得到转移目的地的段地址和偏移地址。,1 无条件转移指令,14,1 无条件转移指令,15,例: JMP NEXT 直接方式的无条件转移指令 JMP WORD PTR BX 段内间接转移指令(16位段) JMP DWORD PTR BXDS:BX指向的双字单元中存放着EA和段首址(16位段),1 无条件转移指令例,16,2 条件转移指令,条件转移指令语句格式: 操作符 标号 JX 标号 功能:如果转移条件满足,则标号的EA(立即数) IP 否则,执行紧跟转移指令之后的那条指令。,17,2 条件转移指令,例如: JZ NEXT INC AX NEXT:DEC CX ,E9 00 01 40 49 ,0100H,0103H,0203H,JZ NEXT,INC AX,DEC AX,位移量=标号EA下一条指令EA,有符号数,位移量,18,2 简单条件转移,特点: 只能是段内直接跳转,即: (1) 用立即数改变IP的值,不改变CS。 (2)为有符号数,0 向前转,否则往回转。 (3)16位段:汇编程序计算的位移量在 IF -128127之间时,翻译成8位有符号数; ELSE IF -3276832767间时,翻译成16位有符号数; ELSE ERROR。,19,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的个数为奇数,(1) 简单条件转移指令,20,JZ L1 MOV AX , 0 L1:,ZF = 1?,MOV AX ,0 ,N,Y,L1:,指令与流程图的对应关系,21,特点: 根据单一标志位确定转移方向; 当超出转移范围时,可用JMP搭桥; 不能作段间转移,不得作间接转移; 不影响FLAGS的标志位,可连续使用转移指令,产生多个分支。,(1) 简单条件转移指令,22,例:分析以下程序段,指出所完成的功能。, MOV Y,-1 MOV AX,X CMP AX,0 JE EXIT1 ADD AX,1000H JO OVER JNS EXIT1 NEG AX EXIT1: MOV Y,AX EXIT0: MOV AH,4CH INT 21H OVER: LEA DX,OVERF MOV AH,9 INT 21H JMP EXIT0,DATA SEGMENT X DW n Y DW 0 OVERF DB 0AH,0DH,IS overflow!$ DATA ENDS,23,无符号数条件转移指令往往跟在比较指令之后; 根据与无符号数特征有关条件标志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时,转移,(2) 无符号数条件转移指令,24, 大于转(即不小于且不等于转)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,(2) 无符号数条件转移指令,25, 大于或等于转(即不低于转) JAE/JNB 条件标志:CF=0或ZF=1时转移 即(OPD) (OPS)时转, 等价于指令JNC(两数相等的时候ZF=1 ,那么CF=0) 小于或等于转(即不高于转) JBE/JNA 条件标志:CF=1或ZF=0时转移 即(OPD)(OPS)时转, 小于转(即不高于等于转) JB/JNAE 条件标志:CF=1且ZF=0时转移 即(OPD)(OPS)转 等价于指令 JC(因为CF=1,则ZF=0),(2) 无符号数条件转移指令,26,JG / JNLE 短标号 当 SF=OF 且 ZF=0时,转移 JGE / JNL 短标号 当 SF=OF 或者 ZF=1时,转移 JL / JNGE 短标号 当 SFOF 且 ZF=0时,转移 JLE / JNG 短标号 当 SFOF 或者 ZF=1时,转移,(3) 有符号数条件转移指令,27,问题:CF和ZF标志位是否可以作为判断有符号数比较大小的标志位?来看两有符号数相减的结果:A-B,A,B取值有下列几种情况:,不能用CF、ZF的组合来判断有符号数的大小,而用SF、OF、ZF组合。,28, 小于转(或不大于等于转) 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,不转移 结果为正有溢出,说明真正结果应为负(OPD小),转移 结果为负无溢出,说明OPDOPS,应转移 结果为负有溢出,说明真正结果应为正 ,不转移,(3) 有符号数条件转移指令,29, 大于等于转(或不小于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 条件:SF OF=1或ZF=1转移,即SFOF或ZF=1转。,(3) 有符号数条件转移指令,30,例1:请实现:(AX)小于0转A处执行。,CMP AX, 0 JL A,TEST AX, 8000H JNZ A,AND AX, AX JL A,ADD AX, 0 JL A,SUB AX, 0 JL A,OR AX, 0 JL A,31,例2:(AX)+(-2) = AX, 如果结果小于0转L。,ADD AX,-2 JL L 问题:可以用JS吗?,No,此例中不能用JS,因为当(AX)=8001H时(即-7FFFH的补码) 说明两负数相加结果为正,产生溢出,仅用JS不发生转移。而此时OF=1、SF=0, SF OF=1,发生转移。,该例说明JL本质上是判断运算结果是否为负,而不仅仅是(OPD)(OPS). 可见,对于有符号数,只用一个标志位来判断是否转移往往会造成错误。要用有符号数条件转移指令,除非是和0进行比较。,32,例3:清除数据段中EA为8002H 2000H号字中的内容为0。,MOV BX,8002H L: MOV WORD PTRBX,0 SUB BX,2 CMP BX,2000H JAE L ;问题:此处用JGE会怎样?JNB呢?,不能循环,因为清第一个字后,EA修改为8000H,为负,跳出循环。,地址是一种无符号数。,33,根据以上各条件指令的选用,可总结如下: 1.简单转移指令 用在TEST、CMP、AND、OR后面,测试某一标志位是否满足条件; 用在算术运算指令后,测试某一标志位是否满足条件; 在循环计数控制中,用来判断循环是否结束(JZ /JE /JNZ /JNE)。 2.有符号数的条件转移指令 用在CMP后面,比较带符号数大小,确定转移方向; 用在算术运算指令后面,根据结果正负确定转移方向; 用在OR,AND后面,根据结果正负确定转移方向。 3.无符号数的条件转移指令 用作无符号数的比较-地址的比较、ASCII码比较; 用于循环控制。,34,例1:从键盘输入09中任一自然数,求其立方值。若输入的字符不是09中的数字,则显示“Input Error!”,从键盘输入一个字符,是09中的某一个数,求其立方,显示输入错,结束,Y,开始,N,35,从键盘输入一个字符,是09中的某一个数,求其立方,显示输入错,结束,Y,N,程序是从上到下一行编写的。 从二维框图,向一维变迁。,36,从键盘输入一个字符,不是09中的数,求其立方,显示输入错,结束,N,y,条件成立时,一般的转移标号应与该指令有一段距离,条件不成立的处理分支,就在转移指令之下。,条件写法变迁,37,从键盘输入一个字符,(AL)0,求其立方,显示输入错,结束,N,y,(AL)9,N,y,条件细化,加标号,LERR:,EXIT:,j1.asm,38,分支程序设计应该注意的问题(1),1.选择合适的转移指令。 例:CMP AX,0 JL L1 能不能换成JB,JS;JB:CF=1且ZF=0 2.要为每个分支准备好出口。 例:CMP AX,0 JGE L1 M
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 一千根弦续写350字10篇范文
- 我的语文老师350字(12篇)
- 时尚的鸭子课件
- 小学生元宵节作文202514篇
- 纪检业务知识培训课件讲稿
- 早期报警实操培训知识课件
- 《新编商务应用文写作》第二章 习题参考答案
- 商业场地租赁合同解除协议
- 2025年无损检测资格证考试超声波无损检测工程师试卷
- 纪律处分条例课件教学
- GB/T 14202-1993铁矿石(烧结矿、球团矿)容积密度测定方法
- 生活中的会计课件
- 辽宁大学学生手册
- 酒水购销合同范本(3篇)
- 新时代中小学教师职业行为十项准则考核试题及答案
- 某工业区供水管道工程施工组织设计
- 学习罗阳青年队故事PPT在急难险重任务中携手拼搏奉献PPT课件(带内容)
- 模具保养记录表
- 皮内针讲课课件
- 新水浒q传乡试会试测验题目
- 地基承载力计算
评论
0/150
提交评论