《汇编语言程序设计》电子教案 第4章 程序设计方法

上传人:E**** 文档编号:89409122 上传时间:2019-05-24 格式:PPT 页数:102 大小:577.50KB
返回 下载 相关 举报
《汇编语言程序设计》电子教案 第4章  程序设计方法_第1页
第1页 / 共102页
《汇编语言程序设计》电子教案 第4章  程序设计方法_第2页
第2页 / 共102页
《汇编语言程序设计》电子教案 第4章  程序设计方法_第3页
第3页 / 共102页
《汇编语言程序设计》电子教案 第4章  程序设计方法_第4页
第4页 / 共102页
《汇编语言程序设计》电子教案 第4章  程序设计方法_第5页
第5页 / 共102页
点击查看更多>>
资源描述

《《汇编语言程序设计》电子教案 第4章 程序设计方法》由会员分享,可在线阅读,更多相关《《汇编语言程序设计》电子教案 第4章 程序设计方法(102页珍藏版)》请在金锄头文库上搜索。

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

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

3、TACK SEGMENT 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) MO

4、V AX,V,CWD ;(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,【例4.2】,【例4.2】已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在TAB表中,要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。编写程序如下:,STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS D

5、ATA SEGMENT TAB DB 80,85,86,71,79,96 DB 83,56,32,66,78。84 NO DB 10 ENGLIST 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 DEL AL XLAT TAB MOV ENGLISH,AL MOV AH,4CH INT 21H CODE ENDS END BEGIN,4.3 分支程序设计,4.3.1 用条件转移指令实现程序分支 4.3.2 用跳转表实现多路

6、分支,返回本章首页,4.3.1 用条件转移指令实现程序分支,【例4.3】编写计算下面函数值的程序: 1 X0 Y= 0 X=0 -1 X 设输入数据为X、输出数据Y,且皆为字节变量。程序流程图如图4.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 M

7、OV 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 E

8、ND START,图4.2 分支运算程序流程图,【例4.4】,【例4.4】试编一程序,求三个带符号字数据中的最大值,并将最大值存入MAX字单元中。 设三个带符号数分别在三个字变量X、Y、Z中存储。程序流程图如图4.3所示,图4.3 例4.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 M

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

10、,P8 N DB 5 DATA ENDS STACK SEGMENT DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE,START: MOV AX,DATA MOV DS,AX MOV AL,N DEL AL ADD AL,AL MOV BM,AL MOV BH,0 JMP TABBX,P1: JMP EXIT P2: JMP EXIT P2: JMP EXIT P3: ,JMP EXIT P8: EXIT: MOV AH,4CH INT 21H CODE ENDS END START 上述程序中的无条件

11、转移指令的转移地址采用的是变址寻址。同理,转移地址也可以用寄存器间接寻址或基址加变址寻址,读者可自行考虑。,返回本节,4.4 循环程序设计,4.4.1 循环程序的结构 4.4.2 单重循环程序设计 4.4.3 多重循环程序设计,返回本章首页,4.4.1 循环程序的结构,1初始化部分 2循环体部分 3循环控制部分,循环程序的常见结构形式如图4.5(a)、(b)所示。,返回本节,4.4.2 单重循环程序设计,1计数控制 2条件控制,1计数控制,【例4.7】已知有几个元素存放在以BUF为首址的字节存贮区中,试统计其中正元素的个数。 显然,每个元素为一个8位有符号二进制数,统计其中正元素的个数可用循环

12、程序实现。其程序流程图如图4.6所示。,图4.6 程序流程图,【例4.8】,【例4.8】试编写一程序,要求比较两个字符串STR1和STR所含字符是否相同,若相同则显示MATCH!,若不相同则显示NO MATCH!。(程序略) 其流程图如图4.7所示。,图4.7 程序流程图,【例4.9】试编一个程序将字单元BUF中所含1的个数存入COUNT单元中。要测出BUF字单元所含1的个数,首先将BUF中的数送给寄存器AX,然后将AX寄存器逻辑左移一次,如果CF=1,则表明AX中的最高位为1,则计数器CL计数1次,如果CF=0,表明AX最高位为0,这样依次将最高位移入CF中去测试。移位之后,判断AX的值是否

13、为0,如果为0则结束循环,不为0,则继续循环。 其流程图如图4.8所示。,2条件控制,程序如下: STACK SEGMENT STACK DB 200 DUP(0) STACK EDNS 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 COPA: AND AX,AX JE EXIT ;(AX)=0,结束循环 SHL AX,1

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

15、数,即只需比较(N-2)次;第三遍只需比较(N-3)次,整个排序过程最多需(N-1)遍。如下面的4个数即是采用冒泡排序比较的例子。,数 10 8 16 90 32 第一遍 10 16 90 32 8 第二遍 16 90 32 10 8 第三遍 90 32 16 10 8 程序流程图如图4.9所示。,程序如下: DATA SEGMENT BUF DW 3,-4,6,7,9,2,0,-8,-9,-10,20 N=(-BUF)/2 DATA ENDS STACK SEGNMENT STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,D

16、S:DATA,SS:STACK,START: MOV AX,DATA MOV DS,AX MOV CX,N DEC CX LOOP1: MOV DX,CX MOV BX,0 LOOP2: MOV AX,BUFBX CMP AX,BUFBX+2 JGE L XCHG AX,BUFBX+2 MOV BUFBX,AX,L: ADD BX,2 DEC CX JNE LOOP2 MOV CX,DX LOOP LOOP1 MOV AH,4CH INT 21H CODE ENDS END START,程序运行后,BUF区中的内容如下: 20,9,7,6,3,2,0,-4,-8,-9,-10 若要对N个无符号数按由大到小的顺

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

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

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