【文档说明】汇编语言设计第5章基本设计剖析课件.ppt,共(35)页,181.300 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44802.html
以下为本文档部分文字说明:
汇编语言设计第5章基本设计剖析课件5.1程序设计方法概述5.2流程图5.3结构化程序设计第5章基本程序设计5.4顺序结构的程序设计9/9/2022•第1章汇编语言基础知识5章基本程序设计汇编语言同BASIC或C等高级语言一样,都是
一些语句和指令的集合,这些语句决定计算机将做什么,它们的不同之处在于如何指示计算机完成相应的任务。高级语言给出一般性命令,而汇编语言给出具体的命令。汇编语言指令集中的语句直接涉及到计算机的硬件部分,提供给计算机更详细的命令,直接对硬件进行操作,如“臵3
2于AX寄存器中”,“将CL寄存器的内容传送到DL寄存器中”,“存储DL寄存器中数到内存3456地址处”等。5.1程序设计方法概述使用汇编语言是在计算机能够理解的基础上编写程序,但又不必死记机器代码。采用像英
文缩写一样的指令,然后运行汇编程序(将汇编语言编写的程序翻译成机器代码)将它们转化为机器代码。用汇编指令写的程序称为汇编语言源程序。微处理器可执行的机器代码形式称为目标程序。9/9/2022•第1章汇编语
言基础知识5章基本程序设计一般说来,编制一个汇编语言程序需要完成以下步骤:(1)分析题意,建立数学模型,确定数据结构及算法。这一步是能否编制出高质量程序的关键,因此不应该一拿到题目就急于写程序,而是应该仔细地分析和理解题意
,找出合理的算法及适当的数据结构。(2)根据算法画出程序流程图。这一步对初学者尤其重要,这样做可以减少出错的可能性。画流程图时可以从粗到细把算法逐步地具体化。(3)根据算法及数据结构分配内存单元和寄存器。(4)编写汇编语言源程序。(5)使用汇编程序调试工具上机调试程序。5.1.1编写汇编语言程序的
步骤5.1程序设计方法概述9/9/2022•第1章汇编语言基础知识5章基本程序设计5.1.2判断程序质量的标准5.1程序设计方法概述一个良好的程序应符合以下标准:(1)程序可读性强。(2)程序执行的时间短(效率高)。(3)程序所占用的内存少。(4)
程序的语句行数少。5.1.3汇编语言程序的开发过程5.1程序设计方法概述一般来说,开发汇编语言程序有以下面5个步骤:(1)设计(2)编辑(3)汇编(4)连接(5)调试5.1.3汇编语言程序的开发过程5.1程序设计方法概述(1)设计根据所需完成的任务要求
、设计程序结构,确定应用算法,并按使用的寄存器从程序段、数据段和堆栈段制定内存分配方案,画出程序流程图。5.1.3汇编语言程序的开发过程5.1程序设计方法概述(2)编辑根据设计方案及程序流程图创建汇编语言源程序。该源程序是
按照汇编语言语法规则编写的文本文件,定义为后缀是.ASM的文件。它由程序员通过文本编辑器来完成。文本编辑器是任何流行的字处理器或编辑器,只要它们可以产生纯ASCII码文本文件,不带有任何特殊控制码和格式码。DOS下常用的有Edit、PE2等。Wind
ows下常用的有Word等,但文件存储格式必须为(.TXT)文本格式,且扩展名必须为.ASM。5.1.3汇编语言程序的开发过程5.1程序设计方法概述(3)汇编汇编是指将汇编语言编写的程序翻译成机器代码组成的目标程序的过程。自动完成这一任务的软
件叫汇编程序,又称为汇编器。自动生成的目标程序是机器可以理解的,它是后缀为.OBJ的文件。在汇编的过程中,汇编程序可以发现源程序的语法诺误,如格式错误、非法指令、操作数类型不匹配等。一旦发现错误,汇编程序会提示程序员对源程序加以修
改,并重新汇编。汇编程序主要包括以下几方面的功能:①检查源程序中的语法错误,并给出出错信息。②产生源程序的目标程序,并给出列表文件。③支持地址和数据的符号变量表。④支持对内存的管理。⑤支持多种类型的数据表示。
⑥支持程序的模块化组织。DOS下常用的汇编程序有MASM、TASM等。。5.1.3汇编语言程序的开发过程5.1程序设计方法概述(4)连接DOS运行一个可执行程序时,先要在内存中为该程序开辟一块或几块存储空间,然后在此加载并运行该程序。该存储空间是由系统当时的运行状态决定的,是不固定的,这就要求
可执行程序是可重定位的,即它可以在内存的不同位臵运行。汇编后生成的目标程序虽然加载了CPU可识别的机器代码,但它缺少系统所需要的重定位信息,所以并不能直接运行。目标程序必须经过连接程序的连接,生成附带重定位信息的可执行程序(后缀为.COM或.EX
E的文件)才能运行。连接程序的第一个任务就是从目标模块中产生一个运行模块,并使其具有可重定位性。连接程序的第二个任务是可将几个目标模块连接成一个可执行的模块,并同样使其具有可重定位性。这样就可以将一个程序的几部分分别编写,汇编成几个目标模块,再通过连接程序将几个目标模块
连接,生成一个完整的运行模块。连接程序可以发现源程序中的连接错误,如段的溢出或覆盖、匹配的模块、不存在或不匹配的标号、变量等。DOS下常用的连接程序有Link、Tlink等。5.1.3汇编语言程序的开发
过程5.1程序设计方法概述(5)调试完成设计、编辑、汇编、连接后得到的可执行目标程序中可能存在一些错误,这些错误可能是设计缺陷或编辑时的笔误,它们可能使程序运行出现结果错误、死机甚至其他无法预测的后果。这类错误被称为逻辑错误,它们是汇编程序和连接程序都无法发现的。这类错误只能靠程序员凭借调试程序
和经验对可执行程序进耐心细致的跟踪调试,才能逐一排除。DOS下常用的调试程序有Debug、Tdebug等。5.1.4完整的汇编语言程序框架5.1程序设计方法概述源程序的一般格式为:NAME1SEGMENT[标号:]汇编语言语句序列;标号指示程序
入口…NAME1ENDSNAME2SEGMENT[标号:]汇编语言语句序列…NAME2ENDS…END〈程序起始地址标号〉5.1.4完整的汇编语言程序框架5.1程序设计方法概述DATASEGMENT;;定义数据段HELLODB'WelcometoBEI
JING!',0dh,0ah,'$'DATAENDSCODESEGMENT;;定义代码段ASSUMECS:CODE,Ds:dataSTART:movax,datamovds,axLEADX,HELLOMOVAH,9int21hmo
vah,4chint21hCODEENDSENDSTART以下是一个例子,说明8086/8088汇编语言的基本框架结构。该程序在屏幕上显示一句问候语:“WelcometoBEIJING!”。5.1程序设计方法概述5.3结构化程序设计第5章基本程序设计5.4顺序结构的程序设计5.
2流程图5.2.1流程图的功能及意义5.2流程图流程图是程序员进行程序设计的工具。画流程图是在确定算法之后编写程序之前、其目的是准确地表示算法,因此流程图应当是逻辑的,而不是物理的。无论在哪种机器上使用哪种语言,同一个问题
的同一个算法的流程图应当是唯一的。5.2.2流程图的画法规定5.2流程图开始处理判断?1端点框:用于表示程序或过程的开始和结束点,框中可以写程序名和过程名、“开始”、“结束”、“返回”等。处理框:表示除判断以外的所有操作。要完
成的操作,可以很概括,也可以很细致。判断框:这种框有一个入口和两个出口,框中写有某种逻辑条件、根据条件成立与否,分别执行不同的处理。衔接框:用于将一个流程图分成几个部分分别绘制的情况。框中可以标有数字。两个标有相同数字的衔接框本来是接在一起的。流向线:连接在各框
之间的有向线,指示各框代表的工作的执行次序。5.1程序设计方法概述第5章基本程序设计5.4顺序结构的程序设计5.2流程图5.3结构化程序设计5.3结构化程序设计(1)三种程序构件ABABAAcondcond
cond(a)顺序结构(b)分支结构(c)循环结构(WHILE循环)(UNTIL循环)图5-1程序的三种基本结构9/9/2022•第1章汇编语言基础知识5章基本程序设计(2)逐步求精的设计方法5.3结构化程序设计简言之,这是一种先全局后局部、先整体后细节、先抽象后具体的自
顶向下的设计方法。对于复杂的问题,我们不可能立刻精确地给出求解的详细步骤,但是可以从问题的描述开始,首先得到求解的大致步骤,并表示成三种基本结构之一,然后再将上一结构中的处理框进一步分解、加细,仍然代之以三种基本结构之一,如此继续直到最后的流程图已经细致
到可以编程的程度为止。5.3结构化程序设计(3)模块化设计方法问题规模愈大,求解程序的尺寸也愈大,编写和排错也就愈加困难。模块化设计主张,在解决一个规模较大的问题时,把求解程序按功能分成若干模块、每个模块有自己的相对独立的功能,尺寸较小,通常不超过一页(60多行)。这里的模块一般是作为过程和宏实
现的。5.1程序设计方法概述第5章基本程序设计5.2流程图5.3结构化程序设计5.4顺序结构的程序设计5.4顺序结构的程序设计顺序结构的程序从开始执行到结束,一直是按指令序列在存储器中的存放顺序来执行指令的,这个执行顺序由
CS:IP提供的指令地址来控制。在程序执行前,系统将要执行的第一条指令的地址装入CS和IP中,然后CPU按CS:IP中的地址从存储器取指令到指令队列准备执行,同时修改IP内容指向下一条指令,本条指令执行结束,就接着执行下
一条指令……这样逐条执行指令直到程序结束。顺序程序的流程图除了起止框外,就是一个接一个的处理框、无判断框,如图5—2所示。顺序程序一般为简单程序,如计算表达式程序、查表程序。开始计算3X计算3X+Y计算3X+Y-5计算(3X+Y-5)/2存结果结
束图5-29/9/2022•第1章汇编语言基础知识5章基本程序设计5.4顺序结构的程序设计开始计算3X计算3X+Y计算3X+Y-5计算(3X+Y-5)/2存结果结束图5-2设X、Y的值存放在字变量VARX、VARY中,结果存放在VARZ中。程序的流程图如图5
—2所示。源程序编写如下:TITLEEQUATIONCOMPUTEDATASEGMENTVARXDW15VARYDW10VARZDW?DATAENDS例5.1试编写一程序计算以下表达式:Z=(3X十Y-5)/25.4顺序结构的程序设计CODESEGMENTASSUMECS
:CODE,DS:DATAStart:MOVAX,DATA;初始化DSMOVDS,AXMOVAX,VARX;AX←XSHLAX,1;AX←2XADDAX,VARX;AX←3XADDAX,VARY;AX←3X+YSUBAX
,5;AX←3X+Y-5SARAX,1;AX←(3X+Y-5)/2MOVVARZ,AX;存结果movah,4chint21h;返回DOSCODEENDSENDstart例5.1调试5.4顺序结构的程序设计查表的结果
放在变量MATH中。编写的源程序如下:TITLETABLELOOK—UPDATASEGMENTTABLEDB81,78,90,64,85,76,93,82,57,80DB73,62,87,77,74.
86,95,91,82,71NUMDB8MATHDB?DATAENDS例5.2利用学号查该学生的数学成绩。首先在数据段中建立一个成绩表TABLE,在表中按学号从小到大的顺序存放分数。要查的学号存放在变量NUM中。CODESEGMENTASSUMECS:CODE,DS:DATASTART
:MOVAX,DATAMOVDS,AXMOVBX,OFFSETTABLE;BX指向表首址XORAH,AH5.4顺序结构的程序设计MOVAL,NUMDECALADDBX,AX;BX加上学号指向要查的成绩MOVAL,[BX];查到成绩MOVMATH,AL;存结果MOVAH,4CH;返
回DOSINT21HCODEENDSENDSTART上述程序中,学号NUM是从1开始,因此需将学号减1以获得成绩在表中的偏移量(开始)。如果程序使用换码指令XLAT,则长度还可缩短。可替换成:XLAT换码指令
格式为:XLAT指令功能:AL←((BX)+(AL)),不影响标志位。XLAT指令可将AL中的一个值转换为存储器表格中的一个值后,再送回AL中。使用XLAT指令之前,要求将表首地址的偏移量送人BX中,待查项与表首地址之间的字节距离送入A
L(0~255)中。这样,以上程序中代码段的有关指令语句可以改为:BEGIN:MOVAX,DATAMOVDS,AXMOVBX,OFFSETTABLEMOVAL,NUMDECALXLATMOVMATH,AL5.4顺序结构的程序设计例用查表方法将hex单元中
低4位16进制数转化为相应的ASCII并显示。调试•9/9/2022例将HEX单元的内容拆成2段,每段4位,将其存入result,result+1两个单元。datasegmenthexdb7AHresultdb?,?dataen
dscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmoval,[hex]andal,0fhmov[result],almoval,[hex]movcl,4shral,clmov[result+
1],almovah,4chint21hcodeendsendstart•9/9/2022例•内存中Table开始存放0—9的平方值,通过人机对话,当任给一个数x(0—9),查表得x的平方值,放在AL中。9/9/2022•第1章汇编语言基础知识5章基本程序设计例•设Hex,Hex+1单元的低
4位分别存放一位16进制数,编制程序将其装配在一个字节中并存入NewNum单元。Hex单元中数据作为高位部分。前四次上机任务1:汇编运行环境及方法、简单程序设计(实验教程P3)2:用DEBUG编程:使用堆栈段将AX和BX的内容进行交换等(补充)3:存储器块清零和内存块移动(实验教程P27,P2
8)4:将键盘输入的小写字母用大写字母显示出来(补充)教材P93—P94习题3(将4个压缩BCD码改成1个压缩BCD码)习题4习题59/9/2022•第1章汇编语言基础知识5章基本程序设计