第4章3循环子程序上机过程DOS中断调课件

上传人:新** 文档编号:569579359 上传时间:2024-07-30 格式:PPT 页数:21 大小:540KB
返回 下载 相关 举报
第4章3循环子程序上机过程DOS中断调课件_第1页
第1页 / 共21页
第4章3循环子程序上机过程DOS中断调课件_第2页
第2页 / 共21页
第4章3循环子程序上机过程DOS中断调课件_第3页
第3页 / 共21页
第4章3循环子程序上机过程DOS中断调课件_第4页
第4页 / 共21页
第4章3循环子程序上机过程DOS中断调课件_第5页
第5页 / 共21页
点击查看更多>>
资源描述

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

1、4.3 实地址方式下的汇编语言程序设计实地址方式下的汇编语言程序设计 一般将公用性、重复性或有相对独立性的程序应设计成子程序一般将公用性、重复性或有相对独立性的程序应设计成子程序子程序设计子程序设计 结构结构: :程序部分程序部分RETNAME ENDP必须必须RET结束结束NAME PROCNEAR(FAR)过程名过程名过程类型过程类型PUSHAXPUSHBX主程序现场保护主程序现场保护POPBXPOPAX4.3 实地址方式下的汇编语言程序设计实地址方式下的汇编语言程序设计子程序设计子程序设计 调用与返回调用与返回: 调用调用:CALL 过程名(子程序地址)过程名(子程序地址)功能:功能:(

2、1)下条指令的地址压入堆栈。下条指令的地址压入堆栈。主子同段(段内调用):主子同段(段内调用):只将只将IP的值压入堆栈的值压入堆栈段间调用:段间调用:先将先将CS的值压入堆栈,再将的值压入堆栈,再将IP的值压入堆栈。的值压入堆栈。 (2)转入子程序运行转入子程序运行 子程序的地址送入子程序的地址送入CS:IP4.3 实地址方式下的汇编语言程序设计实地址方式下的汇编语言程序设计子程序设计子程序设计 调用与返回调用与返回: 返回指令返回指令RET 子子程程序序的的最最后后一一条条指指令令,用用于于返返回回CALL指指令令的的下下条条指指令继续执行。无论对那一种调用方式其返回指令都相同。令继续执行

3、。无论对那一种调用方式其返回指令都相同。 功能:功能:(1) 段内调用只将当前段内调用只将当前SP弹进弹进IP,从而使程序正常返回。从而使程序正常返回。(2)对于段间调用则先弹对于段间调用则先弹IP,再弹再弹CS。 4.3 实地址方式下的汇编语言程序设计实地址方式下的汇编语言程序设计子程序设计子程序设计 子程序的设计与应用应注意的问题子程序的设计与应用应注意的问题 (1)(1)现场的保护现场的保护 PUSHAXPUSHBXPUSH SIPOPSIPOPBXPOPAXRET4.3 实地址方式下的汇编语言程序设计实地址方式下的汇编语言程序设计子程序设计子程序设计 子程序的设计与应用应注意的问题子程

4、序的设计与应用应注意的问题 (2)参数的传递参数的传递v主程序调用子程序必须传递入口参数,主程序调用子程序必须传递入口参数,v子程序返回必须传递出口参数。子程序返回必须传递出口参数。常用的方法有:常用的方法有:v寄存器:寄存器:适用于参数少的情况。适用于参数少的情况。v约定单元:约定单元:适用于参数多的情况。要事先建立参数数据缓冲区。适用于参数多的情况。要事先建立参数数据缓冲区。v堆栈:堆栈:适用于参数较多,且子程序嵌套,递归调用的情况适用于参数较多,且子程序嵌套,递归调用的情况 ;子程序的入口参数:;子程序的入口参数:;SI=数据区的首地址,数据区的首地址,CX=数据个数数据个数;出口参数:

5、;出口参数:AL为最大的数为最大的数;用到的寄存器:;用到的寄存器:AX,CX,SI4.3 实地址方式下的汇编语言程序设计实地址方式下的汇编语言程序设计2组组8位无符号数,每组中有位无符号数,每组中有N个无符号个无符号数,分别找出每一组中的最大数,并将最数,分别找出每一组中的最大数,并将最大数存放在每组数的开绐地址。大数存放在每组数的开绐地址。 CODESEGMENTASSUME CS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,BUF1 ;入口参数入口参数INCSI ;指向数据开始指向数据开始MOVCX,N1 ;入口参数入口参数CALLSUBROTMO

