第5章 循环与分支程序设计 学习目标: 了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。

Slides:



Advertisements
Similar presentations
22.3 实际问题与一元二次方程(1).
Advertisements

输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
计算机体系结构 应用程序 软件 操作系统 编译器 固件 指令集 输入输出 CPU 硬件 内存 (I/O) 集成电路 元件,逻辑门.
汇编语言程序设计 吴 向 军 中山大学计算机科学系
x86/Pentium指令系统 x86寻址方式 1.比例变址寻址方式 (Scaled Indexed Addressing)
微型计算机技术 教 学 指 导(七) 太原广播电视大学 郭建勇.
第10章 DOS功能调用与BIOS中断调用.
第7章 8086/8088汇编语言程序设计 7.1 引言 7.2 顺序程序设计 7.3 分支结构程序设计 7.4 循环结构程序设计
第四章 汇编语言 程序设计 任课教师:王晓甜
大连理工大学软件学院 软件工程系 赖晓晨 计算机组成与结构 大连理工大学软件学院 软件工程系 赖晓晨
本周实验安排 实验内容:(P231)人名排序的例子。
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年10月30日.
得技通电子 问题 1 右何者非為假指令 (1) XRL (2) EQU (3) MACRO (4) ORG.
单片机原理与应用.
第3章 80x86汇编语言程序设计(下).
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 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
第7章 并行接口 7.1 简单并行接口 7.2 可编程并行接口8255A 7.3 键盘接口 7.4 LED显示器接口.
第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第四节 Intel 8253在IBM PC机上的应用.
Assembly Language Programming
微机原理与接口技术 微机原理与接口技术 朱华贵 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章 寻址方式与指令系统.
第二部分 PC 微机异步通信适配器的分析和使用 一、PC中的UART 1.INS PC16450/PC16550
第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系统功能调用.
第五章 循环与分支程序设计 §5.1 循环与转移指令 §5.2 循环程序设计 §5.3 分支程序设计.
第 13 章 中断系统.
條件處理.
第九章 高级宏汇编语言 9.1 结构 结构就是将逻辑上有一定关系的一组数据,以某种方式组合在一起所形成的数据形式。
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功能编写的程序简洁,可读性好,
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
《微型计算机原理与接口技术》 第4版 王良 宁德师范学院 吴宁 乔亚男 编著 清华大学出版社 出版
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月17日.
第八章 中断系统.
微机原理与接口技术 西安邮电大学计算机学院 宁晓菊.
虚拟机加密,是把源程序的X86指令变成自定义的伪指令,执行时内置在保护程序中的VM就会启动,读取伪指令,然后解析执行
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月06日.
第6章 子程序结构 在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 调用子程序的程序称为主调程序或主程序。 2019/7/20 ch6.
微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰.
大数据搜索挖掘实验室 第五章 子程序设计 张华平 副教授 博士 Website: 大数据搜索挖掘实验室
第4章 MCS-51汇编语言程序设计 教学基本要求: (1)、了解MCS-51汇编语言程序设计的特点;
第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程
第三章 8086的指令系统 8086指令特点 8086的寻址方式 8086的指令格式及数据类型 8086的指令集.
第五章 循环与分支程序设计 ch5 2019/9/19.
Presentation transcript:

第5章 循环与分支程序设计 学习目标: 了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。

§5.1 循环程序设计 一、循环程序的结构形式 二、循环程序设计 三、多重循环程序设计

一、循环程序的结构形式 结束 初始化 循环体 修改部分 控制条件 Y N 先判断,后循环

一、循环程序的结构形式 结束 初始化 循环体 修改部分 控制条件 Y N 先循环,后判断

prognam segment              assume cs:prognam start:                 mov    ch,4       rotate: mov    cl,4         rol     bx,cl        mov    al,bl         and    al,0fh        add    al,30h cmp   al,3ah        jl     printit        add   al,7h              printit:  mov   dl,al       mov   ah,2        int    21h         dec    ch         jnz    rotate       mov ah,4ch int 21h           prognam  ends             end    start      

例5.2 在ADDR单元存放着数Y的地址,试编制一程序把Y中1的个数存入COUNT单元中 开始 1的个数计数器←0 循环次数计数器CX←16 Y左移一次 CF=1 1的个数计数器+1 CX ←CX-1=0 COUNT ← 1的个数计数器 结束 N Y 例5.2 在ADDR单元存放着数Y的地址,试编制一程序把Y中1的个数存入COUNT单元中 循环次数固定,完全由循环计数器控制

例5.2 DATA SEGMENT REPEAT: Y DW 1234H ADDR DW Y SHL AX,1 COUNT DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DL,0 MOV BX,ADDR MOV AX,[BX] MOV CX,16 REPEAT: SHL AX,1 JNC NEXT INC DL NEXT: LOOP REPEAT EXIT0: MOV COUNT,DL MOV AH,4CH INT 21H CODE ENDS END START

例5.2 Y 开始 1的个数计数器←0 循环次数计数器CX←16 Y=0 Y左移一次 N CF=1 1的个数计数器+1 CX ←CX-1=0 COUNT ← 1的个数计数器 结束 N Y Y=0 例5.2

