第5章 循环与分支程序设计  循环程序设计  分支程序设计.

Slides:



Advertisements
Similar presentations
第1章第1章 PC/AT 系統 1 Chapter 1 Chapter 1 PC/AT 系統 001.
Advertisements

(5)能根据具体要求绘制简单的电路图(不超过两个用电器) b
微型计算机原理及应用.
22.3 实际问题与一元二次方程(1).
中國歷史人物—孫中山 姓名:黎昕晴 班別:五理.
输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
汇编语言程序设计 吴 向 军 中山大学计算机科学系
微型计算机技术 教 学 指 导(七) 太原广播电视大学 郭建勇.
第10章 DOS功能调用与BIOS中断调用.
第7章 8086/8088汇编语言程序设计 7.1 引言 7.2 顺序程序设计 7.3 分支结构程序设计 7.4 循环结构程序设计
第四章 汇编语言 程序设计 任课教师:王晓甜
大连理工大学软件学院 软件工程系 赖晓晨 计算机组成与结构 大连理工大学软件学院 软件工程系 赖晓晨
第5节 关注人类遗传病.
本周实验安排 实验内容:(P231)人名排序的例子。
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年10月30日.
得技通电子 问题 1 右何者非為假指令 (1) XRL (2) EQU (3) MACRO (4) ORG.
第3章 80x86汇编语言程序设计(下).
第3章 80x86汇编语言程序设计(中) 时间不够的情况下只讲16位汇编.
4.1 汇编语言 4.2 顺序结构程序 4.3 分支程序设计 4.4 循环程序设计 4.5 子程序设计
第3章 80x86汇编语言程序设计(上) 16位汇编版本 时间不够的情况下只讲16位汇编.
9.1 可编程并行输入/输出接口芯片8255A 9.2 可编程计数器/定时器 可编程串行输入/输出接口芯片8251A
3.3.5 程序控制指令 控制转移指令分为: 转移指令 循环控制指令 调用和返回指令 中断指令.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月26日.
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
汇编语言程序设计 Assembly Language Programming
第三章 寻址方式与指令系统 3.1 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
微机原理与接口技术 第3章 8086指令系统 朱华贵 2015年09月25日.
第7章 并行接口 7.1 简单并行接口 7.2 可编程并行接口8255A 7.3 键盘接口 7.4 LED显示器接口.
微机原理与接口技术 第2章 8086系统结构 朱华贵 2015年09月17日.
第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第四节 Intel 8253在IBM PC机上的应用.
Assembly Language Programming
复 习 一. 计算机中的数和编码 1. 2,10,16进制数及其之间的转换(整数) 按权展开,除x取余 2
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月10日.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月05日.
输入输出与中断 主要内容 CPU与外设之间数据传送方式 中断技术 8086中断系统和中断处理.
第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备.
第3章 IA-32指令系统 3.1 基本数据类型 3.2 IA-32的指令格式 3.3 IA-32指令的操作数寻址方式
汇编语言程序设计 吴 向 军 中山大学计算机科学系
第8章 寻址方式与指令系统.
第4章 汇编语言程序设计 4.1 程序设计语言概述 4.2 汇编语言的程序结构与语句格式 4.3 汇编语言的伪指令
微机原理及应用 主讲:谢维成 西华大学 电气信息学院 1.
基本的”防”黑客技术 Basic” ” Hacker Technique
微机原理及应用 主讲:郑海春.
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
汇编语言程序设计课程设计 第二次实验 DEBUG基本命令与算术运算指令
微型计算机原理及应用.
第3章 微型计算机输入输出接口 3.1 输入/输出接口 3.2 输入输出数据传输的控制方式 3.3 开关量输入输出接口 欢迎辞.
第六章 子程序结构 §6.1 子程序的设计方法 §6.2 嵌套与递归子程序 §6.3 子程序举例 §6.4 DOS系统功能调用.
條件處理.
第九章 高级宏汇编语言 9.1 结构 结构就是将逻辑上有一定关系的一组数据,以某种方式组合在一起所形成的数据形式。
第5章 循环与分支程序设计 学习目标: 了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。
4.1 汇编语言程序格式 4.2 MASM中的表达式 4.3 伪指令语句 4.4 DOS系统功能调用和BIOS中断调用
3.4.5 控制转移指令(Control transfer instructions) (一)、控制转移指令概述
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月19日.
第五章:输入输出基本技术 主讲教师:范新民.
第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程.
第10章 可编程外围接口芯片8255A及其应用 10.1 概述 A的工作原理 A的应用举例.
习题3 1、 分别说明下列指令的原操作数和目的操作数各采用什么寻址方式。 设定如下: ①立即寻址 ② ① ②寄存器寻址
3.4.2 算术运算指令(Arithmetic) 算术运算指令内容: 8086/8088提供加、减、乘、除等六种基本算术操作
可编程定时计数器.
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
第2章 80x86计算机组织  计算机系统  存储器  中央处理机  外部设备.
《微型计算机原理与接口技术》 第4版 王良 宁德师范学院 吴宁 乔亚男 编著 清华大学出版社 出版
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月17日.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月06日.
第6章 子程序结构 在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 调用子程序的程序称为主调程序或主程序。 2019/7/20 ch6.
微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰.
第4章 MCS-51汇编语言程序设计 教学基本要求: (1)、了解MCS-51汇编语言程序设计的特点;
第三章 8086的指令系统 8086指令特点 8086的寻址方式 8086的指令格式及数据类型 8086的指令集.
第五章 循环与分支程序设计 ch5 2019/9/19.
Presentation transcript:

第5章 循环与分支程序设计  循环程序设计  分支程序设计

程序结构: 顺序结构 循环结构 分支结构 子程序结构 … 复合结构:多种程序结构的组合

