微机课件循环子程序上机过程、DOS中断调.ppt_第1页
微机课件循环子程序上机过程、DOS中断调.ppt_第2页
微机课件循环子程序上机过程、DOS中断调.ppt_第3页
微机课件循环子程序上机过程、DOS中断调.ppt_第4页
微机课件循环子程序上机过程、DOS中断调.ppt_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、4.3 实地址方式下的汇编语言程序设计,一般将公用性、重复性或有相对独立性的程序应设计成子程序,子程序设计,结构:,4.3 实地址方式下的汇编语言程序设计,子程序设计,调用与返回:,调用: CALL过程名(子程序地址) 功能: (1)下条指令的地址压入堆栈。 主子同段(段内调用): 只将IP的值压入堆栈 段间调用: 先将CS的值压入堆栈,再将IP的值压入堆栈。 (2)转入子程序运行,4.3 实地址方式下的汇编语言程序设计,子程序设计,调用与返回:,返回指令RET 子程序的最后一条指令,用于返回CALL指令的下条指令继续执行。无论对那一种调用方式其返回指令都相同。,功能: (1) 段内调用只将当

2、前SP弹进IP,从而使程序正常返回。 (2)对于段间调用则先弹IP,再弹CS。,4.3 实地址方式下的汇编语言程序设计,子程序设计,子程序的设计与应用应注意的问题,(1)现场的保护 PUSHAX PUSHBX PUSH SI POPSI POPBX POPAX RET,4.3 实地址方式下的汇编语言程序设计,子程序设计,子程序的设计与应用应注意的问题,(2)参数的传递 主程序调用子程序必须传递入口参数, 子程序返回必须传递出口参数。 常用的方法有: 寄存器: 适用于参数少的情况。 约定单元: 适用于参数多的情况。要事先建立参数数据缓冲区。 堆栈: 适用于参数较多,且子程序嵌套,递归调用的情况,

3、4.3 实地址方式下的汇编语言程序设计,2组8位无符号数,每组中有N个无符号数,分别找出每一组中的最大数,并将最大数存放在每组数的开绐地址。,CODESEGMENT ASSUME CS:CODE,DS:DATA START:MOVAX,DATA MOVDS,AX LEASI,BUF1 ;入口参数 INCSI ;指向数据开始 MOVCX,N1 ;入口参数 CALLSUBROT MOVBUF1,AL LEASI,BUF2 INCSI ;指向数据开始 MOVCX,N2 CALLSUBROT MOVBUF2,AL MOVAH,04CH INT21H,SUBROT PROC PUSHCX;子程序开始 P

4、USHSI DECCX; MOVAL,SI; LOOP1:INCSI; CMPAL,SI JANEXT MOVAL,SI NEXT:LOOPLOOP1 POPSI POPCX RET SUBROTENDP,DATASEGMENT BUF1DB ?,12H,45H N1=$-BUF1 BUF2DB ?,65H,ACH N2=$-BUF2 DATAENDS,CODEENDS ENDSTART,4.4 汇编程序及上机过程,汇编程序要建立的文件: EDIT.EXE MASM.EXE LIKE.EXE DEBUG.COM EDIT是编辑程序, MASM为汇编程序, LINK为连接程序, EXE2BIN为

5、转换成COM文件所需要的程序,4.4 汇编程序及上机过程,1、建立ASM文件 用记事本或EDIT编辑源程序文件,文件的扩展名一般应为.ASM。 如X.ASM 2、用MASM对源文件进行汇编, C:amasm x Microsoft (R) Macro Assembler Version 5.00 Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved. Object filename x.OBJ: Source listing NUL.LST: Cross-reference NUL.CRF: x.ASM(9): er

6、ror A2042: Constant expected 0 Warning Errors (警告错误 ) 1 Severe Errors (严重错误 ) 提示有错误,修改源程序后重新汇编,直至通过并产生 .OBJ文件为止。,4.4 汇编程序及上机过程,3、用LINK将.OBJ文件连接成可执行的.EXE文件。 4、程序的执行 状态下运行X.EXE文件。 5、若不能达到预期结果。用DEBUG检查程序。 找到逻辑错误,再用文字编辑工具修改、汇编、连接,直到达到预期目的。,4.5 DOS及BIOS功能调用,DOS系统功能调用和BIOS中断调用,BIOS:最底层, 硬件系统管理,中断类型号81FH。,

7、软件结构:,DOS:BIOS之上的系统管理,硬件和软件更完整管理,特别是磁盘文件的管理。中断类型号20H2FH 。,DOS和BIOS由几十个独立的中断服务程序组成,为汇编语言程序设计提供了方便,可以完成I/O设备管理,内存管理,文件管理等功能,在汇编语言中可用软中断指令调用它们。,4.5 DOS及BIOS功能调用,DOS系统功能调用和BIOS中断调用,(1)MOVREG,XX;传送入口参数到指定寄存器中 ;(部分无入口参数) (2)MOVAH,功能号;功能号送入AH寄存器中 (3)INT 21H;调用,DOS调用方法:,4.5 DOS及BIOS功能调用,1、键盘单字符输入(1号) MOVAH,