例5.2 DATA SEGMENT Y DW 1234H ADDR DW Y COUNT DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DL,0 MOV BX,ADDR MOV AX,[BX] MOV CX,16 REPEAT: SHL AX,1 JNC NEXT INC DL NEXT: LOOP REPEAT EXIT0: MOV COUNT,DL MOV AH,4CH INT 21H CODE ENDS END START CMP AX,0 JZ EXIT0 JMP REPEAT

循环程序设计 例 在附加段中,有一个首地址为LIST和未经排序的字数组。在数组的第一个字中,存放着该数组的长度,数组的首地址已存放在DI寄存器中,AX寄存器中存放着一个数。要求编制一程序:在数组中查找该数,如果找到此数,则把它从数组中删除。

del_ul proc near cld push di mov cx,es:[di] add di,2 repne scasw je delete pop di jmp short exit delete: jcxz dec_cnt next_el: mov bx,ex:[di] mov es:[di-2],bx add di,2 loop next_el dec_cnt: pop di dec word ptr es:[di] exit: ret del_up endp

例5.4 将正数N插入一个已升序排列的字数组的正确位置。该数组的首地址和末地址分别为ARRAY_ HEAD 和ARRAY_ END,其中所有的数均为正数。 23, 37, 49, 52 32 END HEAD 23, 37, 49, 52 32, -1, -1, 解法一: 从数组的尾部开始比较 N较大,则在比较对象后插入,结束循环 N较小,则把比较对象及其后元素后移一个字 循环结束的控制: 执行插入操作后结束循环 若N比所有元素都小,扫描整个数组后仍无法结束循环,将-1加在数组前可解决该问题

例5.4 N 开始 (ARRAY_HEAD-2)←-1 初始化变址寄存器SI Y K<=N 将N放在K的位置 K后移一个字单元 结束 修改地址 K后移一个字单元 结束 Y N

assume cs:program,ds:datarea Start: mov ax,datarea mov ds,ax 例5.4 Datarea segment x dw ? Array_head dw 3,5,15,23,37,49 Array_end dw 105 n dw 32 Datarea ends Program segment assume cs:program,ds:datarea Start: mov ax,datarea mov ds,ax mov ax,n mov array_head-2,-1 mov si,0 Comp:cmp array_end[si],ax jle insert mov bx,array_end[si] mov array_end[si+2],bx sub si,2 jmp comp Insert: mov array_end[si+2],ax mov ah,4ch int 21h Program ends end start mov bx,array_end[si] cmp bx,ax jle insert

例5.4 将正数N插入一个已升序排列的字数组的正确位置。该数组的首地址和末地址分别为ARRAY_ HEAD 和ARRAY_ END,其中所有的数均为正数。 解法二: 从数组的头部开始比较 N较小,则在比较对象前插入,结束循环 N较大,则把比较对象及其前元素前移一个字 可扫描整个数组,循环次数为数组元素个数 执行插入操作后结束循环 循环结束的控制: 若N比所有元素都小,形成新的头;若N比所有元素都大,则被置于尾部

例5.4

 例5 设有数组X (X1,…,X10) 和Y (Y1,…,Y10) ,编程计算数组Z (Z1,…,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

mov ax,x[bx] shr dx,1 jc subtract add ax,y[bx] jmp short result datarea  segment 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 datarea  ends prognam segment assume cs:prognam,ds:datarea start:                 mov  ax,datarea   mov  ds,ax   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 mov ah,4ch int 21h prognam ends end start

例5.5 试编制一程序:从键盘输入一行字符,要求第一个键入的字符必须是空格符,如不是,则退出程序;如是,则开始接收键入的字符并顺序存放在首地址为BUFFER的缓冲区中(空格符不存入),直到接收到第二个空格符时退出程序。

datarea segment buffer db 80 dup(?) flag db ? next: mov ah,01  int 21h  test flag,01h  jnz  follow  cmp al,20h  jnz  exit  mov flag,1  jmp  next follow: cmp  al,20h  jz  exit mov  [bx],al  inc  bx  jmp  next exit: mov ah,4ch int 21h prognam ends  end  start datarea  segment buffer  db 80 dup(?) flag   db ? datarea  ends prognam segment assume cs:prognam,ds:datarea start:  mov   ax,datarea  mov  ds,ax  lea   bx,buffer  mov   flag,0

三、多重循环程序设计 例5.7 有一个首地址为A的N字数组,请编制程序使该数组中的数按照从大到小的次序整序 冒泡法从第一个元素开始,依次对相邻的两个元素进行比较,使前一个元素不大于后一个元素;将所有元素比较完之后,最大的元素排到了最后;然后,除掉最后一个元素之外的元素依上述方法再进行比较,得到次大的元素排在后面;如此重复,直至完成就实现元素从小到大的排序 这需要一个双重循环程序结构

冒泡法的排序 序号 数 比 较 遍 数 1 2 3 4 1 32 2 85 3 16 4 15 5 8 32 16 15 8 85

例5.7-1

例5.7-2

§5.2 分支程序设计 一、分支程序的结构形式 二、分支程序的设计 三、跳跃表

一、分支程序的结构形式

二、分支程序的设计 例 在附加段中,有一个按从小到大顺序排列的无符号数数组,其首地址存放在DI寄存器中,数组中的第一个单元存放着数组长度。在AX中有一个无符号数,要求在数组中查找(AX),如找到,则使CF = 0,并在SI中给出该元素在数组中的偏移地址;如未找到,则使CF = 1。

三、跳跃表