编制汇编语言程序的步骤: (1) 分析题意,确定算法 (2) 根据算法画出程序框图 (3) 根据框图编写程序 (4) 上机调试程序

1. 循环程序设计 初始化 初始化 N 循环体 控制条件 Y N 控制条件 循环体 Y DO-WHILE 结构 DO-UNTIL 结构

初始化:设置循环的初始状态 循环体:循环的工作部分及修改部分 控制条件:计数控制 特征值控制 地址边界控制

例:把 BX 中的二进制数以十六进制的形式显示在屏幕上 1 2 3 4

…… mov ch, 4 rotate: mov cl, 4 rol bx, cl mov al, bl and al, 0fh add al, 30h ; ’0’~’9’ ASCII 30H~39H cmp al, 3ah jl printit add al, 7h ; ’A’~’F’ ASCII 41H~46H printit: mov dl, al mov ah, 2 int 21h dec ch jnz rotate

1 2 5 31 32 35 例:从键盘接收十进制数并存入 BX …… mov bx, 0 newchar: mov ah, 1 ;键盘输入 1 2 5 31 32 35 …… mov bx, 0 newchar: mov ah, 1 ;键盘输入 int 21h sub al, 30h jl exit ; <0退出 cmp al, 9 jg exit ; >9退出 cbw xchg ax, bx mov cx, 10 mul cx add bx, ax jmp newchar exit: …… ( ( 0×10)+1 )×10+2 )×10+5

1 a f 31 61 66 例:从键盘接收十六进制数并存入 BX …… mov bx, 0 newchar: mov ah, 1 ;键盘输入 int 21h sub al, 30h jl exit ; <0退出 cmp al, 10 jl add_to sub al, 27h ; ‘a’~‘f’ cmp al, 0ah jl exit ; <‘a’退出 cmp al, 10h jge exit ; >’f’退出 add_to: mov cl, 4 shl bx, cl mov ah, 0 add bx, ax jmp newchar exit: …… ((0×16)+1) × 16+0a) × 16+0f

例:将正数 n 插入一个已整序的正数字数组 …… mov ax, n mov array_head-2, 0ffffh mov si, 0 x dw ? array_head dw 3,5,15,23,37,49,52,65,78,99 array_end dw 105 n dw 32 x  -1 …… mov ax, n mov array_head-2, 0ffffh mov si, 0 compare: cmp array_end [si], ax jle insert mov bx, array_end [si] mov array_end [si+2], bx sub si, 2 jmp short compare insert: mov array_end [si+2], ax 3 array_head 5 15 23 37 49 52 65 78 99 105 array_end n  32

例: 将首地址为A的字数组从小到大排序 (气泡算法,多重循环) 32,85,16,15, 8 序号 地址 数 比 较 遍 数 1 2 3 4 1 A 32 2 A+2 85 3 A+4 16 4 A+6 15 5 A+8 8 32 16 15 8 85

mov cx, 5 ;元素个数 dec cx ;比较遍数 loop1: mov di, cx ;比较次数 mov bx, 0 loop2: mov ax, A[bx] ;相邻两数 cmp ax, A[bx+2] ; 比较 jle continue xchg ax, A[bx+2] ;交换位置 mov A[bx], ax continue: add bx, 2 loop loop2 mov cx, di loop loop1

2. 分支程序设计 CASE 结构 IF-THEN-ELSE 结构 ? ? … case 1 case 2 case n 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 - y5 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: mov ax, x[bx] shr dx, 1 jc subtract add ax, y[bx] jmp short result ; 向前引用 subtract: sub ax, y[bx] result: mov z[bx], ax add bx, 2 loop next

例:折半查找算法 data segment data ends 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

折半算法1        (ax)=55 low_idx 1 4 5 high_idx 12 12 11 22 33 44 1 2 3 4 5 6 7 8 9 10 11 12 12 11 22 33 44 55 66 77 88 99 111 222 333 (si)=0ah Cf=0     (ax)=90 low_idx 1 7 8 9 high_idx 12    (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)<第一个元素,未找到退出 chk_last: mov si, [di] ;元素个数 shl si, 1 ; 计算最后一个元素 add si, di ; 的地址 cmp ax, [si] ; (ax)与最后一个元素比较 jb search je exit ; (ax)=最后一个元素,找到退出 jmp exit ; (ax)>最后一个元素,未找到退出 算法1

search: mov low_idx, 1 mov bx, [di] ;个数 compare: mov high_idx, bx 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 compare: cmp ax, [bx+si] je exit ja higher dec cx mov high_idx, cx jmp mid higher: inc cx mov low_idx, cx no_match: stc exit: ……

折半算法2 (ax)=55 di 12 6 10 si 4 1 2 3 4 5 6 7 8 9 10 11 12 12 11 22 33 44 55 66 77 88 99 111 222 333 (si)=0ah (di)=0ah Cf=0    (ax)=90 di 12 18 14 16 si 6 4 2 (si)=2 (di)=10h Cf=1

算法2 search: idx_ok: shr si, 1 test si, 1 jz sub_idx inc si sub di, si jmp short compare higher: cmp si, 2 je no_match 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 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 ;逻辑右移 jnc add1 jmp word ptr[bx]  ;段内间接转移 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_table[si] ;段内间接转移 add1: add si, type branch_table jmp L continue: routine1: routine2:

…… (基址变址寻址) cmp al, 0 je continue lea bx, branch_table mov si, 7 * type branch_table mov cx, 8 L: shl al, 1 ;逻辑左移 jnc sub1 jmp word ptr [bx][si]  ;段内间接转移 sub1: sub si, type branch_table ;(si)-2 loop L continue: routine1: routine2: (基址变址寻址)

第5章作业 Page 193 5.5 5.7 5.12 5.18