汇编语言程序设计第5章基本程序设计.ppt_第1页
汇编语言程序设计第5章基本程序设计.ppt_第2页
汇编语言程序设计第5章基本程序设计.ppt_第3页
汇编语言程序设计第5章基本程序设计.ppt_第4页
汇编语言程序设计第5章基本程序设计.ppt_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2019/7/22,第5章 基本程序设计,1,8086/8088和ARM核汇编语言程序设计,第5章 基本程序设计,2019/7/22,第5章 基本程序设计,2,5.1 程序设计方法概述,5.2 流程图,5.3 结构化程序设计,第5章 基本程序设计,5.4 顺序结构的程序设计,2019/7/22,第5章 基本程序设计,3,汇编语言同BASIC或C等高级语言不同之处在于如何指示计算机完成相应的任务。 高级语言给出一般性命令,而汇编语言给出具体的命令。汇编语言指令集中的语句直接涉及到计算机的硬件部分,提供给计算机更详细的命令,直接对硬件进行操作。,5.1 程序设计方法概述,用汇编指令写的程序称为汇编语言源程序。微处理器可执行的机器代码形式称为目标程序。,编制出优秀的汇编语言程序还需要使程序具有结构好、 可读性强、运行速度快、占用内存少等优点。,2019/7/22,第5章 基本程序设计,4,一般说来,编制一个汇编语言程序需要完成以下步骤: (1) 分析题意,建立数学模型,确定数据结构及算法。这一步是能否编制出高质量程序的关键,因此不应该一拿到题目就急于写程序,而是应该仔细地分析和理解题意,找出合理的算法及适当的数据结构。 (2) 根据算法画出程序流程图。这一步对初学者尤其重要,这样做可以减少出错的可能性。画流程图时可以从粗到细把算法逐步地具体化。 (3) 根据算法及数据结构分配内存单元和寄存器。 (4) 编写汇编语言源程序。 (5) 使用汇编程序调试工具上机调试程序。,5.1.1编写汇编语言程序的步骤,5.1 程序设计方法概述,2019/7/22,第5章 基本程序设计,5,5.1.2判断程序质量的标准,5.1 程序设计方法概述,一个良好的程序应符合以下标准: (1)程序可读性强。 (2)程序执行的时间短(效率高)。 (3)程序所占用的内存少。 (4)程序的语句行数少。,2019/7/22,第5章 基本程序设计,6,5.1.3汇编语言程序的开发过程,5.1 程序设计方法概述,一般来说,开发汇编语言程序有以下面5个步骤:,(1)设计 (2)编辑 (3)汇编 (4)连接 (5)调试,2019/7/22,第5章 基本程序设计,7,5.1.3汇编语言程序的开发过程,5.1 程序设计方法概述,(1)设计 根据所需完成的任务要求、设计程序结构,确定应用算法,并按使用的寄存器从程序段、数据段和堆栈段制定内存分配方案,画出程序流程图。,2019/7/22,第5章 基本程序设计,8,5.1.3汇编语言程序的开发过程,5.1 程序设计方法概述,(2)编辑 根据设计方案及程序流程图创建汇编语言源程序。该源程序是按照汇编语言语法规则编写的文本文件,定义为后缀是.ASM的文件。它由程序员通过文本编辑器来完成。文本编辑器是任何流行的字处理器或编辑器,只要它们可以产生纯ASCII码文本文件,不带有任何特殊控制码和格式码。 Windows下常用的有Word等,但文件存储格式必须为(.TXT)文本格式,且扩展名必须为.ASM。,2019/7/22,第5章 基本程序设计,9,5.1.3汇编语言程序的开发过程,5.1 程序设计方法概述,(3)汇编 汇编是指将汇编语言编写的程序翻译成机器代码组成的目标程序的过程。自动完成这一任务的软件叫汇编程序,又称为汇编器。自动生成的目标程序是机器可以理解的,它是后缀为.OBJ的文件。 汇编程序主要包括以下几方面的功能: 检查源程序中的语法错误,并给出出错信息。 产生源程序的目标程序,并给出列表文件。 支持地址和数据的符号变量表。 支持对内存的管理。 支持多种类型的数据表示。 支持程序的模块化组织。 DOS下常用的汇编程序有MASM、TASM等。 。,2019/7/22,第5章 基本程序设计,10,5.1.3汇编语言程序的开发过程,5.1 程序设计方法概述,(4)连接 连接程序的第一个任务就是从目标模块中产生一个运行模块,并使其具有可重定位性。连接程序的第二个任务是可将几个目标模块连接成一个可执行的模块,并同样使其具有可重定位性。这样就可以将一个程序的几部分分别编写,汇编成几个目标模块,再通过连接程序将几个目标模块连接,生成一个完整的运行模块。 连接程序可以发现源程序中的连接错误,如段的溢出或覆盖、匹配的模块、不存在或不匹配的标号、变量等。 DOS下常用的连接程序有Link、Tlink等。,2019/7/22,第5章 基本程序设计,11,5.1.3汇编语言程序的开发过程,5.1 程序设计方法概述,(5)调试 完成设计、编辑、汇编、连接后得到的可执行目标程序中可能存在一些错误,这些错误可能是设计缺陷或编辑时的笔误,它们可能使程序运行出现结果错误、死机甚至其他无法预测的后果。这类错误被称为逻辑错误,它们是汇编程序和连接程序都无法发现的。这类错误只能靠程序员凭借调试程序和经验对可执行程序进耐心细致的跟踪调试,才能逐一排除。 DOS下常用的调试程序有Debug、Tdebug等。,2019/7/22,第5章 基本程序设计,12,5.1.4完整的汇编语言程序框架,5.1 程序设计方法概述,源程序的一般格式为: NAME1 SEGMENT 标号: 汇编语言语句序列 ;标号指示程序入口 NAME1 ENDS NAME2 SEGMENT 标号: 汇编语言语句序列 NAME2 ENDS END 程序起始地址标号,2019/7/22,第5章 基本程序设计,13,5.1.4完整的汇编语言程序框架,5.1 程序设计方法概述,STACK SEGMENT PARA STACK STACK ;定义堆栈段 DB 1024 DUP (?) STACK ENDS DATA SEGMENT PARA DATA ;定义数据段 HELLO DB Welcome to BEIJING! , 0dh,0ah,$ DATA ENDS CODE SEGMENT PARA CODE ;定义代码段 ASSUME CS:CODE, DS:DATA,ES:DATA,SS: STACK MAIN PROC FAR START: PUSH DS XOR AX, AX PUSH AX MOV AX, DATA LEA DX, HELLO MOV AH, 9 INT 21H RET MAIN ENDP CODE ENDS END START,2019/7/22,第5章 基本程序设计,14,5.1 程序设计方法概述,5.3 结构化程序设计,第5章 基本程序设计,5.4 顺序结构的程序设计,5.2 流程图,2019/7/22,第5章 基本程序设计,15,5.2.1流程图的功能及意义,5.2流程图,流程图是程序员进行程序设计的工具。借助流程图可以 清晰地把程序思路表达出来,有助于编写正确的程序。,画流程图是在确定算法之后编写程序之前、其目的是准确地表示算法,因此流程图应当是逻辑的,而不是物理的。无论在哪种机器上使用哪种语言,同一个问题的同一个算法的流程图应当是唯一的。,2019/7/22,第5章 基本程序设计,16,5.2.2流程图的画法规定,5.2流程图,端点框:用于表示程序或过程的开始和结束点,框中可以写程序名和过程名、“开始”、“结束”、“返回”等。 处理框:表示除判断以外的所有操作。要完成的操作,可以很概括,也可以很细致。 判断框:这种框有一个入口和两个出口,框中写有某种逻辑条件、根据条件成立与否,分别执行不同的处理。 衔接框:用于将一个流程图分成几个部分分别绘制的情况。框中可以标有数字。两个标有相同数字的衔接框本来是接在一起的。 流向线:连接在各框之间的有向线,指示各框代表的工作的执行次序。,2019/7/22,第5章 基本程序设计,17,5.1 程序设计方法概述,第5章 基本程序设计,5.4 顺序结构的程序设计,5.2 流程图,5.3 结构化程序设计,2019/7/22,第5章 基本程序设计,18,5.3 结构化程序设计,(1)三种程序构件,2019/7/22,第5章 基本程序设计,19,(2)逐步求精的设计方法,5.3结构化程序设计,简言之,这是一种先全局后局部、先整体后细节、先抽象后具体的自顶向下的设计方法。对于复杂的问题,我们不可能立刻精确地给出求解的详细步骤,但是可以从问题的描述开始,首先得到求解的大致步骤,并表示成三种基本结构之一,然后再将上一结构中的处理框进一步分解、加细,仍然代之以三种基本结构之一,如此继续直到最后的流程图已经细致到可以编程的程度为止。,2019/7/22,第5章 基本程序设计,20,5.3结构化程序设计,(3)模块化设计方法,问题规模愈大,求解程序的尺寸也愈大,编写和排错也就愈加困难。模块化设计主张,在解决一个规模较大的问题时,把求解程序按功能分成若干模块、每个模块有自己的相对独立的功能,尺寸较小,通常不超过一页(60多行)。这里的模块一般是作为过程和宏实现的。,2019/7/22,第5章 基本程序设计,21,5.1 程序设计方法概述,第5章 基本程序设计,5.2 流程图,5.3 结构化程序设计,5.4 顺序结构的程序设计,2019/7/22,第5章 基本程序设计,22,5.4顺序结构的程序设计,顺序结构的程序从开始执行到结束,一直是按指令序列在存储器中的存放顺序来执行指令的,这个执行顺序由CS:IP提供的指令地址来控制。 顺序程序的流程图除了起止框外,就是一个接一个的处理框、无判断框,如图52所示。顺序程序一般为简单程序,如计算表达式程序、查表程序。,2019/7/22,第5章 基本程序设计,23,5.4顺序结构的程序设计,设X、Y的值存放在字变量VARX、VARY中,结果存放在VARZ中。程序的流程图如图52所示。源程序编写如下: TITLE EQUATION COMPUTE DATA SEGMENT VARX DW 15 VARY DW 10 VARZ DW ? DATA ENDS STACKl SEGMENT PARA STACK DW 20H DUP(0) STACK1 ENDS,例5. 1 试编写一程序计算以下表达式: Z(3X十Y5)2,2019/7/22,第5章 基本程序设计,24,5.4顺序结构的程序设计,CODE SEGMENT ASSUME CS: CODE, DS: DATA, SS: STACK1 COMP PROC FAR PUSH DS ;保护返回DOS地址 MOV AX, 0 PUSH AX MOV AX, DATA ;初始化DS MOV DS, AX MOV AX, VARX ;AXX SHL AX, 1 ;AX2X ADD AX, VARX ;AX3X ADD AX, VARY ;AX3X+Y SUB AX, 5 ;AX3X+Y5 SAR AX, 1 ;AX(3X+Y5)/2 MOV VARZ, AX ;存结果 RET ;返回DOS COMP ENDP CODE ENDS END COMP,2019/7/22,第5章 基本程序设计,25,5.4顺序结构的程序设计,查表的结果放在变量MATH中。编写的源程序如下: TITLE TABLE LOOKUP DATA SEGMENT TABLE DB 81,78,90,64,85,76,93,82,57,80 DB 73,62,87,77,7486,95,91,82,71 NUM DB 8 MATH DB ? DATA ENDS STACKl SEGMENT PARA STACK DW 20H DUP(0) STACK1 ENDS,例5. 2 利用学号查该学生的数学成绩。首先在数据段中建立一个成绩表TABLE,在表中按学号从小到大的顺序存放分数。要查的学号存放在变量NUM中。,2019/7/22,第5章 基本程序设计,26,CODE SEGMENT ASSUME CS: CODE, DS: DATA, SS: STACK1 START: MOV AX, DATA MOV DS, AX MOV BX, OFFSET TABLE ;BX指向表首址 XOR AH, AH,5.4顺序结构的程序设计,MOV AL, NUM DEC AL ADD BX, AX ;BX加上学号指向要查的成绩 MOV AL, BX ;查到成绩 MOV MATH, AL ;存结果 MOV AH, 4CH ;返回DOS INT 21H CODE ENDS END START 上述程序中,学号NUM是从1开始,因此需将学号减1以获得成绩在表中的偏移量(开始)。如果程序使用换码指令XLTA,则长度还可缩短。,2019/7/22,第5章 基本程序设计,27,换码指令格式为: XLAT 表首址 或 XLAT 指令功能:AL (BX)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论