6、VBUF1,ALLEASI,BUF2INCSI ;指向数据开始指向数据开始MOVCX,N2CALLSUBROTMOVBUF2,ALMOVAH,04CHINT21HSUBROT PROCPUSHCX;子程序开始子程序开始PUSHSIDECCX;MOVAL,SI ;LOOP1:INCSI;CMPAL,SIJANEXTMOVAL,SINEXT:LOOPLOOPLOOP1POPSIPOPCXRETSUBROT ENDPDATASEGMENTBUF1DB ?,12H,45HN1=$-BUF1N1=$-BUF1BUF2DB ?,65H,ACHN2=$-BUF2N2=$-BUF2DATAENDSCODEEN

7、DSENDSTART4.4 汇编程序及上机过程汇编程序及上机过程汇编汇编程序要建立的文件:程序要建立的文件:EDIT.EXE MASM.EXELIKE.EXEDEBUG.COMEDIT是编辑程序是编辑程序,MASM为汇编程序,为汇编程序,LINK为连接程序,为连接程序,EXE2BIN为转换成为转换成COM文件所需要的程序文件所需要的程序4.4 汇编程序及上机过程汇编程序及上机过程1、建立建立ASM文件文件用记事本或用记事本或EDIT编辑源程序文件,文件的扩展名一编辑源程序文件,文件的扩展名一般应为般应为.ASM。 如如X.ASM2、用、用MASM对源文件进行汇编,对源文件进行汇编,C:amas

8、m xMicrosoft (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): error A2042: Constant expected0 Warning Errors (警告错误警告错误 ) 1 Severe Errors (严重错误严重错误 )提示有错误,修改源程序后重新汇编,直至通过并提

9、示有错误,修改源程序后重新汇编,直至通过并产生产生 .OBJ文件为止。文件为止。4.4 汇编程序及上机过程汇编程序及上机过程3、用、用LINK将将.OBJ文件连接成可执行的文件连接成可执行的.EXE文件。文件。 4、程序的执行、程序的执行状态下运行状态下运行X.EXE文件。文件。5、若不能达到预期结果。用、若不能达到预期结果。用DEBUG检查程序。检查程序。 找找到逻辑错误,再用文字编辑工具修改、汇编、连接,到逻辑错误,再用文字编辑工具修改、汇编、连接,直到达到预期目的。直到达到预期目的。4.5 DOS及及BIOS功能调用功能调用DOSDOS系统功能调用和系统功能调用和BIOSBIOS中断调用

10、中断调用 BIOS:最最底底层层, 硬硬件件系系统统管管理理,中中断断类型号类型号81FH。 BIOSDOS应用程序应用程序软件结构:软件结构:DOS:BIOS之之上上的的系系统统管管理理,硬硬件件和和软软件件更更完完整整管管理理,特特别别是是磁磁盘盘文文件件的的管管理理。中中断类型号断类型号20H2FH 。DOS和和BIOS由几十个独立的中断服务程序组成,为汇编由几十个独立的中断服务程序组成,为汇编语言程序设计提供了方便,可以完成语言程序设计提供了方便,可以完成I/O设备管理,内存管理,设备管理,内存管理,文件管理等功能,在汇编语言中可用软中断指令调用它们。文件管理等功能,在汇编语言中可用软

11、中断指令调用它们。 4.5 DOS及及BIOS功能调用功能调用DOSDOS系统功能调用和系统功能调用和BIOSBIOS中断调用中断调用 (1)MOVMOV REGREG,XXXX;传送入口参数到指定寄存器中传送入口参数到指定寄存器中;(部分;(部分无无入口参数)入口参数) (2)MOVMOV AHAH,功能号功能号;功能号送入;功能号送入AH寄存器中寄存器中(3)INT 21H;调用调用DOSDOS调用方法:调用方法:(4)返回信息)返回信息: :CF=1表示有错误发生表示有错误发生, , AX=返回错误代码返回错误代码CF=表示调用成功表示调用成功, ,AX返回参数返回参数4.5 DOS及及

