汇编语言与接口技术 第2版 教学课件 ppt 作者 叶继华 第5章 汇编语言程序设计

上传人:E**** 文档编号:89245564 上传时间:2019-05-22 格式:PPT 页数:76 大小:284.01KB
返回 下载 相关 举报
汇编语言与接口技术 第2版 教学课件 ppt 作者 叶继华 第5章 汇编语言程序设计_第1页
第1页 / 共76页
汇编语言与接口技术 第2版 教学课件 ppt 作者 叶继华 第5章 汇编语言程序设计_第2页
第2页 / 共76页
汇编语言与接口技术 第2版 教学课件 ppt 作者 叶继华 第5章 汇编语言程序设计_第3页
第3页 / 共76页
汇编语言与接口技术 第2版 教学课件 ppt 作者 叶继华 第5章 汇编语言程序设计_第4页
第4页 / 共76页
汇编语言与接口技术 第2版 教学课件 ppt 作者 叶继华 第5章 汇编语言程序设计_第5页
第5页 / 共76页
点击查看更多>>
资源描述

《汇编语言与接口技术 第2版 教学课件 ppt 作者 叶继华 第5章 汇编语言程序设计》由会员分享,可在线阅读,更多相关《汇编语言与接口技术 第2版 教学课件 ppt 作者 叶继华 第5章 汇编语言程序设计(76页珍藏版)》请在金锄头文库上搜索。

1、第5章 汇编语言程序设计,5.1 概述 5.2 顺序程序设计 5.3 分支程序设计 5.4 循环程序设计 5.5 子程序设计 4.6 模块化程序设计,开 始,5.1 概述,5.1.1 汇编语言程序设计的一般步骤 5.1.2 流程图,返回本章首页,5.1.1 汇编语言程序设计的一般步骤,汇编语言程序设计一般有以下几个步骤: 1分析问题,确定算法 2绘制流程图 3根据流程图编制程序 4调试程序,返回本节,5.1.2 流程图,1流程图的概念 流程图是由特定的几何图形、指向线、文字说明来表示数据处理的步骤,形象描述逻辑控制结构以及数据流程的示意图。流程图具有简洁、明了、直观的特点。,2流程图符号表示

