微机原理与应用第5章2节2012SGQppt课件_第1页
微机原理与应用第5章2节2012SGQppt课件_第2页
微机原理与应用第5章2节2012SGQppt课件_第3页
微机原理与应用第5章2节2012SGQppt课件_第4页
微机原理与应用第5章2节2012SGQppt课件_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

.,1,数据定义语句:DB、DW、DD标号赋值语句:EQU、段定义语句:SEGMENTENDS段分配语句:ASSUME程序开始、结束语句:START、END起始指令(用于定义偏移地址):ORG强制转换:PTR,.,2,从程序看出,汇编语言源程序通常有几个段构成,每个段以SEGMENT语句开始,以ENDS语句结束,并分别有一个段名。第一段是数据段,段名DATA,用来定义变量,存放原始数据和运算结果。第二段为代码段,段名为CODE,用来安排执行代码,是用户编程实现各项功能的主要部分。整个源程序必须用END语句结束,它通知汇编程序停止汇编,END后面的标号START指明该程序执行的启动地址。源程序中各段的名字可以任选,段的数目可以根据需要确定.如果用到堆栈段和附加段,在段的定义的时候也要定义出来。,1、汇编语言源程序的格式:,总结,.,3,下面是一个源程序模块的典型段结构形式:STACKSEGMENT;定义堆栈段STACKENDS;堆栈段结束,DATASEGMENT;定义数据段DATAENDS;数据段结束ESEGSEGMENT;定义附加段ESEGENDS;附加段结束CODESEGMENT;定义代码段ASSUMECS:CODE,DS:DATA,SS:STACK,ES:ESEG;段的分配START:MOVAX,DATAMOVDS,AX;指令性语句开始(我们第四章学习编写的程序)MOVAH,4CHINT21H;返回DOSCODEENDS;代码段结束ENDSTART;整个程序结束,.,4,时间:201210月8日(第七周周一),1、掌握汇编语言程序的设计步骤。2、掌握汇编语言程序设计分类。,.,5,一、汇编语言程序的设计步骤1)建立数学模型2)确定数据结构与算法3)绘制流程图及编制程序4)调试,5.2汇编语言程序设计,.,6,源程序:文件名.asm,目标模块:文件名.obj,可执行文件:文件名.exe,错误,.,7,二、程序流程图1)处理框2)判断框判断框常用菱形框来表示,它用来指明判定点。框内指明判断条件。它有一个入口和两个以上的出口,在各出口处要写明条件,成立时标明“是”或“Y”,不成立时标明“否”或“N”来表示。,.,8,3)起止框4)流程线5)连接框,.,9,求一个学生的各门成绩的总和,.,10,二、汇编语言程序设计分类,1、顺序结构2、分支结构3、循环结构,.,11,顺序程序结构是一种最简单的程序结构。在流程图中,处理框一个接一个执行,既无分支,也无循环和转移。是一种简单的程序结构。,(一)、顺序结构,程序的初始化部分一般都是顺序结构,.,12,DATASEGMENTxDB95yDB87zDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATA;装填数据段寄存器DS,例5.8求两个数的平均值。这两个数分别放在x单元和y单元中,而平均值放在z单元中。编制程序如下:,.,13,MOVDS,AXMOVAL,x;第一个数送入ALADDAL,y;两数相加,结果送ALMOVAH,0ADCAH,0;带进位加法,进位送AHMOVBL,2;除数2送BLDIVBL;求平均值送ALMOVz,AL;结果送入z单元MOVAH,4CHINT21HCODEENDSENDSTART,.,14,.,15,例:自然数015的平方表,存在内存TABLE开始的连续16个单元中,现XAD单元存有任意一自然数(0X15),查表求X的平方,存入YAD单元中。,分析:X2的值的地址:TABLE表的首地址+X,可以用XLAT指令,也可以不用,MOVBX,OFFSETTABLEMOVAL,XADXLATTABLEMOVYAD,AL,MOVSI,OFFSETTABLEMOVAL,XADMOVAH,0ADDSI,AX;求出偏移地址,一定是16位MOVAL,SIMOVYAD,AL,.,16,datasegmenttabledb0,1,4,9,16,25,36,49,56,81db100,121,144,169,196,225xaddb3yaddb?dataends,codesegmentassumecs:code,ds:datastart:movax,data;初始化DSmovds,axmovsi,offsettable;表的首址送simovah,0;AH送0moval,xad;将X送ALaddsi,ax;求X平方值的地址moval,simovyad,al,MOVBX,OFFSETTABLE;表的地址给BXMOVAL,XADXLATTABLE;查表MOVYAD,AL,movah,4chint21hcodeendsendstart,.,17,.,18,例5.9在内存中自tab开始的16个单元连续存放着015的平方值(平方表),任给一个数x(0x15)在x单元中,如13,查表求x的平方值,并把结果送入y单元中。根据给出的平方表,分析表的存放规律,可知表的起始地址与数之和,正是的平方值所在单元的地址,由此编制程序如下:,.,19,DATASEGMENTtabDB0,1,4,9,16,25,36,49,64,81DB100,121,144,169,196,225xDB13yDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,.,20,START:MOVAX,DATAMOVDS,AXLEABX,tabMOVAH,0MOVAL,xADDBX,AXMOVAL,BXMOVy,ALMOVAH,4CHINT21HCODEENDSENDSTART,.,21,例,设内存DATA单元存放一个无符号字节数据0B5H,编写程序将其拆成两位十六进制数,并存入HEX和HEX1单元的低4位。HEX存放高位十六进制数,HEX1单元存放低位十六进制数,DSEGSEGMENTDATADB0B5HHEXDB?,?DSEGENDS,CSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXMOVAL,DATAMOVAH,ALANDAL,0F0H,MOVCL,4SHRAL,CLMOVHEX,ALANDAH,0FHMOVHEX+1,AHMOVAH,4CHINT21HCSEGENDSENDSTART,.,22,在地址偏移量为3000H的ALF单元开始,存放一个压缩的BCD码,将其转化为ASCII码,存放在接下来的BLF开始的单元中。,DATASEGMENTORG3000HALFDB89HBLFDB2DUP(?)DATAENDS,CODESEGMENTASSUMECS:CODE,DS:DATA,START:,MOVAX,DATAMOVDS,AXMOVAL,ALFMOVBL,ALMOVCL,4SHRAL,CLORAL,30H,MOVBLF,ALANDBL,0FHORBL,30HMOVBLF+1,BLMOVAH,4CHINT21HCODEENDSENDSTART,.,23,DATASEGMENTHEXDB0ABH,37HDATDB?DATAENDS,CODESEGMENTASSUMECS:CODE,DS:DATA,MOVAH,4CHINT21HCODEENDSENDSTART,START:,MOVAX,DATAMOVDS,AX,MOVAL,HEXANDAL,0FHMOVCL,4SHLAL,CLMOVBL,HEX+1ANDBL,0FHADDAL,BLMOVDAT,AL,设HEX、HEX+1单元的低四位分别存放一位十六进制数,编制程序将其合并为一个字节,并存入DAT单元。其中HEX单元中数据作为高位部分。,.,24,复习,1、汇编语言程序的设计步骤。2、汇编语言程序设计分类。3、顺序结构程序设计。,.,25,如果分支具有N种可能,则称其为N分支。一般N=2时称为简单分支,N=3时称为多分支程序。,(二)、分支结构,1、简单分支,分支程序结构要求程序在运行过程中需要根据不同的情况或条件作出判断,并转向相应的处理程序。分支是通过条件转移指令实现的。,.,26,2、多分支,.,27,例、读程序:下列程序段是比较AX、BX、CX中带符号数的大小,将最大的数放在AX中,请将程序填充完整。CMPAX,BX()NEXTXCHGAX,BXNEXT:()AX,CXJGOUT1()AX,CXOUT1:,JG,CMP,XCHG,.,28,DATASEGMENTORG1000HDAT1DB-1,2,3,-9COUNTDWNMNDB?DATAENDS,CODESEGMENTASSUMECS:CODE,DS:DATA,CODEENDSENDSTART,START:MOVAX,DATAMOVDS,AX,MOVAH,4CHINT21H,MOVSI,OFFSETDAT1MOVCX,COUNTMOVBL,SIINCSIDECCXCMPBL,SIJLNEXTXCHGBL,SI,NEXT:INCSIDECCXJNZAGAINMOVMN,BL,AGAIN:,思考:求N个带符号字节中的最小数,扩展:无符号,字,最大值。极值问题。,.,29,例、根据BUFFER中的数(X)对符号函数BX(Y)赋值。,.,30,(AX)=0?,(AX)0?,0FFFFHBX,0BX,1BX,YJE,YJG,(AX)0,(AX)0,ZERO,初始化,N,N,(AX)0,.,31,DATASEGMENTBUFFERDWXYDW?DATAENDS,CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAX,BUFFERXORBX,BXCMPAX,0JEAJGBMOVBX,0FFFFHJMPSTOP,A:MOVBX,0JMPSTOPB:MOVBX,1STOP:MOVY,BXMOVAH,4CHINT21HCODEENDSENDSTART,扩展:分段函数,.,32,.,33,例、从内存ADR单元开始,连续存放出1000个学生的某门课成绩.统计90100,7089,6069,60以下各段人数.解:设CX:计数器,SI:地址指针.定义:S5,S6,S7,S9单元存放各分数段的人数.AL:待查分数.,.,34,初始化CX、SI、S5、S6、S7、S9,AL60?,AL=90,修改地址,CX=0?,Y,S9+1,S7+1,S5+1,Y,Y,Y,N,N,N,N,结束,60分以下,6069,90100,7089,S6+1,.,35,DATASEGMENTADRDB68,59,85,96,76COUNTDW1000S5DW0S6DW0S7DW0S9DW0DATAENDS,CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETADRMOVCX,COUNT,AGAIN:MOVAL,SICMPAL,60JLNEXT1CMPAL,70JLNEXT2CMPAL,90JGENEXT3INCWORDPTRS6JMPSTOP,NEXT1:INCWORDPTRS9JMPSTOPNEXT2:INCWORDPTRS7JMPSTOPNEXT3:INCWORDPTRS5STOP:INCSIDECCXJNZAGAINMOVAH,4CHINT21HCODEENDSENDSTART,ADRDB250DUP(68,59,85,96),思考:如果多加一个分数段“8090”呢?分类问题分类修改。,.,36,.,37,例4,计算X20(0X8)Y=5X-2(8X15)X(其它)设X为单字节带符号整数,且存在ARGX单元,计算结果Y存入RLT单元,分析:求X绝对值,若X为正数,则是其本身,若X为负数,则将其取补,也就是连同其符号位在内一起取补,原来的负数变成了正数,即X的绝对值,5X可用X*2*2X的算法求得,.,38,DATASEGMENTARGXDB7RLTDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXXORAX,AXMOVAL,ARGXCMPAL,0JGNEXT1NEGALJMPSTOP,NEXT1:CMPAL,15JLNEXT2JMPSTOP,NEXT3:SALAL,1JNCGO1INCAHGO1:SALAL,1JNCGO2INCAHGO2:ADDAL,ARGXADCAH,0SUBAX,2STOP:MOVRLT,AXMOVAH,4CHINT21HCODEENDSENDSTART,NEXT2:CMPAL,8JGNEXT3ADDAL,20ADCAH,0JMPSTOP,X20(0x=8)5X2(8xB,送1给C,如果AB,送-

温馨提示

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

评论

0/150

提交评论