欢迎来到优知文库! | 帮助中心 分享价值,成长自我!
优知文库
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 优知文库 > 资源分类 > PPTX文档下载
    分享到微信 分享到微博 分享到QQ空间

    分支程序设计.pptx

    • 资源ID:270917       资源大小:111.74KB        全文页数:53页
    • 资源格式: PPTX        下载积分:9金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录
    二维码
    扫码关注公众号登录
    下载资源需要9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,如果您不填写信息,系统将为您自动创建临时账号,适用于临时下载。
    如果您填写信息,用户名和密码都是您填写的【邮箱或者手机号】(系统自动生成),方便查询和重复下载。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    分支程序设计.pptx

    第4章 分支分支程序设计程序设计4.1 简单分支简单分支程序程序4.2 多重分支程序多重分支程序 分支程序的结构形式有两种,如图4.1所示,这两种形式类似于高级语言里面的IF_THEN_ELSE语句和CASE。IF_THEN_ELSE语句可以引出两个分支,而CASE语句可以引出多个分支。在汇编语言里,实现分支选择的语句是通过跳转语句实现的,具体的实现方式如下:先对某一些变量进行比较,然后根据比较的结果跳转到不同的地方去执行。 实现分支的方法: 比较/转移法和跳转表转移法: 比较转移指令可嵌套,但程序结构复杂,跳转表可使程序结构清晰。4.1 简单分支程序简单分支程序 在编写分支程序时,要尽可能避免编写“头重脚轻”的结构 在编写分支结构时,一般先处理简单的分支,再处理较复杂的分支。对多分支的情况,也可遵循“由易到难”的原则。因为简单的分支只需要较少的指令就能处理完,一旦处理完这种情况后,在后面的编程过程中就可集中考虑如何处理复杂的分支 例例4.1 X为任意有符号字节数,若X为负数,则将其取补码,否则与Y相加,和存入AX中。 题目分析:在数据段中定义变量X和Y的值,取出X与比较大小,如果小于,则用求补指令NEG求出补码仍旧存入X存储单元;如果大于0,则计算X+Y的值并存入AX。 .MODEL TINY ;简短模式的程序定义 .DATA X DB -8 ;定义变量X Y DB 210 ; 定义变量Y .CODE STARTUP: MOV AX,DATA MOV DS,AX ;取出数据段的段地址 MOV AL,X ;X0?CMP AL,0 JGE BIG;如果X=0,跳转到BIG处与变量Y相加 NEG AL;如果Xhigh,则查找失败,置CF=1,程序结束;否则,计算中间位置mid=(low +high)/2 (3)查找元素k与中点元素rmid比较,若k= rmid,则查找成功,置CF=0,并SImid,程序结束;若krmid, 则转第(5) (4)在低半部分查找。Low值不变, high mid -1,返回第(2),继续查找 (5)在高半部分查找。high值不变,low mid + 1,返回第(2),继续查找 data segment lw dw ? hg dw ? data ends extra segment arr dw 6,1,2,5,7,9,12 extra ends code segment main proc far assume cs:code,ds:data,es:extra start: mov ax,3 push ax mov ax,data mov ds,ax mov ax,extra mov es,ax pop ax lea di,arr cmp ax,es:di+2 ja chk_last lea si,es:di+2 je exit stc jmp exit chk_last: mov si,es:di shl si,1 add si,di cmp ax,es:di jb search je exit stc jmp exit search: mov lw,1 mov bx,es:di mov hg,bx mov bx,di mid: mov cx,lw mov dx,hg cmp cx,dx ja no_match add cx,dx shr cx,1 mov si,cx shl si,1 compare: cmp ax,es:bx+si je exit ja higher dec cx mov hg,cx jmp mid higher: inc cx mov lw,cx jmp mid no_match: stc exit: pop ds ret main endp code ends end start4.2.2 利用跳跃表实现多路分支利用跳跃表实现多路分支 例例4.6 根据AL寄存器中哪一位为1把程序转移到不同的分支执行。 题目分析:事先在AL寄存器中存有数据,在程序中测试AL的值,利用SHR指令每次把AL中的最低位移入CF标志位,JNB或JB指令的测试条件是测试CF的值是否为0或1。 不同的程序分支存储在跳跃表中,程序中取出跳跃表的首地址,然后根据测试的AL中的值,用首地址加上偏移地址,得到跳跃的地址,有了跳跃地址就可以在跳跃表中跳转到不同的地方 branch segment brch_tab dw rout1 dw rout2 dw rout3 dw rout4 dw rout5 dw rout6 dw rout7 dw rout8 branch ends code segment main proc far assume cs:code, ds:branch start: push ds sub ax,ax push ax mov ax,branch mov ds,ax mov al,00000100B cmp al,0 je exit mov si,0 bch: shr al,1 jnc net_yet jmp brch_tabsi net_yet: add si,type brch_tab jmp bch 重要指令分析: shr al,1 :把AL寄存器中的数值逻辑右移一位,最低位移到CF中,最高位补0。下面一条指令测试CF的值,就可以知道AL的最低位是0或者1了。这样循环执行,就可以测试中各个数位了。 jmp brch_tabsi:这是一种寄存器相对寻址方式,如果满足条件,就跳转到数据段中brch_tab存储单元里面偏移段首si个位置的地方执行。在本例中,brch_tab定义的是跳跃表,假定si 2,则brch_tabsi的有效地址就是对应rout2的地方,所以程序跳转到语句标号为rout2的地方执行。 add si,type brch_tab:type伪操作是取出数据段中brch_tab定义的数据类型的字节数,本例是dw类型,即2个字节。 例例4.7 统计输入的字符串中的字母、数字和其他字符的个数并把结果以16进制显示出来 题目分析:字符串以$结束。一次取出每个字符,字符在内存中存储的是16进制的ASCII码,0的ASCII码为30h,a 的ASCII码为61h,A 的ASCII码为41h。如果字符的值在30h到39h之间,则为数字;如果字符的值在41h到5ah之间,则为大写字母;如果字符的值在61h到7ah之间,则为小写字母;否则,是其他的字符。 data segment line db w34STP5 r9rstuv34,$ da1 dw 0 da2 dw 0 da3 dw 0 res1 db 0ah,0dh,digits:,$ res2 db 0ah,0dh,letters:,$ res3 db 0ah,0dh,others:,$ data ends code segment main proc far assume cs:code,ds:data start: push ds sub ax,ax push ax mov ax,data mov ds,ax lea bx,line mov dl,bx push bx s: cmp dl,30h jl other cmp DL,39h jg ch1 digit: mov bx,da1 inc bx mov da1,bx jmp next ch1: cmp DL,41h jl other cmp DL,5ah jg continue ch2: mov bx,da2 inc bx mov da2,bx jmp next continue: cmp DL,61h jl other cmp DL,7ah jng ch2 other: mov bx,da3 inc bx mov da3,bx jmp next next: pop bx inc bx mov dl,bx push bx cmp dl,$ jnz s result: lea DX,line mov Ah,09 int 21h lea DX,res1 mov Ah,09 int 21h mov bx,DS:da1 call display lea dx,res2 mov ah,09 int 21h mov bx,ds:da2 call display lea dx,res3 mov Ah,09 int 21h mov bx,DS:da3 call display exit: ret

    注意事项

    本文(分支程序设计.pptx)为本站会员(王**)主动上传,优知文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知优知文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 yzwku网站版权所有

    经营许可证编号:宁ICP备2022001189号-2

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。优知文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知优知文库网,我们立即给予删除!

    收起
    展开