循环子程序上机过程dos中断调

上传人:F****n 文档编号:88048061 上传时间:2019-04-17 格式:PPT 页数:21 大小:540KB
返回 下载 相关 举报
循环子程序上机过程dos中断调_第1页
第1页 / 共21页
循环子程序上机过程dos中断调_第2页
第2页 / 共21页
循环子程序上机过程dos中断调_第3页
第3页 / 共21页
循环子程序上机过程dos中断调_第4页
第4页 / 共21页
循环子程序上机过程dos中断调_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《循环子程序上机过程dos中断调》由会员分享,可在线阅读,更多相关《循环子程序上机过程dos中断调(21页珍藏版)》请在金锄头文库上搜索。

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)现场的保护 PUSH AX PUSH BX PUSH SI POP SI POP BX POP AX RET,4.3 实地址方式下的汇编语言程序设计,子程序设计,子程序的设计与应用应注意的问题,(2)参数的传递 主程序调用子程序必须传递入口参数, 子程序返回必须传递出口参数。 常用的方法有: 寄存器: 适用于参数少的情况。 约定单元: 适用于参数多的情况。要事先建立参数数据缓冲区。 堆栈: 适用于参数较多,且子程序嵌套,递

3、归调用的情况,4.3 实地址方式下的汇编语言程序设计,2组8位无符号数,每组中有N个无符号数,分别找出每一组中的最大数,并将最大数存放在每组数的开绐地址。,CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA SI,BUF1 ;入口参数 INC SI ;指向数据开始 MOV CX,N1 ;入口参数 CALL SUBROT MOV BUF1,AL LEA SI,BUF2 INC SI ;指向数据开始 MOV CX,N2 CALL SUBROT MOV BUF2,AL MOV AH,04CH INT 21H,SUBR

4、OT PROC PUSH CX ;子程序开始 PUSH SI DEC CX ; MOV AL,SI ; LOOP1:INC SI ; CMP AL,SI JA NEXT MOV AL,SI NEXT:LOOP LOOP1 POP SI POP CX RET SUBROT ENDP,DATA SEGMENT BUF1 DB ?,12H,45H N1=$-BUF1 BUF2 DB ?,65H,ACH N2=$-BUF2 DATA ENDS,CODE ENDS END START,4.4 汇编程序及上机过程,汇编程序要建立的文件: EDIT.EXE MASM.EXE LIKE.EXE DEBUG.C

5、OM EDIT是编辑程序, MASM为汇编程序, LINK为连接程序, EXE2BIN为转换成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 NU

6、L.LST: Cross-reference NUL.CRF: x.ASM(9): error 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

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

8、;调用,DOS调用方法:,4.5 DOS及BIOS功能调用,1、键盘单字符输入(1号) MOV AH,1 INT 21H 功能:等待从键盘输入一个字符。 返回:(AL)=ASCII码,并回显在显示器上。,常用DOS功能调用 :,2、键盘输入字符串(0AH号) MOV DX,OFFSET BUF ;DS:DX为键盘缓冲区 MOV AH,0AH INT 21H 功能:等待从键盘输入一串字符,回车结束。字符串存入键盘缓冲区。 键盘缓冲区定义: BUF DB 81 ;缓冲区的大小 DB ? ;实际输入的字符个数不含0DH DB 80 DUP (?) ;字符串存放区 DEBUG演示,4.5 DOS及BI

9、OS功能调用,3、输出单字符(2号) MOV DL,A MOV AH,02 INT 21H 功能:将DL中字符从屏幕上输出。 返回:无返回 DEBUG演示,常用DOS功能调用 :,4、输出字符串(09号) MOV DX,OFFSET BUF MOV AH,09 INT 21H 功能:BUF中以$为结束标志的字符串显示在屏幕上。当无结束标志时会出现乱码。 DATA SEGMENT ASCS DB 808X86 CPU $ DATA ENDS DEBUG演示,4.5 DOS及BIOS功能调用,5、控制台输入/输出单字符(06) MOV AH,06 MOV DL,0FFH ;当为0FFH时从键盘读一

10、字符到AL INT 21H ;否则将DL中的字符送显示器 这一功能调用给输入输出有更方便应用。,常用DOS功能调用 :,6、无回显控制台输入单字符(08) MOV AH,08 INT 21H 功能:键盘读入一个字符不在显示器上显示,常用于口令的和控制键的输入。,7、1、返回操作系统(4CH) MOV AH,4CH INT 21H ;将控制权交给操作系统。,4.5 DOS及BIOS功能调用,常用BIOS功能调用 :,(1)MOV AH,功能号 ;功能号送入AH寄存器中 (2)INT XH ;中断调用,屏幕显示模式中断调用INT 10H 例如: 功能:读取当前显示模式号 MOV AX,0FH IN

11、T 10H ;中断调用 功能:设置屏幕显示模式 MOV AX,0006H ;功能号送AH,AL中为模式号 INT 10H ;中断调用 P222有关部分自阅。,4.5 DOS及BIOS功能调用,DATA SEGMENT KEYBUF DB 12,?,11 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA DX,KEYBUF MOV AH,0AH INT 21H ;输入一串字符 LEA SI,KEYBUF ;字串结束地址 MOV AL,SI+1 MOV AH,0 ADD SI,A

12、X MOV SI,$ ;9号功能标志 LEA DX,KEYBUF+2 MOV AH,09 INT 21H ;输出一串字符 EXIT:MOV AH,4CH ;返回DOS INT 21H CODE ENDS END START ;程序汇编结束,例1,从键盘输入字符串“PENTIUM CPU”并显显在屏上。,4.5 DOS及BIOS功能调用,程序设计举例,例2:将16位二进制数转换成用ASCII码表示的5位十进制数。,算法1: 用除法指令完成,被除数送DX:AX与PWTAB的数10000、1000、100、10 、1相除,利用循环程序分别可得到对应位的十进制数的ASCII码。调用DOS的9号功能显示

13、这个十进制数。流程图如图所示。,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 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, OFFSE

14、T 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,ASDEC INT 21H,MOV AH, 4CH INT 21H CODE ENDS END START,汇编连接EXE13,例3:编制完成两个4字节的BCD码(8位十进制数)的加法运算程序。 算法:将4字节的BCD码分为4个单字节数相加,从低字节开始,进行4次 循环操作,注意BCD修正。 程序:,CODE SEGM

15、ENT 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中。 这是一个循环次数已知的程序设计,用计数循环完成。

16、DATA SEGMENT BUF DB 12H, 34H, -56H, -58H, 96H, 68H, 56H,N=$-BUF BUF1 DB N DUP(0) BUF2 DB N DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV DX,DATA MOV DS,DX LEA SI,BUF LEA DI,BUF1 LEA BX,BUF2 MOV CX,N AA: MOV AL,SI INC SI CMP AL,0 JGE BB MOV BX,AL,(1)若DW定义BUF怎样修改? (2)能改为条件控制循环吗?,汇编连接演示X42,INC BX JMP CC BB: MOV DI,AL INC DI CC: LOOP AA MOV AH,4CH INT 21H CODE E

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号