版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 循环程序设计 分支程序设计,第5章 循环与分支程序设计,分支结构 子程序结构,程序结构:,复合结构:多种程序结构的组合,顺序结构 循环结构,编制汇编语言程序的步骤:,(1) 分析题意,确定算法 (2) 根据算法画出程序框图 (3) 根据框图编写程序 (4) 上机调试程序,1. 循环程序设计,DO-WHILE 结构 DO-UNTIL 结构,控制条件,初始化,循环体,Y,N,控制条件,初始化,循环体,Y,N,初始化:设置循环的初始状态 循环体:循环的工作部分及修改部分 控制条件:计数控制 特征值控制 地址边界控制,BX,1 2 3 4,例:把 BX 中的二进制数以十六进制的形式显示在屏幕上, m
2、ov ch, 4 rotate: mov cl, 4 rol bx, cl mov al, bl and al, 0fh add al, 30h ; 09 ASCII 30H39H cmp al, 3ah jl printit add al, 7h ; AF ASCII 41H46H printit: mov dl, al mov ah, 2 int 21h dec ch jnz rotate , mov bx, 0 newchar: mov ah, 1 ;键盘输入 int 21h sub al, 30h jl exit ; 9退出 cbw xchg ax, bx mov cx, 10 mul
3、 cx xchg ax, bx add bx, ax jmp newchar exit: ,例:从键盘接收十进制数并存入 BX,( ( 010)+1 )10+2 )10+5, mov bx, 0 newchar: mov ah, 1 ;键盘输入 int 21h sub al, 30h jl exit ; f退出 add_to: mov cl, 4 shl bx, cl mov ah, 0 add bx, ax jmp newchar exit: ,例:从键盘接收十六进制数并存入 BX,1 a f 31 61 66,(016)+1) 16+0a) 16+0f,x dw ? array_head
4、dw 3,5,15,23,37,49,52,65,78,99 array_end dw 105 n dw 32,例:将正数 n 插入一个已整序的正数字数组,105,array_head,array_end,n ,x ,例: 将首地址为A的字数组从小到大排序 (气泡算法,多重循环) 32,85,16,15, 8,mov cx, 5 ;元素个数 dec cx ;比较遍数 loop1: mov di, cx ;比较次数 mov bx, 0 loop2: mov ax, Abx ;相邻两数 cmp ax, Abx+2 ; 比较 jle continue xchg ax, Abx+2 ;交换位置 mov
5、 Abx, ax continue: add bx, 2 loop loop2 mov cx, di loop loop1,2. 分支程序设计,case 1 case 2 case n,?,?,case 1 case 2 case n,CASE 结构 IF-THEN-ELSE 结构,(1) 逻辑尺控制 (2) 条件控制 (3) 地址跳跃表(值与地址有对应关系的表),例:有数组 x(x1,x2,x10) 和 y(y1,y2,y10), 编程计算 z(z1,z2,z10) z1 = x1 + y1 z2 = x2 + y2 z3 = x3 - y3 z4 = x4 - y4 z5 = x5 - y
6、5 z6 = x6 + y6 z7 = x7 - y7 z8 = x8 - y8 z9 = x9 + y9 z10= x10 + y10,逻辑尺:0 0 1 1 0 1 1 1 0 0 1 减法 0 加法,x dw x1,x2,x3,x4,x5,x6,x7,x8,x9,x10 y dw y1,y2,y3,y4,y5,y6,y7,y8,y9,y10 z dw z1,z2,z3,z4,z5,z6,z7,z8,z9,z10 logic_rule dw 00dch ;0000,0000,1101,1100 mov bx, 0 mov cx, 10 mov dx, logic_rule next: mo
7、v ax, xbx shr dx, 1 jc subtract add ax, ybx jmp short result ; 向前引用 subtract: sub ax, ybx result: mov zbx, ax add bx, 2 loop next ,data segment array dw 12,11,22,33,44,55,66, 77,88,99,111,222,333 number dw 55 low_idx dw ? high_idx dw ? data ends,例:折半查找算法,12 11 22 33 44 55 66 77 88 99 111 222 333,0 1
8、 2 3 4 5 6 7 8 9 10 11 12,(si)=0ah Cf=0,(si)=10h Cf=1,折半算法1, lea di, array mov ax, number ;要查找数 cmp ax, di+2 ; (ax)与第一个元素比较 ja chk_last lea si, di+2 je exit ; (ax)第一个元素,找到退出 stc jmp exit ; (ax)最后一个元素,未找到退出,算法1,compare: cmp ax, bx+si je exit ja higher dec cx mov high_idx, cx jmp mid higher: inc cx mo
9、v low_idx, cx jmp mid no_match: stc exit: ,search: mov low_idx, 1 mov bx, di ;个数 mov high_idx, bx mov bx, di mid: mov cx, low_idx mov dx, high_idx cmp cx, dx ja no_match add cx, dx shr cx, 1 mov si, cx shl si, 1,12 11 22 33 44 55 66 77 88 99 111 222 333,0 1 2 3 4 5 6 7 8 9 10 11 12,(si)=0ah (di)=0ah
10、 Cf=0,(si)=2 (di)=10h Cf=1,折半算法2,算法2,idx_ok: shr si, 1 test si, 1 jz sub_idx inc si sub_idx: sub di, si jmp short compare higher: cmp si, 2 je no_match shr si, 1 jmp short even_idx all_done: mov si, di exit: ,search: mov si, di even_idx: test si, 1 jz add_idx inc si add_idx: add di, si compare: cmp
11、ax, di je all_done ja higher cmp si, 2 jne idx_ok no_match: stc jmp exit,例:根据 AL 寄存器中哪一位为 1(从低位到高位), 把程序转移到 8 个不同的程序分支,branch_table dw routine1 dw routine2 dw routine3 dw routine4 dw routine5 dw routine6 dw routine7 dw routine8, cmp al, 0 ;AL为逻辑尺 je continue lea bx, branch_table L: shr al, 1 ;逻辑右移 j
12、nc add1 jmp word ptrbx ;段内间接转移 add1: add bx, type branch_table ;add bx,2 jmp L continue: routine1: routine2: ,(寄存器间接寻址),(寄存器相对寻址), cmp al, 0 je continue mov si, 0 L: shr al, 1 ;逻辑右移 jnc add1 jmp branch_tablesi ;段内间接转移 add1: add si, type branch_table jmp L continue: routine1: routine2: ,(基址变址寻址), cmp al, 0 je continue lea bx, branch_table mov si, 7 * t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中电科蓝天科技股份有限公司2026届校园招聘考试备考题库及答案解析
- 2026年黄冈蕲春县高中赴高校公开招聘教师50人笔试备考题库及答案解析
- 2026中能建路桥工程有限公司招聘笔试模拟试题及答案解析
- 2026年黔南民族职业技术学院单招职业适应性测试题库有答案详细解析
- 2026四川宜宾高新区招聘城市综合管理辅助人员15名笔试模拟试题及答案解析
- 2026年贵州职业技术学院单招职业技能考试题库附答案详细解析
- 2026西咸某国有企业电力设计人员招聘(23人)考试备考题库及答案解析
- 2026山东济南市钢城区融媒传播集团有限公司招聘考试备考题库及答案解析
- 2026浙江台州市黄岩经开投资集团有限公司下属公司招聘补充笔试参考题库及答案解析
- 2026四川乐山市沐川县招聘城镇公益性岗位1人笔试模拟试题及答案解析
- 小儿常见营养障碍性疾病
- 湖北省专升本2025年软件工程专业数据结构重点题型练习试卷(含答案)
- 四川省绵阳市部分学校2026届八年级数学第一学期期末统考试题含解析
- (2025年)政工师考试试题(附答案)
- 中国专家共识解读:颅脑损伤院前与急诊诊治(2025版)
- 小儿惊厥的应急预案演练脚本(2篇)
- 广东省初级注册安全工程师题库及答案解析
- 浮雕画彩塑艺术精讲
- 塑料复合袋基础知识培训
- 《嵌入式系统原理及应用》课件第3章ARM指令系统
- 2025年北森人才测评试题及答案销售
评论
0/150
提交评论