资源描述:
《程序设计及汇编语言ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
程序设计及汇编语言 内容安排一.程序设计步骤二.程序设计三.汇编语言及汇编程序四.汇编语言源程序格式及实例五.上机操作 §5.1程序设计步骤(1)分析问题(2)建立数学模型(3)确定算法(4)绘制程序流程图(5)内存空间分配(6)编制程序与静态检查(7)程序调试(实验)开始结束初始化处理处理分支是否 §5.2程序设计特点:计算机执行程序的方式是“从头到尾”逐条执行指令语句,直至程序结束1.简单程序例5-1:用数据运算指令,对两个16位数做加法运算。这两个数从地址10050H开始连续存放,低位在小地址一端,结果存放在这两个数之后 流程图:开始暂停AX10054H和10055H单元被加数+加数AX初始化加数AX MOVAX,1000HMOVDS,AX;DS=1000HMOVSI,50H;被加数指针SI=50HMOVDI,52H;加数指针DI=52HMOVBX,54H;和的指针BX=54HCLC;清CFXORAX,AX;清AXMOVAX,[SI];取一个字到AXADCAX,[DI];AX←AX+[DI]+CFMOV[BX],AX;存一个字到[BX]HLT;暂停程序: 例5-2:将内存10050H单元的内容拆成两段,每段4位,并将它们分别存入内存10051H和10052H单元。即10050H单元中的低4位放入10051H的低4位,10050H单元中的高4位放入10052H的低4位,而10051H和10052H的高4位均为零流程图:开始暂停逻辑右移得高4位,存入内存10052H单元用逻辑与指令将该数“与”0FH取得低四位,存入内存10051H单元初始化用间址方法取数AL再取出原始数AL 程序:MOVAX,1000HMOVDS,AX;DS=1000HMOVSI,50H;需拆字节的指针SI=50HMOVAL,[SI];取一个字节到AL中ANDAL,0FH;把AL的前4位清0MOV[SI+1],AL;把得到的后4位放到10051H单元MOVAL,[SI];再取出需拆字节放到AL中MOVCL,4SHRAL,CL;逻辑右移四次,前4位补0MOV[SI+2],AL;放入10052H单元HLT 2.分支程序利用条件转移指令,使程序执行到某一指令后,根据条件(即上面运算的情况)是否满足,改变程序执行的次序特点:先用比较指令、数据操作、位测指令等改变标志寄存器各个标志位,然后用条件转移指令进行分支例5-3:求AX累加器和BX寄存器中两个无符号数之差的绝对值,结果放在内存2800H单元中流程图: 程序:CLC;清除CFMOVCX,AXSUBAX,BX;AX←AX-BX,影响CFJCAA;CF=1转AA去执行(即AX1,并且放在内存2001H单元中,而数据块本身是从2002H单元开始存放的,最后,把找出的最大值放到2000H单元中,假设这段数据块中的数都是无符号的8位数,请设计成一段可调用的子程序开始暂停SI=2001H,CL=[SI]00AL,SISI+1修改指针SISI+1是否CXCX-1CX=0AL[SI]AL值≤[SI]AL[2000H]是否LP 程序:MAXSub:PUSHFPUSHAXPUSHCXPUSHSIMOVSI,2001HMOVCL,[SI]INCSIMOVAL,00HMOVCH,00HLP:CLCCMPAL,[SI]JNCAAMOVAL,[SI]AA:INCSILOOPLPMOV[2000H],ALPOPSIPOPCXPOPAXPOPFRET §5.3汇编语言及汇编程序汇编语言易识别,但机器不能直接执行;机器语言相反1.汇编语言与机器语言汇编语言源程序目标程序汇编程序汇编 汇编语言程序设计的特点:汇编语言是面向机器的语言,CPU不同的机器有不同的汇编语言可以充分利用机器的硬件功能和结构特点可有效地加快程序的执行速度,减少目标程序所占用的存储空间可以对输入/输出端口进行控制,实时性能好汇编语言程序移植性、通用性、可读性差汇编语言的指令机器语言的指令一一对应汇编程序:ASM-86/MASM-86 2.伪指令语句特点:不同于指令语句,伪指令语句(又称命令语句)中的伪指令本身不产生对应的机器目标代码功能:仅仅是告诉汇编程序,对后面的指令语句和伪指令语句的操作数应该如何产生机器目标代码伪指令语句格式:伪指令 3.伪指令(1)符号定义伪指令(赋值语句)格式:<名字>EQU<表达式>功能:把表达式的值赋给符号名伪指令机器指令一一对应特点:伪指令不是由86系列CPU执行,而是由MASM-86识别,并完成相应的功能注意:用EQU语句赋值的符号名不能被重新赋值 (2)内存数据定义伪指令格式:[名字]DB<表达式或数据项表>[名字]DW<表达式或数据项表>功能:表达式或项表中的每一项是一个/两个字节数,他们从符号名地址开始按字节连续存放,直到表中数据项结束如:D1DB12H,12H12HD1DB3DUP(12H)MOVAX,D1注意:①表达式或数据项表多于一项时,项与项之间用逗号“,”或空格分隔②表达式或数据项重复书写时,可用重复格式DUP③需考虑符号名的类型一致 (3)段定义伪指令格式:<段名>SEGMENT[定位方式][连接方式][‘类别名’]…<段名>ENDS功能:给存储器在逻辑上分段,它为程序的汇编和连接说明了段名、分段的各种属性以及分段的开始和结束定位方式:又称定位类型,指定段的起始地址边界PAGEPARAWORDBYTE指定起始地址的低8位是0指定起始地址的低4位是0指定起始地址的最低位是0指定起始地址是任意值 连接方式:又称组合类型,告诉连接程序本段与其他段可按某种方式连接PUBLICSTACK空缺(NONE)COMMONMEMORYAT表达式把本段与其他同名同类型的段连接起来,共用一个段的起点地址,形成一个物理段表示本段是堆栈段,连接方式同PUBLIC表示本段不与任何段连接,是系统隐含连接方式表示本段与同名同类型的段共用同一段的起点地址,即同名同类段相重叠,段的长度是最长段的长度表示本段在连接时定位在所有段之上,即高地址处表示本段定位在表达式值指定的段地址处类别名:需用单引号括起来,凡是类型名相同的段在连接时均按先后顺序连接起来 (4)段寄存器说明伪指令格式:ASSUME段寄存器:段定义名1[,段寄存器:段定义名2,…]功能:告诉汇编程序在汇编时,段寄存器CS:DS:SS:和ES:应具有的符号段基址,以便汇编指令时确定段和建立错误信息。但是段寄存器实际值(CS除外)还要有传送指令在执行程序时赋值(5)模块开始伪指令格式:NAME模块名功能:指明程序模块的开始,并指出模块名,一般取源程序文件名为模块名 (6)过程(子程序)定义伪指令格式:<过程名>PROC[NEAR](或[FAR])┇<过程名>ENDP功能:定义过程是为了实现子程序调用而设的调用格式:CALL<过程名>过程由RET指令返回(7)模块结束伪指令格式:END[启动标号或过程名]功能:告诉汇编程序源文件结束,并给出执行程序的入口位置 (8)定位伪指令格式:ORG<表达式>功能:把以下语句定义的内存数据或程序,从表达式指定的起点(偏移地址)开始连续存放,直至遇到新的ORG指令。表达式值是一个无符号数(9)列表伪指令格式:PAGE行数,行字数功能:为列表文件定义每页行数(10~255)和每行字符数(60~132),默认值是66行,80列 §5.4汇编语言源程序格式及实例DATASEGMENT┇}存放数据项的数据段DATAENDSEXTRASEGMENT┇}存放数据项的附加段EXTRAENDSTACK1SEGMENTPARASTAC┇}作堆栈用的堆栈段STACK1ENDS(1)汇编语言源程序基本格式 COSEGSEGMENTASSUMECS:COSEG,DS:DATAASSUMESS:STACK1,ES:EXTRABEING:MOVAX,DATAMOVDS,AX┇}存放指令序列COSEGENDSENDBEING注意:排列的先后顺序可以是任意的例5-8:从键盘上输入任意一个1位十进制数(0~9),用移位指令乘10,并将结果显示出来(2)实例 程序:NAMEEX1PAGE50,70DATSEGMENTPARA'DAT'BUFFDB4DUP(?)DATENDSSTACSEGMENTPARASTACK'STA'STA1DB100DUP(?)STACENDSCODESEGMENTPARA'CODE'ASSUMECS:CODE,DS:DATASSUMESS:STAC,ES:DAT STARTPROCFARPUSHDSXORAX,AXPUSHAXMOVAX,DATMOVDS,AXLEASI,BUFF;建立缓冲区首址指针CALLP1;调键盘输入子程序CALLP2;调乘10子程序CALLP3;调显示子程序RET;返回DOS;设置DS值 P1PROC;键盘输入子程序RE:MOVAH,1INT21HCMPAL,'0'JCRECMPAL,'A'JNCREANDAL,0FHMOV[SI],ALMOVDL,0DHMOVAH,2INT21HMOVDL,0AHMOVAH,02HINT21HRETP1ENDP;从键盘输入一个数并显示;判数据输入合法否?若不合法,重新输入;将输入数据转换为BCD码存缓冲区;回车换行符送显示 P2PROC;乘10子程序MOVAL,[SI];从缓冲区取数SHLAL,1MOVBL,ALMOVCL,2SHLAL,CLADDAL,BLMOVAH,0MOVBL,10DIVBLADDAH,30HADDAL,30HMOV[SI],ALMOV[SI+1],AHRETP2ENDP;乘10;将积转换成ASCⅡ码存缓冲区 P3PROC;显示子程序MOVDL,[SI]MOVAH,2INT21HMOVDL,[SI+1]MOVAH,2INT21HRETP3ENDPCODEENDSENDSTART §5.5上机操作编辑程序.ASMMASM.OBJLINK.EXE 汇编语言上机过程:开机进行系统选择→DOS进入DOS环境C:>C:>CDMASM↙C:MASM>EDIT↙进入编辑环境,输入程序,输入完毕存盘ALT-F→NEW建立新文件OPEN打开已有文件SAVE保存SAVEAS另存为↓EXIT退出 选择SAVE↙,命名EX1.ASM↙ALT-F→EXIT回到DOS环境C:MASM>MASMEX1.ASM↙3次回车,无错.0warnings0errors.C:MASM>LINKEX1.ASM↙3次回车Running:EX1.EXE:EX1↙看结果! 作业1.编写出执行以下计算的程序,其中X,Y,Z,R,W均为存放16位带符号数单元地址(1)(2)2.编程序,用TEST指令测试DL寄存器位3,位6是否同时为0,若是,将0送DL;否则1送DH。3.编一程序段,完成符号函数:假设x的值存放在DATA1中,y的值存放在DATA2中。4.设AX寄存器中有一个16位二进制数,编一程序,统计AX中“1”的个数,统计结果送CX中。 5.读程序:START:INAL,20HMOVBL,ALINAL,30HMOVCL,ALMOVAX,0ADLOP:ADDAL,BLADCAH,0DECCLJNZADLOPHLT请问:(1)本程序实现什么功能?(2)结果在哪里?