第六章子程序程序设计_第1页
第六章子程序程序设计_第2页
第六章子程序程序设计_第3页
第六章子程序程序设计_第4页
第六章子程序程序设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

第6章子程序程序设计一、过程定义、过程调用过程名PROC[类型]…RET…过程名ENDP1.定义2.调用CALL过程名NEAR子程序书写形式CODESEGMENTASSUME……

MAINPROCFAR……

CALLSUB1

……

RET

SUB1PROCNEAR……

CALLSUB2……

RET

SUB2PROCNEAR……

RET

SUB2ENDP

SUB1ENDP

MAINENDPCODEENDS

调用图示…………CALLSUB1………………CALLSUB2……RET………………RET主程序子程序SUB1子程序SUB2FAR子程序书写形式CODE1SEGMENTASSUME……

MAINPROCFAR……

CALLSUB……

RET

MAINENDPCODE1ENDSCODE2SEGMENTASSUME……

SUBPROCFAR……

RET

SUBENDPCODE2ENDSCALL指令---段内调用直接寻址间接寻址CALLproc-nameCALLdisp16①IP←IP+偏移量

②IP入栈;例:CALLSUB1寻址方式格式操作注:段内调用,CS不变

CALLr16/m16①IP入栈;②IP←(r16)/(m16)例:CALLBXCALLWORDPTR[BX]CALL指令---段间调用直接寻址间接寻址CALLFARproc-name①CS入栈;②IP入栈;③CS←过程的段地址;④IP←过程的偏移地址。

例:CALLfarSUB1寻址方式格式操作注:DWORDPTR表明内存操作数属性为双字,用于段间调用

CALLfarmem32①CS入栈;②IP入栈;③IP←(EA+1,EA)④CS←(EA+3,EA+2)

例:CALLfar[BX]远过程名RET指令段内:RETRETexpIP出栈①IP出栈②SP←SP+exp

段间:RETRETexp①IP出栈②CS出栈

①IP出栈②CS出栈③SP←SP+exp

返回类型格式操作注:返回类型由调用类型定二、子程序参数传递方法一:寄存器方法二:内存方法三:堆栈参数:入口参数出口参数在子程序中被处理的数据表示子程序处理结果的数据软延时:指利用CPU执行指令需要耗费一定时间的特点实施的延时,常用减1循环来实现。例:8088CPU,主频4.77M,每个时钟周期为:1/4.77M=0.21μs。循环指令LOOP,当CX不为零时,执行循环转移分支,占用17个时钟周期;当CX为零时,退出循环,占用5个时钟周期。如果CX初值是2801时,执行指令WAIT1:LOOPWAIT1,所需时间为:(0.21×2801)×17+0.21×5≈10ms

10ms延时子程序;子程序:DELAY;功能:实现软件延时,延时单位时间为10ms;入口参数:BX,延时常数,实际延时时间为:10*BX(ms);出口参数:无DELAYPROCNEARPUSHBX;现场保护

PUSHCXWAIT0:MOVCX,2801;内循环次数,大小由单位时间定WAIT1:LOOPWAIT1;延时10msDECBXJNZWAIT0POPCXPOPBXRETDELAYENDP

子程序说明子程序调用,实现100ms、550延时CSEGSEGMENTASSUMECS:CSEG,……MAINPROCFARPUSHDSSUBAX,AXPUSHAX……MOVBX,10;延时100ms,参数赋值

CALLDELAY;调用延时子程序

MOVBX,55;延时550ms,参数赋值

CALLDELAY;调用延时子程序

……

RET

MAINENDP

三、

系统功能调用

PC-DOS系统中设置两层内部子程序供用户使用,即DOS功能模块和基本输入输出子程序BIOS。

1.DOS功能调用(DOS中断调用)

DOS共提供了近80个功能调用,大致分为:设备管理、文件管理和目录管理等几类。一般,调用系统功能时总是先采用DOS层功能模块,如果这层模块内容达不到要求,再进一步调用BIOS层的子程序。DOS功能调用通过INT21H指令来实现。(而不是用CALL)如何用DOS功能调用实现通过显示器输出一个字符;通过键盘输入一个字符;通过显示器输出一个字符串;通过键盘输入一个字符串;BIOS中断调用与DOS中断调用概述BIOS(BasicInput/OutputSystem)是IBM-PC机的监控程序,它固化在微型机主板的ROM中,其内容主要有系统测试程序(Post)、初始化引导程序(Boot)、I/O设备的基本驱动程序和许多常用程序模块,它们一般以中断服务程序的形式存在。例如,负责显示输出的显示I/O程序为10H号中断服务程序;负责打印输出的打印I/O程序为17H中断服务程序等。下图是用户程序和操作系统关系示意图,由图可见BIOS程序直接建立在硬件基础上,磁盘操作系统(diskoperatingsystemDOS)建立在BIOS基础上,各种高级语言则建立在操作系统基础上。用户程序可以使用高级语言,也可以调用DOS或其他操作系统,还可以调用BIOS,甚至直接指挥硬件设备。通常应用程序调用DOS提供的系统功能,完成输入/输出或其他操作,这样做用户可以少考虑硬件,实现起来容易。图8.5用户程序和操作系统关系示意图子程序参数传递方法:方法一:寄存器方法二:内存方法三:堆栈参数:入口参数出口参数在子程序中被处理的数据表示子程序处理结果的数据DOS功能调用方法(1)根据需要的功能调用设置入口参数。(2)把功能调用号送AH寄存器。(共80个功能)(3)发软中断指令“INT

21H”。(4)获取得出口参数。(可根据有关功能调用的说明)功能号功能说明入口参数出口参数01H从键盘上读入一字符,回显,并检查Ctrl+Break无AL=输入字符的ASCII码07H从键盘上读入一字符,不回显,不检查Ctrl+Break无AL=输入字符的ASCII码0AH输入一个字符串(DS:DX)=缓冲区首地址缓冲区中输入字符串及实际输入的字符人数。02H显示一个字符DL=要显示字符的ASCII码无09H显示一个字符串(DS:DX)=字符串的首地址,字符串以字符$为结束标志。无DOS功能调用INT21H基本功能(见附录):(举例)2.BIOS功能调用方法

BIOS常驻ROM,独立于DOS,可与任何操作系统一起工作。它的主要功能是驱动系统所配置的外部设备,如磁盘驱动器、显示器、打印机及异步通讯接口等。通过INT10H~INT1AH向用户提供服务程序的入口,使用户无需对硬件有深入了解,就可完成对I/O设备的控制与操作。BIOS的中断调用与DOS功能调用类似。

功能出口参数AH=0从键盘读一个字符(whichkeyispressed)AL=字符的ASCII码AH=字符的扫描码AH=1判断键盘是否有键可读(checkingakeypress)ZF=1表示无键可读ZF=0表示有键可读

AL=字符的ASCII码AH=字符的扫描码BIOS功能调用INT16H基本功能:DSEGSEGMENTbuff1db?db?db10dup(0)DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXMOVDX,OFFSETBUFF1again:MOVAH,1INT16H

jzagain

movdl,al

movdh,ah

movah,2

int21h

movdl,dh

movah,2

int21hMOVAH,4CHINT21hCSEGENDSENDstart

功能入口参数出口参数AH=0设置显示模式AL=显示模式代号

AH=2置光标位置BH=显示页号DH=行号DL=列

温馨提示

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

评论

0/150

提交评论