微机原理及接口技术(第三章-6)ppt课件_第1页
微机原理及接口技术(第三章-6)ppt课件_第2页
微机原理及接口技术(第三章-6)ppt课件_第3页
微机原理及接口技术(第三章-6)ppt课件_第4页
微机原理及接口技术(第三章-6)ppt课件_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

.,1,五、汇编语言程序设计讲课内容一、概述1.编写汇编语言程序步骤2.判断程序质量的标准3.几种程序结构二、汇编语言程序设计举例例1将寄存器BX中的内容以十六进制形式显示出来。例2将键盘输入的十进制数据串转换成其相应大小的数值存放在BX寄存器中。,.,2,一、概述1.编写汇编语言程序步骤2.判断程序质量的标准3.几种程序结构,.,3,一.编写汇编语言程序步骤分析实际问题,抽象描述问题的模型确定解决模型的算法按算法画出程序流程图按流程图编写程序上机调试,运行程序,.,4,2.判断程序质量的标准程序的正确性程序的可读性程序的执行时间程序所占内存大小,.,5,3几种程序结构顺序结构分支结构循环结构子程结构,.,6,顺序结构,.,7,例:P156内存中自TABLESQ开始的16个单元连续存放着自然数0到15的平方值,任给一数x(0x15)在XY单元中,查表求出X的平方值,将结果存入YY单元中。,DATASEGMENTTABLESQDB0,1,4,9,16,25,36,49,DB64,81,100,121,144,169,225XXDB?YYDB?DATAENDSSTACKSEGMENPARASTACKSTACKDB50DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTACKPROCFAR*BEGIN:PUSHDS*MOVAX,0*PUSHAX*MOVAX,DATAMOVBX,OFFSETTABLESQMOVAH,0MOVAL,XXADDBX,AXMOVAL,BXMOVYY,AL,RET*STARTENDP*CODEENDSENDBEGIN,.,8,.,9,例:某工厂有8种产品的加工程序RO到R7分别存放在SRRO,SBRI,SBR7为首地址的内存区域中,这8个首地址的偏移量连续存放在以BASE为首地址的跳转表内,如图:,BASESBRO低位字节,BASE+1SBRO高位字节,BASE+2SBR1低位字节,高位字节,BASE+14SBR7低位字节,BASE+15SBR7高位字节,跳转表,SBRO,SBR1,SBR7,.,10,分支结构,.,11,Y,Y,N,N,分支结构,.,12,循环结构,当型循环(当条件成立进入循环),直到型循环(直到条件成立退出循环),.,13,1多处调用完成同一功能的子程:codeSEGMENTstart:、CALLsub、CALLsub、CALLsub、MOVAH,4CHINT21HsubPROC、RETsubENDPcodeENDSENDstart,2模块化程序设计:codeSEGMENTbegin:CALLsub1CALLsub2CALLsub3MOVAH,4CHINT21Hsub1PROC、RETsub1ENDPsub2PROC、RETsub2ENDPsub3PROC、RETsub3ENDPcodeENDSENDbegin,子程结构,注意返回DOS语句位置,.,14,思考如下程序的执行流程:codeSEGMENTstart:、CALLsub、CALLsub、;MOVAH,4CH;INT21HsubPROC、RETsubENDPMOVAH,4CHINT21HcodeENDSENDstart,程序执行不到返回DOS功能调用处,最后的结果是死机.,.,15,二、汇编语言程序设计举例例1将寄存器BX中的内容以十六进制形式显示出来。(二进制十六进制)例2将键盘输入的十进制数据串转换成其相应大小的数值存放在BX寄存器中。,.,16,有关字符、数码转换的处理1.计算机处理字符时,常用的字符编码是ASCII码。2.数字和字母的ASCII码是一个有序序列数字09:30H39H大写字母AZ:41H5AH小写字母az:61H7AH,.,17,3.计算机处理信息时,其对象都是二进制数。外设(显示器、打印机、键盘等)用ASCII码与CPU进行信息传送。例如:1)在键盘上按下某一字符键(如9),键盘接口向键盘缓冲区送去的是该字符的ASCII码(如39H),不是送数字09H。2)在文本方式下,要在显示器上显示某一字符(如A),须将该字符的ASCII码(如41H)送显示缓冲区,不是送数字0AH。,计算机要利用显示器、键盘等外设时,须据程序设计的需要进行有关转换。,.,18,例将CPU运算的结果通过显示器显示时,如二进制数“A9”需将结果转换成其对应的ASCII码才能进行显示。,.,19,例CPU要处理从键盘输入的某一数据,如键入“1234”需将该数据串进行转换十六进制后才能应用。,.,20,例1将BX寄存器中的内容以十六进制形式显示出来。,BX是一个16位寄存器二进制1010100100111110,用十六进显示时,每4位用一个字符显示,共4个其中0000030H,1010A41H0001131H,1011B42H、1001939H,1111F46H,十六进制A93E,屏幕上的显示A93E,对应的ASCII41H39H33H45H,.,21,算法:取出要显示的某4位,转换为对应的ASCII码,再调用DOS系统功能进行显示。,1)对于00001001(09),先扩展成一个字节,高4位清0,加上30H后,即可得字符09对应的ASCII码。00000001B+30H=31H00001001B+30H=39H0001B11001B9,2)对于10101111(AF),先扩展成一个字节,高4位清0,加上30H后,还要再加上07H,才能得到AF对应的ASCII码00001010B+30H+07H=41H00001111B+30H+07H=46H1010BA1111BF,.,22,codeSEGMENTASSUMECS:codestart:MOVCH,4;字符个数MOVCL,4;循环移位次数next:ROLBX,CL;取显示位的值MOVDL,BL;保存在DL中ANDDL,0FH;清除高4位ADDDL,30H;转变为数字的ASCIICMPDL,39H;大于39H,则应转变JLEprint;为字母AF的ASCIIADDDL,07Hprint:MOVAH,2H;显示DL中的字符INT21HDECCH;显示结束?JNZnextMOVAH,4CH;返回DOSINT21HcodeENDSENDstart,.,23,思考:1.例1采用的是大写字母AF进行显示,若采用小写字符af进行显示,程序如何改写?1010001110011110A39E或a39e,2.编程将CPU内14个16位寄存器当前的内容分别用十六进制形式显示出来。,.,24,编程将CPU内14个16位寄存器当前的内容分别用十六进制形式显示出来。要点:将上例改写为一个子程,入口参数为BX子程中注意寄存器值的保存和恢复注意CS、IP、PSW寄存器值的获取方法,.,25,例将CPU内14个16位寄存器当前内容分别用16进制形式显示出来(采用DEBUG下R命令的显示顺序),.,26,用十六进制显示BX内容子程,.,27,D:LIST_REG;在DOS下执行程序0000000000FF0BDF00000912000000000BDF0BDF0BEF0BEF00003202D:DEBUGLIST_REG.EXE;利用DEBUG检测结果-R;显示当前寄存器内容AX=0000BX=0000CX=007BDX=0000SP=0000BP=0000SI=0000DI=0000DS=128EES=128ESS=129ECS=129EIP=0000NVUPEIPLNZNAPONC129E:000053PUSHBX-G;执行程序00000000007B00000000000000000000128E128E129E129E00007202Programterminatednormally-,运行的结果与用R命令显示的结果相同,程序运行结果正确,.,28,例2将键盘输入的十进制数据串转换成相应大小的十六进制数值存放在BX寄存器中。,问题:要转换成1234即04D2h存放在BX中,怎么实现?,.,29,算法一:数值大小=各位值权值之和1234D=千位1000+百位100+十位10+个位=11000+2100+310+4=0000010011010010B=04D2H,.,30,算法二:数值大小=部分和10+下一位数值1234D=(010+1)10+2)10+3)10+4=0000010011010010B=04D2H部分和从0开始,循环次数等于输入的位数,.,31,.,32,inputPROCLEADX,stringMOVAH,09HINT21HLEADX,numMOVAH,0AHINT21HRETinputENDP,.,33,change子程序流程图,changePROCLEASI,num+2MOVCL,num+1MOVCH,0MOVAX,0MOVDI,10next:MULDIMOVBH,0MOVBL,SIANDBL,0FHADDAX,BXINCSILOOPnextzero:MOVBX,AXRETchangeENDP,1234D=(010+1)10+2)10+3)10+4,.,34,list_bx子程序流程图,list_bxPROCMOVCH,4MOVCL,4next:ROLBX,CLMOVDL,BLANDDL,0FHADDDL,30HCMPDL,39HJLEprintADDDL,07Hprint:MOVAH,2HINT21HDECCHJNZnextRET;子程返回list_bxENDPcodeENDSENDstart,.,35,例2程序存在的问题:1未处理输入非数字字符的情况2输入的十进制数范围为0655353当输入字符个数为0(直接回车)时,结果错误4未处理负数情况5结果的显示未换行Input:1234最后看到的是:0D42t:1234,.,36,编写子程序的注意事项:注意子程中PUSH、POP应成对,否则易造成死机。,dataSEGMENTstringDBHello,$dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,dataMOVDS,AXCALLinputMOVAH,4CHINT21HinputPROCPUSHAXLEADX,stringMOVAH,09HINT21HRETinputENDPcodeENDSENDstart,.,37,例下面程序段,思考是否可以完成AXCX,BXDX,CODESEGMENTASSUMECS:codestart:MOVAX,d

温馨提示

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

评论

0/150

提交评论