12、BIOS功能调用功能调用1、键盘单字符输入(键盘单字符输入(1号)号)MOVAH,1INT21H功能:等待从键盘输入一个字符。功能:等待从键盘输入一个字符。返回:(返回:(AL)=ASCII码,并回显在显示器上。码,并回显在显示器上。常用常用DOS功能调用功能调用 :2、键盘输入字符串(、键盘输入字符串(0AH号)号)MOVDX,OFFSET BUF;DS:DX为键盘缓冲区为键盘缓冲区MOVAH,0AHINT21H功能:等待从键盘输入一串字符,回车结束。字符串存入键盘缓冲区。功能:等待从键盘输入一串字符,回车结束。字符串存入键盘缓冲区。键盘缓冲区定义:键盘缓冲区定义:BUFDB 81;缓冲区的

13、大小缓冲区的大小DB ?;实际输入的字符个数不含实际输入的字符个数不含0DHDB 80 DUP (?)(?) ;字符串存放区字符串存放区 DEBUG演示演示4.5 DOS及及BIOS功能调用功能调用3、输出单字符(、输出单字符(2号)号)MOVDL,AMOVAH,02INT21H功能:将功能:将DL中字符从屏幕上输出。中字符从屏幕上输出。返回:无返回返回:无返回 DEBUG演示演示常用常用DOS功能调用功能调用 :4、输出字符串(、输出字符串(09号)号)MOVDX,OFFSET BUFMOVAH,09INT21H功功能能:BUF中中以以$为为结结束束标标志志的的字字符符串串显显示示在在屏屏幕

14、幕上上。当当无无结结束束标标志志时时会出现乱码。会出现乱码。DATASEGMENTASCSDB 808X86 CPU $DATAENDS DEBUG演示演示4.5 DOS及及BIOS功能调用功能调用5、控制台输入、控制台输入/输出单字符(输出单字符(06)MOVAH,06MOVDL,0FFH;当为当为0FFH时从键盘读一字符到时从键盘读一字符到ALINT21H;否则将否则将DL中的字符送显示器中的字符送显示器这一功能调用给输入输出有更方便应用。这一功能调用给输入输出有更方便应用。 常用常用DOS功能调用功能调用 :6、无回显控制台输入单字符(、无回显控制台输入单字符(08)MOVAH,08IN

15、T21H功能:键盘读入一个字符不在显示器上显示,常用于口令的和控制键的输入。功能:键盘读入一个字符不在显示器上显示,常用于口令的和控制键的输入。7、1、返回操作系统(、返回操作系统(4CH)MOVAH,4CHINT21H;将控制权交给操作系统。将控制权交给操作系统。 4.5 DOS及及BIOS功能调用功能调用常用常用BIOS功能调用功能调用 :(1 1)MOVMOV AH,AH,功能号功能号;功能号送入;功能号送入AH寄存器中寄存器中(2 2)INT XH;中断中断调用调用屏幕显示模式中断调用屏幕显示模式中断调用INT 10HINT 10H例如:例如:功能:读取当前显示模式号功能:读取当前显示

16、模式号MOV AX,0FH INT 10H;中断调用中断调用功能:设置屏幕显示模式功能:设置屏幕显示模式MOVMOVAXAX,0006H0006H;功能号送功能号送AHAH,ALAL中为模式号中为模式号INT 10H;中断中断调用调用P222P222有关部分自阅。有关部分自阅。4.5 DOS及及BIOS功能调用功能调用DATASEGMENTKEYBUF DB 12,?,?,11 DUP(?)(?)DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEADX,KEYBUFMOVAH,0AHINT21H;输入一串字符输

17、入一串字符LEASI,KEYBUF;字串结束地址字串结束地址MOVAL,SI+1MOVAH,0ADDSI,AXMOVSI,$;9号功能标志号功能标志LEADX,KEYBUF+2MOVAH,09INT21H;输出一串字符输出一串字符EXIT:MOVAH,4CH;返回返回DOSINT21HCODEENDSENDSTART;程序汇编结束程序汇编结束例例1,从键盘输入字符串,从键盘输入字符串“PENTIUM CPU”并显显在屏上。并显显在屏上。4.5 DOS及及BIOS功能调用功能调用程序设计举例程序设计举例例例2:将:将16位二进制数转换成用位二进制数转换成用ASCII码表示的码表示的5位十进位十进

18、制数。制数。CX-1=0?终 止起 始AL=ASCII码AX=DX:AX /SIDX=余数DX:AX=被除数YNADD SI,2 INC DIDI=AL显示结果初如化DI=ASDECSI=PWTABCX=5算法算法1: 用除法指令完成,被除数送用除法指令完成,被除数送DX:AX与与PWTAB的的数数10000、1000、100、10 、1相除,利用循环程序相除,利用循环程序分别可得到对应位的十进制数的分别可得到对应位的十进制数的ASCII码。调用码。调用DOS的的9号功能显示这个十进制数。流程图如图所示。号功能显示这个十进制数。流程图如图所示。DATA SEGMENT BIN DW 358CH

19、 ASDEC DB 5 DUP(?) ,$PWTAB DW 10000, 1000, 100, 10, 1DATA ENDS显示调用专用显示调用专用DATA SEGMENT BIN DW 358CH ASDEC DB 5 DUP(?) ,$PWTAB DW 10000, 1000, 100, 10, 1DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS: DATASTART: MOV AX, DATA MOV DS, AX MOV DI, OFFSET ASDEC MOV SI, OFFSET PWTAB MOV CX,5MOV DX, BINLOP1: MOV

20、 AX,DXMOV DX,0DIV WORD PTR SIADD AL,30HMOV DI, AL INC SI INC SI INC DILOOP LOP1MOV AH,09LEA DX,ASDECINT 21H MOV AH, 4CH INT 21HCODE ENDS END STARTCX-1=0?终 止起 始AL=ASCII码AX=DX:AX /SIDX=余数DX:AX=被除数YNADD SI,2 INC DIDI=AL显示结果初如化DI=ASDECSI=PWTABCX=5汇编连接EXE13 例例3:编制完成两个:编制完成两个4字节的字节的BCD码码(8位十进制数位十进制数)的加法运算

21、的加法运算程序。程序。 算法:将算法:将4字节的字节的BCD码分为码分为4个单字节数相加,从低字节开个单字节数相加,从低字节开始,进行始,进行4次次 循环操作,注意循环操作,注意BCD修正。修正。 程序:程序:CODE SEGMENT ASSUME CS: CODE, DS: DATAMULADD:MOV AX, DATAMOV DS, AX LEA SI, BCD1 LEA BX, BCD2 LEA DI, SUM MOV CL, 4 CLCAGAIN: MOV AL, SI ADC AL, BX DAA MOV DI, AL INC SI INC BX INC DI DEC CL JNZ

22、AGAIN MOV AH, 4CH INT 21HCODE ENDS END MULADD DATA SEGMENTBCD1 DB 76H,54H,38H,29HBCD2 DB 49H,37H,65H,17HSUM DB 4 DUP(?)DATA ENDS 29 38 54 7617 65 37 49 47 03 92 25例例 BUF中有中有N个有符号数,分离其中的正负数,分别送入个有符号数,分离其中的正负数,分别送入BUF1和和BUF2中。中。 这是一个循环次数已知的程序设计,用计数循环完成。这是一个循环次数已知的程序设计,用计数循环完成。DATASEGMENTBUFDB 12H, 34H

23、, -56H, -58H, 96H, 68H, 56H N=$-BUFBUF1DB N DUP(0)BUF2DB N DUP(?) DATAENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV DX,DATAMOVDS,DXLEASI,BUFLEADI,BUF1LEABX,BUF2MOVCX,NAA:MOVAL,SIINCSICMPAL,0JGEBBMOVBX,AL(1)若)若DW定义定义BUF怎样修改?怎样修改?(2)能改为条件控制循环吗?)能改为条件控制循环吗?汇编连接演示汇编连接演示X42INCBXJMPCCBB: MOVDI,ALINCDICC:LOOP AAMOVAH,4CHINT21HCODEENDSENDSTART课后作业:课后作业:1.P229 12

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

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