2、(1)起止框:表示程序的开始和结束。,起止框,(2)判断框,(3)处理框,(4)调用框,(5)指向线,(6)连接框,返回本节,5.2 顺序程序设计,下面举例说明顺序程序的设计。 【例5.1】试编写一程序计算以下表达式的值。 =(v-(*+-540)/x 式中x、v均为有符号字数据。 设、的值存放在字变量、V中,结果存放在双字变量之中,程序的流程图如图4.1所示。,返回本章首页,图5.1 顺序运算程序流程图,源程序如下: DATA SEGMENT X DW 200 Y DW 100 Z DW 3000 V DW 10000 W DW 2 DUP(?) DATA ENDS STACK SEGMEN

3、T STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK,START: MOV AX,DATA MOV DS,AX ;DATAAX MOV AX,X IMUL Y ;(X)*(Y)DX:AX MOV CX,AX MOV BX,DX ;(DX:AX)(BX:CX) MOV AX,Z CWD ;(Z)符号扩展 ADD CX,AX ADC BX,DX ;(BX:CX)+(DX:AX)(BX:CX) SUB CX,540 SBB BX,0 ;(BX:CX)-540(BX:CX) MOV AX,V,CWD

4、;(V)符号扩展 SUB AX,CX SBB DX,BX ;(DX:AX)-(BX:CX)(DX:AX) IDIV X ;(DX:AX)/X MOV W,AX ;商W MOV W+2,DX ;余数DXW+2 MOV AH,4CH INT 21H CODE ENDS ;退出DOS 状态 END START,【例5.2】已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在TAB表中,要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。编写程序如下:,STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT TAB DB

5、 80,85,86,71,79,96 DB 83,56,32,66,78,84 NO DB 10 ENGLISH DB ? DATA ENDS CODE SEGMENT,ASSUME DS:DATA,SS:STACK,CS:CODE BEGIN: MOV AX,DATA MOV DS ,AX LEA BX,TAB MOV AL,NO DEC AL XLAT TAB MOV ENGLISH,AL MOV AH,4CH INT 21H CODE ENDS END BEGIN,5.3 分支程序设计,5.3.1 用条件转移指令实现程序分支 5.3.2 用跳转表实现多路分支,返回本章首页,5.3.1 用

6、条件转移指令实现程序分支,【例5.3】编写计算下面函数值的程序: 1 X0 Y= 0 X=0 -1 X 设输入数据为X、输出数据Y,且皆为字节变量。程序流程图如图4.2所示。 程序如下:,图5.2 分支运算程序流程图,DATA SEGMENT X DB -10 Y DB ? DATA ENDS STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA,MOV DS,AX CMP X,0 ;与0进行比较 JGE A1 ;X0转A1 MOV

7、 Y,-1 ;X 0时,-1Y JMP EXIT A1: JG A2 ;X0转A2 MOV Y,0 ;X=0时,0Y JMP EXIT A2: MOV Y,1 ;X0,1Y EXIT: MOV AH,4CH INT 21H CODE ENDS END START,MOV DS,AX CMP X,0 ;与0进行比较 JGE A1 ;X0转A1 MOV Y,-1 ;X 0时,-1Y JMP EXIT A1: JG A2 ;X0转A2 MOV Y,0 ;X=0时,0Y JMP EXIT A2: MOV Y,1 ;X0,1Y EXIT: MOV AH,4CH INT 21H CODE ENDS END

8、 START,【例5.4】试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。 设三个带符号数分别在三个字变量X、Y、Z中存储。程序流程图如图5.3所示,图5.3 例5.4程序流程图,程序如下: STAC SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT X DW 00ABH Y DW 5 Z DW 200 MAX DW ? DATA ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE,START:MOV AX,DATA MOV DS,AX MOV AX,X CMP AX,

9、Y ;XY? JG L1 MOV AX,Y ;YZ? L1: CMP AX,Z ;XZ? JG EXIT MOV AX,Z EXIT:MOV MAX,AX MOV AH,4CH INT 21H CODE ENDS END START,返回本节,5.3.2 用跳转表实现多路分支,【例5.5】设某程序有8路分支,试根据给定的N值(18),将程序的执行转移到其中的一路分支。 程序流程如图5.4所示。,图5.5 例5.4程序流程图,程序如下: DATA SEGMENT TAB DW P1,P2,P3,P4,P5,P6,P7,P8 N DB 5 DATA ENDS STACK SEGMENT DB 20

10、0 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE,START:MOV AX,DATA MOV DS,AX MOV AL,N DEC AL ADD AL,AL MOV BL,AL MOV BH,0 JMP TABBX,P1: JMP EXIT P2: JMP EXIT P3: JMP EXIT P4: ,JMP EXIT P8: EXIT: MOV AH,4CH INT 21H CODE ENDS END START 上述程序中的无条件转移指令的转移地址采用的是变址寻址。同理,转移地址也可以用寄存器间接寻址或基址加变

11、址寻址,读者可自行考虑。,返回本节,5.4 循环程序设计,5.4.1 循环程序的结构 5.4.2 单重循环程序设计 5.4.3 多重循环程序设计,返回本章首页,5.4.1 循环程序的结构,1初始化部分 2循环体部分 3循环控制部分,循环程序的常见结构形式如图5.5(a)、(b)所示。,返回本节,图5.5 循环程序结构图,5.4.2 单重循环程序设计,1计数控制 2条件控制,1计数控制,【例5.7】已知有几个元素存放在以BUF为首址的字节存贮区中,试统计其中正元素的个数。 显然,每个元素为一个8位有符号二进制数,统计其中正元素的个数可用循环程序实现。其程序流程图如图5.6所示。,图5.6 程序流

12、程图,DATA SEGMENT buf db 12h,34h,56h n equ $-buf num dw ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX mov ax,0 lea bx, buf mov cx,n,LOP1:mov dl,byte ptrbx cmp dl,0 jle LOP2 inc ax LOP2: inc bx loop LOP1 mov num,ax MOV AH,4CH INT 21H CODE ENDS END START,【例5.8】试编写一程序,要求比较两

13、个字符串STR1和STR所含字符是否相同,若相同则显示MATCH!,若不相同则显示NO MATCH!。(程序略) 其流程图如图5.7所示。,图5.7 程序流程图,【例5.9】试编一个程序将字单元BUF中所含1的个数存入COUNT单元中。要测出BUF字单元所含1的个数,首先将BUF中的数送给寄存器AX,然后将AX寄存器逻辑左移一次,如果CF=1,则表明AX中的最高位为1,则计数器CL计数1次,如果CF=0,表明AX最高位为0,这样依次将最高位移入CF中去测试。移位之后,判断AX的值是否为0,如果为0则结束循环,不为0,则继续循环。 其流程图如图5.8所示。,2条件控制,图5.8 例5.9程序流程

14、图,程序如下: STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT BUF DW 0011110010101011B COUNT DB ? DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK,START: MOV AX,DATA MOV DS,AX MOV AX,BUF MOV CL,0 ;计数器为0 LOPA: AND AX,AX JE EXIT ;(AX)=0,结束循环 SHL AX,1 ;AX 左移一位 JNC LOPA INC CL ;产生进位,(CL)+1CL J

15、MP LOPA EXIT: MOV COUNT,CL MOV AH,4CH INT 21H CODE ENDS END START,返回本节,5.4.3 多重循环程序设计,【例5.10】在以BUF为首址的字存储区中存放有N个有符号数,现需将它们按大到小的顺序排列在BUF存储区中,试编写其程序。 我们采用冒泡排序算法从第一个数开始依次对相邻两个数进行比较,如次序对,则不交换两数位置;如次序不对则使这两个数交换位置。可以看出,第一遍需比较(N-1)次,此时,最小的数已经放到了最后;第二遍比较只需考虑剩下的(N-1)个数,即只需比较(N-2)次;第三遍只需比较(N-3)次,整个排序过程最多需(N-1

16、)遍。如下面的4个数即是采用冒泡排序比较的例子。,数 10 8 16 90 32 第一遍 10 16 90 32 8 第二遍 16 90 32 10 8 第三遍 90 32 16 10 8 程序流程图如图5.9所示。,图5.9 例5.10程序流程图,程序如下: DATA SEGMENT BUF DW 3,-4,6,7,9,2,0,-8,-9,-10,20 N=(-BUF)/2 DATA ENDS STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,START: MOV AX,DATA MOV DS,AX MOV CX,N DEC C

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号