选择结构程序设计课件_第1页
选择结构程序设计课件_第2页
选择结构程序设计课件_第3页
选择结构程序设计课件_第4页
选择结构程序设计课件_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六讲选择结构程序设计6.1分支程序设计的两种结构形式判定条件分支1分支2判定条件分支1分支2分支nYN…(1)(2)相当于C语言的if、else相当于C语言的switch()6.2与分支程序有关的指令1.无条件转移指令JMP1)段内直接短转移格式:JMP

SHORTOPR执行的操作:(IP)<-(IP)+8位位移量2)段内直接近转移格式:JMP

NEARPTROPR执行的操作:(IP)<-(IP)+16位位移量2.条件转移指令1)根据单个条件标志的设置情况转移JZ(或JE)(Jumpifzero,orequal)

结果为零(或相等)则转移格式:JE(或JZ)

OPR测试条件:ZF=1JNZ(或JNE)(Jumpifnotzero,ornotequal)结果不为零(或不相等)则转移格式:JNZ(或JNE)

OPR测试条件:ZF=01)根据单个条件标志的设置情况转移JS(Jumpifsign)

结果为负则转移格式:

JS

OPR测试条件:SF=1JNS(Jumpifnotsign)

结果为正则转移格式:JNS

OPR测试条件:SF=01)根据单个条件标志的设置情况转移JO(Jumpifoverflow)

溢出则转移格式:

JO

OPR测试条件:OF=1JNO(Jumpifnotoverflow)不溢出则转移格式:

JNOOPR测试条件:OF=01)根据单个条件标志的设置情况转移JP(或JPE)(Jumpifparity,orparityeven)奇偶位为1则转移格式:

JP

OPR测试条件:PF=1JNP(或JPO)(Jumpifnotparity,orparityodd)奇偶位为0则转移格式:

JNP(或JPO)

OPR测试条件:PF=03)比较两个带符号数,并根据比较的结果转移JL(或JNGE)(Jumpifless,ornotgreaterorequal)小于,或者不大于或者等于则转移JNL(或JGE)(Jumpifnotless,orgreaterorequal)不小于,或者大于或者等于则转移JLE(或JNG)(Jumpiflessorequal,ornotgreater)小于或等于,或者不大于则转移JNLE(或JG)(Jumpifnotlessorequal,orgreater)不小于或等于,或者大于则转移4)测试CX的值为0则转移指令JCXZ(JumpifCXregisteriszero)

CX寄存器的内容为零则转移格式:JCXZ

OPR测试条件:(CX)=06.2分支程序设计举例codesegmentassumecs:codeinput: movah,01h int21h cmpal,20h jzexit cmpal,61h jlinput cmpal,7bh jgeinput例1编写一个汇编语言程序,对键盘输入的小写字母用大写字母显示出来

subal,20h movdl,al movah,02h int21h jmpinputexit:movah,4ch int21hcodeendsend例2编写程序,从键盘接收一个小写字母,然后找出他的前导字母和后续字母,再按顺序显示这三个字符。codesegmentassumecs:codeinput: movah,07h int21h cmpal,20h jeexit cmpal,61h jlinput cmpal,7ah jginputprint:subal,01h movdl,al movah,02h int21haddal,01h movdl,al movah,02h int21h addal,01h movdl,almovah,02h int21h jmpinputexit:movah,4ch int21hcodeendsend例3将AX寄存器中的16位数分成4组,每组4位,然后把这四组数分别放在AL,BL,CL和DL中Datasegment

Xdb4dup(?)DataendsCodesegmentassumecs:code,ds:datastart:pushds

subax,ax

pushax

movax,data

movds,ax

movax,1234h

movcl,04h

movch,4

movsi,0

movdi,0repeat:rolax,cl

movbl,al

andbl,0fh

movx[si],bl

incsi

decch

jnzrepeat

moval,x

movbl,x[1]

movcl,x[2]

movdl,x[3]

retcodeendsendstart

jal2movah,a+2mova,ahmova+2,all2:moval,a+1cmpal,a+2jal3movah,a+2mova+2,almova+1,ahl3:movah,2movdl,aordl,30hint21hmovdl,a+1ordl,30hint21hmovdl,a+2ordl,30hint21hmovah,4chint21hcodendsendstart例5比较数组BUF中的三个16位补码,若三个数都不相等则显示0,有两个相等则显示1,都相等则显示2。假定三个数为a、b、c,D为比较结果STACK SEGMENT STACK DB200DUP(0)STACK ENDSDATA SEGMENTBUF DWa,b,cDATA ENDSCODE SEGMENTASSUMECS:CODE,DS:DATA,SS:STACKBEGIN: MOVAX,DATA MOVDS,AX MOVDL,0 MOVAX,BUF ;a→AX CMPAX ;BUF+2;a=b? JNZ L1 INC DLL1: MOVBX ;BUF+2;b→BX CMPBX,BUF+4 ;b=c? JZL2 ;b=c转L2 CMPAX,BUF+4 JNZL3 ;a≠c转L3L2: INC DLL3: ADDDL,30H ;(DL)变为ASCII码

MOVAH,2 INT21H MOVAH,4CH INT21HCODE ENDS ENDBEGINL3L2L1NYYNYND=0a=b?D+1→Db=c?a=c?D+1→D显示D开始结束例6设A、B、C三个单元存放着三个数,若三个数都不为0,则求三数之和放在D单元内,若其中有一个为0,则将另外两个也清0。此题为判断A、B、C三个数是否为0的分支程序。存贮单元的分配,题目已告诉,变量名分别为A、B、C、D,都为字变量。STACK SEGMENT STACK DB200DUP(0)STACK ENDSDATA SEGMENTA DWaB DWbC DWcD DW?DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA,SS:STACKBEGIN: MOVAX,DATA MOVDS,AX CMPA,0 JZL1 CMPB,0 JZL1 CMPC,0 JZL1 MOVAX,A ADDAX,B ADDAX,C MOVD,A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论