第4章_4 循环 子程序上机过程、DOS中断调PPT课件_第1页
第4章_4 循环 子程序上机过程、DOS中断调PPT课件_第2页
第4章_4 循环 子程序上机过程、DOS中断调PPT课件_第3页
第4章_4 循环 子程序上机过程、DOS中断调PPT课件_第4页
第4章_4 循环 子程序上机过程、DOS中断调PPT课件_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

4.3实地址方式下的汇编语言程序设计,一般将公用性、重复性或有相对独立性的程序应设计成子程序,子程序设计,结构:,4.3实地址方式下的汇编语言程序设计,子程序设计,调用与返回:,调用:CALL过程名(子程序地址)功能:(1)下条指令的地址压入堆栈。主子同段(段内调用):只将IP的值压入堆栈段间调用:先将CS的值压入堆栈,再将IP的值压入堆栈。(2)转入子程序运行,4.3实地址方式下的汇编语言程序设计,子程序设计,调用与返回:,返回指令RET子程序的最后一条指令,用于返回CALL指令的下条指令继续执行。无论对那一种调用方式其返回指令都相同。,功能:(1)段内调用只将当前SP弹进IP,从而使程序正常返回。(2)对于段间调用则先弹IP,再弹CS。,4.3实地址方式下的汇编语言程序设计,子程序设计,子程序的设计与应用应注意的问题,(1)现场的保护PUSHAXPUSHBXPUSHSIPOPSIPOPBXPOPAXRET,4.3实地址方式下的汇编语言程序设计,子程序设计,子程序的设计与应用应注意的问题,(2)参数的传递主程序调用子程序必须传递入口参数,子程序返回必须传递出口参数。常用的方法有:寄存器:适用于参数少的情况。约定单元:适用于参数多的情况。要事先建立参数数据缓冲区。堆栈:适用于参数较多,且子程序嵌套,递归调用的情况,4.3实地址方式下的汇编语言程序设计,2组8位无符号数,每组中有N个无符号数,分别找出每一组中的最大数,并将最大数存放在每组数的开绐地址。,CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,BUF1;入口参数INCSI;指向数据开始MOVCX,N1;入口参数CALLSUBROTMOVBUF1,ALLEASI,BUF2INCSI;指向数据开始MOVCX,N2CALLSUBROTMOVBUF2,ALMOVAH,04CHINT21H,SUBROTPROCPUSHCX;子程序开始PUSHSIDECCX;MOVAL,SI;LOOP1:INCSI;CMPAL,SIJANEXTMOVAL,SINEXT:LOOPLOOP1POPSIPOPCXRETSUBROTENDP,DATASEGMENTBUF1DB?,12H,45HN1=$-BUF1BUF2DB?,65H,ACHN2=$-BUF2DATAENDS,CODEENDSENDSTART,4.4汇编程序及上机过程,汇编程序要建立的文件:EDIT.EXEMASM.EXELIKE.EXEDEBUG.COMEDIT是编辑程序,MASM为汇编程序,LINK为连接程序,EXE2BIN为转换成COM文件所需要的程序,4.4汇编程序及上机过程,1、建立ASM文件用记事本或EDIT编辑源程序文件,文件的扩展名一般应为.ASM。如X.ASM2、用MASM对源文件进行汇编,C:amasmxMicrosoft(R)MacroAssemblerVersion5.00Copyright(C)MicrosoftCorp1981-1985,1987.Allrightsreserved.Objectfilenamex.OBJ:SourcelistingNUL.LST:Cross-referenceNUL.CRF:x.ASM(9):errorA2042:Constantexpected0WarningErrors(警告错误)1SevereErrors(严重错误)提示有错误,修改源程序后重新汇编,直至通过并产生.OBJ文件为止。,4.4汇编程序及上机过程,3、用LINK将.OBJ文件连接成可执行的.EXE文件。4、程序的执行状态下运行X.EXE文件。5、若不能达到预期结果。用DEBUG检查程序。找到逻辑错误,再用文字编辑工具修改、汇编、连接,直到达到预期目的。,4.5DOS及BIOS功能调用,DOS系统功能调用和BIOS中断调用,BIOS:最底层,硬件系统管理,中断类型号81FH。,软件结构:,DOS:BIOS之上的系统管理,硬件和软件更完整管理,特别是磁盘文件的管理。中断类型号20H2FH。,DOS和BIOS由几十个独立的中断服务程序组成,为汇编语言程序设计提供了方便,可以完成I/O设备管理,内存管理,文件管理等功能,在汇编语言中可用软中断指令调用它们。,4.5DOS及BIOS功能调用,DOS系统功能调用和BIOS中断调用,(1)MOVREG,XX;传送入口参数到指定寄存器中;(部分无入口参数)(2)MOVAH,功能号;功能号送入AH寄存器中(3)INT21H;调用,DOS调用方法:,4.5DOS及BIOS功能调用,1、键盘单字符输入(1号)MOVAH,1INT21H功能:等待从键盘输入一个字符。返回:(AL)=ASCII码,并回显在显示器上。,常用DOS功能调用:,2、键盘输入字符串(0AH号)MOVDX,OFFSETBUF;DS:DX为键盘缓冲区MOVAH,0AHINT21H功能:等待从键盘输入一串字符,回车结束。字符串存入键盘缓冲区。键盘缓冲区定义:BUFDB81;缓冲区的大小DB?;实际输入的字符个数不含0DHDB80DUP(?);字符串存放区DEBUG演示,4.5DOS及BIOS功能调用,3、输出单字符(2号)MOVDL,AMOVAH,02INT21H功能:将DL中字符从屏幕上输出。返回:无返回DEBUG演示,常用DOS功能调用:,4、输出字符串(09号)MOVDX,OFFSETBUFMOVAH,09INT21H功能:BUF中以$为结束标志的字符串显示在屏幕上。当无结束标志时会出现乱码。DATASEGMENTASCSDB808X86CPU$DATAENDSDEBUG演示,4.5DOS及BIOS功能调用,5、控制台输入/输出单字符(06)MOVAH,06MOVDL,0FFH;当为0FFH时从键盘读一字符到ALINT21H;否则将DL中的字符送显示器这一功能调用给输入输出有更方便应用。,常用DOS功能调用:,6、无回显控制台输入单字符(08)MOVAH,08INT21H功能:键盘读入一个字符不在显示器上显示,常用于口令的和控制键的输入。,7、1、返回操作系统(4CH)MOVAH,4CHINT21H;将控制权交给操作系统。,4.5DOS及BIOS功能调用,常用BIOS功能调用:,(1)MOVAH,功能号;功能号送入AH寄存器中(2)INTXH;中断调用,屏幕显示模式中断调用INT10H例如:功能:读取当前显示模式号MOVAX,0FHINT10H;中断调用功能:设置屏幕显示模式MOVAX,0006H;功能号送AH,AL中为模式号INT10H;中断调用P222有关部分自阅。,4.5DOS及BIOS功能调用,DATASEGMENTKEYBUFDB12,?,11DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,KEYBUFMOVAH,0AHINT21H;输入一串字符LEASI,KEYBUF;字串结束地址MOVAL,SI+1MOVAH,0ADDSI,AXMOVSI,$;9号功能标志LEADX,KEYBUF+2MOVAH,09INT21H;输出一串字符EXIT:MOVAH,4CH;返回DOSINT21HCODEENDSENDSTART;程序汇编结束,例1,从键盘输入字符串“PENTIUMCPU”并显显在屏上。,4.5DOS及BIOS功能调用,程序设计举例,例2,将ASCII码表示的两位十进制数转换成一字节二进制数.算法:37H39H(ASCII码)=79D,37H=00110111B屏蔽高4位00110111BAND00001111B=00000111B或:00110111B-00110000B=00000111B同理:39H转为00001001B所以79D=00000111BX10D+00001001B=01001111B,DATASEGMENTASDECDB37H,39HBINDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX,4.5DOS及BIOS功能调用,程序设计举例,例2:将16位二进制数转换成用ASCII码表示的5位十进制数。,算法1:用除法指令完成,被除数送DX:AX与PWTAB的数10000、1000、100、10、1相除,利用循环程序分别可得到对应位的十进制数的ASCII码。调用DOS的9号功能显示这个十进制数。流程图如图所示。,DATASEGMENTBINDW358CHASDECDB5DUP(?),$PWTABDW10000,1000,100,10,1DATAENDS,DATASEGMENTBINDW358CHASDECDB5DUP(?),$PWTABDW10000,1000,100,10,1DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDI,OFFSETASDECMOVSI,OFFSETPWTAB,MOVCX,5MOVDX,BINLOP1:MOVAX,DXMOVDX,0DIVWORDPTRSIADDAL,30HMOVDI,ALINCSIINCSIINCDILOOPLOP1MOVAH,09LEADX,ASDECINT21H,MOVAH,4CHINT21HCODEENDSENDSTART,汇编连接EXE13,例3:编制完成两个4字节的BCD码(8位十进制数)的加法运算程序。算法:将4字节的BCD码分为4个单字节数相加,从低字节开始,进行4次循环操作,注意BCD修正。程序:,CODESEGMENTASSUMECS:CODE,DS:DATAMULADD:MOVAX,DATAMOVDS,AXLEASI,BCD1LEABX,BCD2LEADI,SUMMOVCL,4CLCAGAIN:MOVAL,SIADCAL,BXDAA,MOVDI,ALINCSIINCBXINCDIDECCLJNZAGAINMOVAH,4CHINT21HCODEENDSENDMULADD,例BUF中有N个有符号数,分离其中的正负数,分别送入BUF1和BUF2中。这是一个循环次数已知的程序设计,用计数循环完成。DATASEGMENTBUFDB12H,34H,-56H,-58H,96H,68H,56H,N=$-BUFBUF1DBNDUP(0)BUF2DBNDUP(?)DATAENDSCODESEGMENTASSUMEC

温馨提示

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

评论

0/150

提交评论