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

上传人:风*** 文档编号:242758251 上传时间:2024-09-02 格式:PPT 页数:21 大小:199.39KB
返回 下载 相关 举报
第4章-3-循环-子程序上机过程、DOS中断调课件_第1页
第1页 / 共21页
第4章-3-循环-子程序上机过程、DOS中断调课件_第2页
第2页 / 共21页
第4章-3-循环-子程序上机过程、DOS中断调课件_第3页
第3页 / 共21页
点击查看更多>>
资源描述
4.3,实地址方式下的汇编语言程序设计,一般将公用性、重复性或有相对独立性的程序应设计成子程序,子程序设计,结构:,程序部分,RET,NAMEENDP,必须RET结束,NAMEPROCNEAR(FAR),过程名,过程类型,PUSHAX,PUSHBX,主程序现场保护,POPBX,POPAX,4.3 实地址方式下的汇编语言程序设计 一般将公,4.3,实地址方式下的汇编语言程序设计,子程序设计,调用与返回:,调用:,CALL,过程名(子程序地址),功能:,(1)下条指令的地址压入堆栈。,主子同段(段内调用):,只将,IP,的值压入堆栈,段间调用:,先将,CS,的值压入堆栈,再将,IP,的值压入堆栈。,(2)转入子程序运行,子程序的地址送入,CS:IP,4.3 实地址方式下的汇编语言程序设计子程序设计 调用与返回,4.3,实地址方式下的汇编语言程序设计,子程序设计,调用与返回:,返回指令,RET,子程序的最后一条指令,用于返回,CALL,指令的下条指令继续执行。无论对那一种调用方式其返回指令都相同。,功能:,(1) 段内调用只将当前,SP,弹进,IP,,从而使程序正常返回。,(2)对于段间调用则先弹,IP,,再弹,CS。,4.3 实地址方式下的汇编语言程序设计子程序设计 调用与返回,4.3,实地址方式下的汇编语言程序设计,子程序设计,子程序的设计与应用应注意的问题,(1)现场的保护,PUSHAX,PUSHBX,PUSH SI,POPSI,POPBX,POPAX,RET,4.3 实地址方式下的汇编语言程序设计子程序设计 子程序的,4.3,实地址方式下的汇编语言程序设计,子程序设计,子程序的设计与应用应注意的问题,(2)参数的传递,主程序调用子程序必须传递入口参数,,子程序返回必须传递出口参数。,常用的方法有:,寄存器:,适用于参数少的情况。,约定单元:,适用于参数多的情况。要事先建立参数数据缓冲区。,堆栈:,适用于参数较多,且子程序嵌套,递归调用的情况,4.3 实地址方式下的汇编语言程序设计子程序设计 子程序的,;子程序的入口参数:,;SI=,数据区的首地址,,CX=,数据个数,;出口参数:,AL,为最大的数,;用到的寄存器:,AX,,,CX,,,SI,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,;,子程序开始,PUSHSI,DECCX,;,MOVAL,,,SI,;,LOOP1,:,INCSI,;,CMPAL,,,SI,JANEXT,MOVAL,,,SI,NEXT,:LOOP,LOOP1,POPSI,POPCX,RET,SUBROTENDP,DATASEGMENT,BUF1DB ?,,,12H,,,45H,N1=$-BUF1,BUF2DB ?,,,65H,,,ACH,N2=$-BUF2,DATAENDS,CODEENDS,ENDSTART,;子程序的入口参数:4.3 实地址方式下的汇编语言程序设计2,4.4,汇编程序及上机过程,汇编,程序要建立的文件:,EDIT.EXE,MASM.EXE,LIKE.EXE,DEBUG.COM,EDIT是编辑程序,,,MASM为汇编程序,,LINK为连接程序,,EXE2BIN为转换成COM文件所需要的程序,4.4 汇编程序及上机过程汇编程序要建立的文件:,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): error A2042: Constant expected,0 Warning Errors (,警告错误,),1 Severe Errors (,严重错误,),提示有错误,修改源程序后重新汇编,直至通过并产生,.OBJ,文件为止。,4.4 汇编程序及上机过程1、建立ASM文件,4.4,汇编程序及上机过程,3,、用,LINK,将,.OBJ,文件连接成可执行的,.EXE,文件。,4,、程序的执行,状态下运行,X.EXE,文件。,5,、若不能达到预期结果。用,DEBUG,检查程序。 找到逻辑错误,再用文字编辑工具修改、汇编、连接,直到达到预期目的。,4.4 汇编程序及上机过程3、用LINK将.OBJ文件连接成,4.5 DOS,及,BIOS,功能调用,DOS,系统功能调用和,BIOS,中断调用,BIOS:,最底层, 硬件系统管理,中断类型号,81,FH,。,BIOS,DOS,应用程序,软件结构:,DOS:BIOS,之上的系统管理,硬件和软件更完整管理,特别是磁盘文件的管理。中断类型号,20,H2FH,。,DOS,和,BIOS,由几十个独立的中断服务程序组成,为汇编语言程序设计提供了方便,可以完成,I/O,设备管理,内存管理,文件管理等功能,在汇编语言中可用软中断指令调用它们。,4.5 DOS及BIOS功能调用DOS系统功能调用和BIOS,4.5 DOS,及,BIOS,功能调用,DOS,系统功能调用和,BIOS,中断调用,(,1,),MOVREG,XX;,传送入口参数到指定寄存器中,;(部分,无入口参数),(,2,),MOVAH,,功能号;功能号送入,AH,寄存器中,(,3,),INT 21H;,调用,DOS,调用方法:,(,4,)返回信息:,CF=1,表示有错误发生,AX=,返回错误代码,CF=,表示调用成功,AX,返回参数,4.5 DOS及BIOS功能调用DOS系统功能调用和BIOS,4.5 DOS,及,BIOS,功能调用,1、,键盘单字符输入(1号),MOVAH,1,INT21H,功能:等待从键盘输入一个字符。,返回:(,AL)=ASCII,码,并回显在显示器上。,常用,DOS,功能调用 :,2、键盘输入字符串(0,AH,号),MOVDX,OFFSET BUF;DS:DX,为键盘缓冲区,MOVAH,0AH,INT21H,功能:等待从键盘输入一串字符,回车结束。字符串存入键盘缓冲区。,键盘缓冲区定义:,BUFDB81;,缓冲区的大小,DB?;,实际输入的字符个数不含0,DH,DB80 DUP (?);,字符串存放区,DEBUG,演示,4.5 DOS及BIOS功能调用1、键盘单字符输入(1号),4.5 DOS,及,BIOS,功能调用,3、输出单字符(2号),MOVDL,A,MOVAH,02,INT21H,功能:将,DL,中字符从屏幕上输出。,返回:无返回,DEBUG,演示,常用,DOS,功能调用 :,4、输出字符串(09号),MOVDX,OFFSET BUF,MOVAH,09,INT21H,功能:,BUF,中以,$,为结束标志的字符串显示在屏幕上。当无结束标志时会出现乱码。,DATASEGMENT,ASCSDB808X86 CPU $,DATAENDS,DEBUG,演示,4.5 DOS及BIOS功能调用3、输出单字符(2号)常用,4.5 DOS,及,BIOS,功能调用,5、控制台输入/输出单字符(06),MOVAH,06,MOVDL,0FFH;,当为0,FFH,时从键盘读一字符到,AL,INT21H;,否则将,DL,中的字符送显示器,这一功能调用给输入输出有更方便应用。,常用,DOS,功能调用 :,6、无回显控制台输入单字符(08),MOVAH,08,INT21H,功能:键盘读入一个字符不在显示器上显示,常用于口令的和控制键的输入。,7、1、返回操作系统(4,CH),MOVAH,4CH,INT21H;,将控制权交给操作系统。,4.5 DOS及BIOS功能调用5、控制台输入/输出单字符,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功能调用常用BIOS功能调用 :(1,4.5 DOS,及,BIOS,功能调用,DATASEGMENT,KEYBUF 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 CPU”,并显显在屏上。,4.5 DOS及BIOS功能调用DATASEGMENT例1,4.5 DOS,及,BIOS,功能调用,程序设计举例,例,2,:将16位二进制数转换成用,ASCII,码表示的5位十进制数。,CX-1=0?,终 止,起 始,AL=ASCII,码,AX=DX:AX /SI,DX=,余数,DX:AX=,被除数,Y,N,ADD SI,2 INC DI,DI=AL,显示结果,初如化,DI=ASDEC,SI=PWTAB,CX=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,显示调用专用,4.5 DOS及BIOS功能调用程序设计举例例2:将16位二,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, 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,ASDEC,INT 21H,MOV AH, 4CH,INT 21H,CODE ENDS,END START,CX-1=0?,终 止,起 始,AL=ASCII,码,AX=DX:AX /SI,DX=,余数,DX:AX=,被除数,Y,N,ADD SI,2 INC DI,DI=AL,显示结果,初如化,DI=ASDEC,SI=PWTAB,CX=5,汇编连接,EXE13,DATA SEGMENTMOV CX,5MOV A,例,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,DATA SEGMENT,BCD1 DB 76H,54H,38H,29H,BCD2 DB 49H,37H,65H,17H,SUM DB 4 DUP(?),DATA ENDS,29 38 54 76,17 65 37 49,47 03 92 25,例3:编制完成两个4字节的BCD码(8位十进制数)的加法运,例,BUF,中有,N,个有符号数,分离其中的正负数,分别送入,BUF1,和,BUF2,中。,这是一个循环次数已知的程序设计,用计数循环完成。,DATASEGMENT,BUFDB 12H, 34H, -56H, -58H, 96H, 68H, 56H,N=$-BUF,BUF1DB N DUP(0),BUF2DB N DUP(?),DATAENDS,CODESEGMENT,ASSUME CS:CODE,DS:DATA,START:MOVDX,DATA,MOVDS,DX,LEASI,BUF,LEADI,BUF1,LEABX,BUF2,MOVCX,N,AA:MOVAL,SI,INCSI,CMPAL,0,JGEBB,MOVBX,AL,(1)若,DW,定义,BUF,怎样修改?,(2)能改为条件控制循环吗?,汇编连接演示,X42,INCBX,JMPCC,BB:MOVDI,AL,INCDI,CC:LOOPAA,MOVAH,4CH,INT21H,CODEENDS,ENDSTART,例 BUF中有N个有符号数,分离其中的正负数,分别送入B,课后作业:,P229 12,课后作业:,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!