8、1 INT21H 功能:等待从键盘输入一个字符。 返回:(AL)=ASCII码,并回显在显示器上。,常用DOS功能调用 :,2、键盘输入字符串(0AH号) MOVDX,OFFSET BUF;DS:DX为键盘缓冲区 MOVAH,0AH INT21H 功能:等待从键盘输入一串字符,回车结束。字符串存入键盘缓冲区。 键盘缓冲区定义: BUFDB81;缓冲区的大小 DB?;实际输入的字符个数不含0DH DB80 DUP (?);字符串存放区,4.5 DOS及BIOS功能调用,3、输出单字符(2号) MOVDL,A MOVAH,02 INT21H 功能:将DL中字符从屏幕上输出。 返回:无返回,常用DO

9、S功能调用 :,4、输出字符串(09号) MOVDX,OFFSET BUF MOVAH,09 INT21H 功能:BUF中以$为结束标志的字符串显示在屏幕上。当无结束标志时会出现乱码。 DATASEGMENT ASCSDB808X86 CPU $ DATAENDS,4.5 DOS及BIOS功能调用,5、控制台输入/输出单字符(06) MOVAH,06 MOVDL,0FFH;当为0FFH时从键盘读一字符到AL INT21H;否则将DL中的字符送显示器 这一功能调用给输入输出有更方便应用。,常用DOS功能调用 :,6、无回显控制台输入单字符(08) MOVAH,08 INT21H 功能:键盘读入一

10、个字符不在显示器上显示,常用于口令的和控制键的输入。,7、1、返回操作系统(4CH) MOVAH,4CH INT21H;将控制权交给操作系统。,4.5 DOS及BIOS功能调用,常用BIOS功能调用 :,(1)MOVAH,功能号;功能号送入AH寄存器中 (2)INT XH;中断调用,屏幕显示模式中断调用INT 10H 例如: 功能:读取当前显示模式号 MOV AX,0FH INT 10H;中断调用 功能:设置屏幕显示模式 MOVAX,0006H;功能号送AH,AL中为模式号 INT 10H;中断调用 P222有关部分自阅。,4.5 DOS及BIOS功能调用,DATASEGMENT KEYBUF

11、 DB 12,?,11 DUP(?) DATAENDS CODESEGMENT ASSUME CS:CODE,DS:DATA START:MOVAX,DATA MOVDS,AX LEADX,KEYBUF MOVAH,0AH INT21H;输入一串字符 LEASI,KEYBUF;字串结束地址 MOVAL,SI+1 MOVAH,0 ADDSI,AX MOVSI,$;9号功能标志 LEADX,KEYBUF+2 MOVAH,09 INT21H;输出一串字符 EXIT:MOVAH,4CH;返回DOS INT21H CODEENDS ENDSTART;程序汇编结束,例1,从键盘输入字符串“PENTIUM

12、CPU”并显显在屏上。,4.5 DOS及BIOS功能调用,程序设计举例,例2:将16位二进制数转换成用ASCII码表示的5位十进制数。,算法1: 用除法指令完成,被除数送DX:AX与PWTAB的数10000、1000、100、10 、1相除,利用循环程序分别可得到对应位的十进制数的ASCII码。调用DOS的9号功能显示这个十进制数。流程图如图所示。,DATA SEGMENT BIN DW 358CH ASDEC DB 5 DUP(?) ,$ PWTAB DW 10000, 1000, 100, 10, 1 DATA ENDS,DATA SEGMENT BIN DW 358CH ASDEC DB

13、 5 DUP(?) ,$ PWTAB DW 10000, 1000, 100, 10, 1 DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV DI, OFFSET ASDEC MOV SI, OFFSET PWTAB,MOV CX,5 MOV DX, BIN LOP1: MOV AX,DX MOV DX,0 DIV WORD PTR SI ADD AL,30H MOV DI, AL INC SI INC SI INC DI LOOP LOP1 MOV AH,09 LEA DX,

14、ASDEC INT 21H,MOV AH, 4CH INT 21H CODE ENDS END START,例3:编制完成两个4字节的BCD码(8位十进制数)的加法运算程序。 算法:将4字节的BCD码分为4个单字节数相加,从低字节开始,进行4次 循环操作,注意BCD修正。 程序:,CODE SEGMENT ASSUME CS: CODE, DS: DATA MULADD:MOV AX, DATA MOV DS, AX LEA SI, BCD1 LEA BX, BCD2 LEA DI, SUM MOV CL, 4 CLC AGAIN: MOV AL, SI ADC AL, BX DAA,MOV DI, AL INC SI INC BX INC DI DEC CL JNZ AGAIN MOV AH, 4CH INT 21H CODE ENDS END MULADD,例 BUF中有N个有符号数,分离其中的正负数,分别送入BUF1和BUF2中。 这是一个循环次数已知的程序设计,用计数循环完成。 DATASEGMENT BUFDB 12H, 34H, -56H, -58H, 96H, 68H, 56H,N=$-BUF BUF1DB N DUP(0) BUF2DB N DUP(?) DATAENDS CODESEGMENT

温馨提示

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

评论

0/150

提交评论