微机原理与接口技术 第6章.ppt_第1页
微机原理与接口技术 第6章.ppt_第2页
微机原理与接口技术 第6章.ppt_第3页
微机原理与接口技术 第6章.ppt_第4页
微机原理与接口技术 第6章.ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

第6章汇编语言程序设计,用汇编语言编程属结构化程序设计。需按照结构化的思想来进行汇编程序的设计,分析题意,确定算法根据算法画出程序框图根据框图编写程序上机调试程序执行程序,按照自上而下的设计方法,设计一个汇编程序的步骤:,顺序程序分支程序循环程序,从结构上来讲,一般的汇编程序可分为:,Eg:从键盘输入一个字符并存储到字节变量BUF单元中.,分析:用DOS功能调用完成键入,输入的字符保存在AL寄存器中将AL中的内容存到定义在数据段的变量BUF所指单元中,顺序程序设计,.486DATASEGMENTUSE16BUFDB?DATAENDS,源程序清单:,CODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVAH,1INT21H;AL=键入字符的MOVBUF,ALASIIC码MOVAH,4CHINT21HCODEENDSENDBEG,分支程序设计,转移指令可用来实现分支程序设计,分支程序分三种:简单分支复合分支多分支,简单分支即两路分支,该分支程序结构为:,Eg:将BX寄存器的内容以二进制数格式显在屏幕上,BX=1110010011100110B,简单分支,486CODESEGMENTUSE16ASSUMECS:CODEBEG:MOVBX,5678HMOVCX,16LAST:MOVAL,0ROLBX,1JNCNEXTMOVAL,1NEXT:MOVAH,0EHINT10HLOOPLASTMOVAH,4CHINT21HCODEENDSENDBEG,源程序清单:,复合分支判断的条件是复合条件,称复合判断复合分支程序结构为:,Eg:某科室9人,统计月收入在800900间的人数,并用十进制数显示,复合分支,分析:月收入是无符号数,对一批数处理应该用间址。,多分支判断条件后有多个出口,判断一次只能选择一个分支。多分支程序结构为:,1,例.多分支段内转移要求:键入0,转P0程序段键入1,转P1程序段键入9,转P9程序段,思路:用比较指令配合直接转移指令实现CMP键入字符,0JEP0CMP键入字符,1JEP1,用转移地址表配合间接转移指令实现,多分支,486DATASEGMENTUSE16TABDWP0,P1,P9;汇编后自动装入相应的偏移地址MESGDB0DH,0AH,strike09:$DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXAGA:MOVAH,9MOVDX,OFFSETMESGINT21HMOVAH,1INT21HCMPAL,0JCAGA,CMPAL,9JAAGASUBAL,30HMOVZXBX,ALADDBX,BX;2BXBXMOVSI,OFFSETTABJMPBX+SI;DS:BX+SIIPP0:P1:P9:CODEENDSENDBEG,源程序清单:,循环程序设计,循环程序的组成:循环准备循环体循环控制,1.循环程序的结构,Eg:假设从BUF单元开始为一个ASCII码字符串,找出其中的最大数送屏幕显示。,循环程序设计,思路:ASC码数为无符号数,无符号数的最小数为0,486DATASEGMENTUSE16BUFDBQWERTYUIOP123COUNTEQU$-BUF;统计串长度MAXDBMAX=,?,0DH,0AH,$DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVAL,0;无符号最小数0ALLEABX,BUF;串首址偏移量BXMOVCX,COUNT;串长度CX,LAST:CMPBX,AL;比较JCNEXTMOVAL,BX;大数ALNEXT:INCBXLOOPLAST;循环计数MOVMAX+4,AL;最大数MAX+4单元MOVAH,9MOVDX,OFFSETMAXINT21H;显示结果MOVAH,4CHINT21H;返回DOSCODEENDSENDBEG,源程序清单1:,486DATASEGMENTUSE16BUFDBQWERTYUIOP123FLAGDB1;设置串结束标志MAXDBMAX=,?,0DH,0AH,$DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVAL,0;无符号最小数0ALLEABX,BUF;串首址偏移量BXLAST:CMPBYTEPTRBX,-1;BX=串结束标志?,JEDISP;是,转CMPBX,ALJCNEXTMOVAL,BX;大数ALNEXT:INCBXJMPLASTDISP:MOVMAX+4,AL;最大数MAX+4单元MOVAH,9MOVDX,OFFSETMAXINT21H;显示结果MOVAH,4CHINT21H;返回DOSCODEENDSENDBEG,源程序清单2:,汇编程序设计举例,代码转换,代码转换,常见的代码转换有:二进制数显示二进制数十进制数显示二进制数十六进制数显示BCD码数二进制数,代码转换,A,PleaseEnter:,PleaseEnter:,9,=00001001B,代码转换,思路:键盘缓冲区中是键入字符的ASC码。09的ASC码为30H39H。二进制数每一位代码的判断:,本程序采用两种格式设计源程序:一种是EXE文件编程格式,另一种是COM文件编程格式。,程序框图:,.486DATASEGMENTUSE16MESG1DBPleaseEnter!,0DH,0AH,$MESG2DB-Error!$DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATABEG:MOVAX,DATAMOVDS,AXMOVAH,9MOVDX,OFFSETMESG1INT21H;显示操作提示MOVAH,1INT21H;等待键入CMPAL,3AHJNCERROR;9转CMPAL,30H,EXE格式程序清单,JCERROR;0转SUBAL,30HMOVBL,AL;BL=09的二进制数MOVAH,2MOVDL,=INT21HCALLDISPMOVAH,2MOVDL,BINT21HJMPEXITERROR:MOVAH,9MOVDX,OFFSETMESG2INT21H;显示错误信息EXIT:MOVAH,4CHINT21H,;-DISPPROC;显示BL中的二进制数MOVCX,8LAST:MOVDL,0RCLBL,1JNCNEXTMOVDL,1NEXT:MOVAH,2INT21HLOOPLASTRETDISPENDPCODEENDSENDBEG,EXE格式程序清单,.486CODESEGMENTUSE16ASSUMECS:CODEORG100HSTART:JMPBEGMESG1DBPleaseEnter!,0DH,0AH,$MESG2DB-Error!$BEG:MOVAH,9MOVDX,OFFSETMESG1INT21H;显示操作提示MOVAH,1INT21H;等待键入CMPAL,3AHJNCERROR;9转CMPAL,30HJCERROR;0转SUBAL,30H,MOVBL,AL;BL=09的二进制数MOVAH,2MOVDL,=INT21HCALLDISPMOVAH,2MOVDL,BINT21HJMPEXITMOVDX,OFFSETMESG2INT21H;显示错误信息INT21H,ERROR:MOVAH,9,EXIT:MOVAH,4CH,COM格式程序清单,;-DISPPROC;显示BL中的二进制数MOVCX,8LAST:MOVDL,0RCLBL,1JNCNEXTMOVDL,1NEXT:MOVAH,2INT21HLOOPLASTRETDISPENDPCODEENDSENDSTART,COM格式程序清单,问题:键入的是两位十进制数时,如何将该十进制数的二进制数显示在屏幕上?,代码转换,二.二进制数十六进制数显示,算法:,代码转换,编程技巧:,8位二进制数,截取高4位,显示,显示,截取低4位,XXXX,XXXX,XXXX,0000,XXXX,0000,16进制数ASC码,16进制数ASC码,代码转换,例.设从BNUM单元开始,有4个16位的二进制数,要求把它们转换成16进制数,并送屏幕显示。,程序清单.486DATASEGMENTUSE16BNUMDW0001001000110100B;1234HDW0101011001111000B;5678HDW0001101000101011B;1A2BHDW0011110001001101B;3C4DHBUFDB4DUP(?),H$;输出缓冲区COUNTDB4DATAENDSCODESEGMENTUSE16ASSUMECS:CODE,DS:DATA,BEG:MOVAX,DATAMOVDS,AXMOVCX,4MOVBX,OFFSETBNUMAGA:MOVDX,BXSALEDX,16CALLN2_16ASCMOVAH,9MOVDX,OFFSETBUFINT21H;显示一个16进数ADDBX,2;地址加2LOOPAGAMOVAH,4CHINT21H,;二进数十六进数ACSII码N2_16ASCPROCMOVSI,OFFSETBUF;输出缓冲区地址SIMOVCOUNT,4LAST:ROLEDX,4ANDDL,0FHCMPDL,10JCNEXTADDDL,7NEXT:ADDDL,30HMOVSI,DLINCSI;地址加1DECCOUNT;计数JNZLASTRETN2_16ASCENDPCODEENDSENDBEG,EXE格式程序清单,代码转换,三.BCD码二进制数例.4位BCD码数二进制数显示,算法:设4位BCD码数列为:N3N2N1N0,等值二进制数=N31000+N2100+N110+N0=(010+N3)10+N2)10+N1)10+N0,编程考虑:4位BCD码最大为9999H,等值的二进制数最大为16位(超过8位),而且D15位肯定为0分离出BCD千位N3,百位N2,十位N1,个位N0设计一个AX10+BXAX的子程序供调用,首次调用时,令AX=0,BX=N3,共调用4次,则AX中即为等值的二进制数。,486CODESEGMENTUSE16ASSUMECS:CODENUMDW4567H;BCD码表示BEG:MOVCX,4;4次调用MOVAX,0AGA:ROLNUM,4MOVBX,NUMANDBX,000FHIMULAX,10ADDAX,BXLOOPAGA显示AX中的二进制数返回DOSCODEENDSENDBEG,本例数据放在代码段!本例:因为AX的D15=0,是正的有符号数,所以可用IMUL指令,AX10+BXAX,EXE格式程序清单,代码转换,三.二进制数十进制数,方法:比较法,恢复余数法,除法,8位二进制数最大为11111111,等值的十进制数为255,比较法的关键:判断某二进制数(假设为BEN单元的内容)包含几个100,几个10,几个1,1.8位二进制数十进制数,比较法:,.486CMPDISPMACRONNLOCALLAST,NEXTMOVDL,0;DL清0LAST:CMPBEN,NN;比较JCNEXT;BENNN转INCDL;DL加1SUBBEN,NNJMPLASTNEXT:ADDDL,30HMOVAH,2INT21H;显示ENDM,CODESEGMENTUSE16ASSUMECS:CODEBENDB10101110B;=174BEG:CMPDISP100CMPDISP10CMPDISP1MOVAH,4CHINT21HCODEENDSENDBEG,EXE格式程序清单,代码转换,2.8位二进制数十进制数,恢复余数法(请自学)3.8位二进制数十进制数,“除权值求商”的算法分析,把11110101B十进制数245,算法:依次用权值100,10,1去除上次的余数,直到余数为0时停止。每次除法所得的商数顺序排列,即为十进制数。,例.将NUM单元中的16位二进制数,转换成十进制数显示。,思路:16位二进制数:最大为11,其等值的十进制数为65535,故应判断NUM单元的数包含几个10000,几个1000,几个100,几个10,几个1设计一个XXYY并显示商值的宏指令供调用,XX为32位,YY为16为二进制数。,DX,AX为被除数,486DIVIDEMACROXX,YYMOVAX,XXMOVDX,0MOVCX,YY;CX为除数DIVCX;AX=商,且1010B,DX=余数MOVAH,0EHADDAL,30HINT10HENDMCODESEGMENTUSE16ASSUMECS:CODENUMDW65530;汇编后为二进制数BEG:DIVIDENUM,10000DIVIDEDX,1000,本题在代码段中设置数据,这是COM格式?EXE格式?如果改为:BEG:MOVBX,OFFSETNUMDIVIDEBX,10000是错误的,为什么?,DIVIDEDX,100DIVIDEDX,10DIVIDEDX,1MOVAH,4CHINT21HCODEENDSENDBEG,显示一位商值,分析:,应写成:DIVIDECS:BX,10000,程序清单,代码转换,4.8位二进

温馨提示

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

评论

0/150

提交评论