微机原理第04章4子程序ppt课件_第1页
微机原理第04章4子程序ppt课件_第2页
微机原理第04章4子程序ppt课件_第3页
微机原理第04章4子程序ppt课件_第4页
微机原理第04章4子程序ppt课件_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、计算机接口技术计算机接口技术(汇编与接口)(汇编与接口)第四章第四章 汇编语言程序设计汇编语言程序设计4主要内容:主要内容:u汇编语言源程序的结构汇编语言源程序的结构u汇编语言语句格式汇编语言语句格式u伪指令伪指令u功能调用功能调用u汇编语言程序设计汇编语言程序设计第第4 4章:章:4.6 4.6 子程序设计子程序设计 u把功能相对独立的程序段单独编写和调把功能相对独立的程序段单独编写和调试,作为一个相对独立的模块供程序使试,作为一个相对独立的模块供程序使用,就形成子程序用,就形成子程序u子程序可以实现源程序的模块化,可简子程序可以实现源程序的模块化,可简化源程序结构,可以提高编程效率化源程序

2、结构,可以提高编程效率u主程序调用程序需要利用主程序调用程序需要利用CALL指令指令调用子程序被调用程序)调用子程序被调用程序)u子程序需要利用子程序需要利用RET指令返回主程序指令返回主程序第第4 4章:章:4.6.1 4.6.1 过程定义和过程定义和子程序编写子程序编写u汇编语言中,子程序要用一对过程伪指令汇编语言中,子程序要用一对过程伪指令PROC和和ENDP声明,格式如下:声明,格式如下:u过程名过程名PROC NEAR|FARu;过程体;过程体u过程名过程名ENDPu可选的参数指定过程的调用属性。没有指定过可选的参数指定过程的调用属性。没有指定过程属性,则采用默认属性程属性,则采用默

3、认属性uNEAR属性段内近调用的过程只能被相同属性段内近调用的过程只能被相同代码段的其他程序调用代码段的其他程序调用uFAR属性段间远调用的过程可以被相同或属性段间远调用的过程可以被相同或不同代码段的程序调用不同代码段的程序调用第第4 4章:子程序编写注意事项章:子程序编写注意事项子程序要利用过程定义伪指令声明子程序要利用过程定义伪指令声明子程序最后利用子程序最后利用RET指令返回主程序,主程序指令返回主程序,主程序执行执行CALL指令调用子程序指令调用子程序子程序中对堆栈的压入和弹出操作要成对使用,子程序中对堆栈的压入和弹出操作要成对使用,保持堆栈的平衡保持堆栈的平衡子程序开始应该保护使用到

4、的寄存器内容,子子程序开始应该保护使用到的寄存器内容,子程序返回前相应进行恢复程序返回前相应进行恢复子程序应安排在代码段的主程序之外,最好放子程序应安排在代码段的主程序之外,最好放在主程序执行终止后的位置返回在主程序执行终止后的位置返回DOS后、汇后、汇编结束编结束END伪指令前),也可以放在主程序开伪指令前),也可以放在主程序开始执行之前的位置始执行之前的位置第第4 4章:例章:例4.15 4.15 用用dosdos功能调功能调用输出一个字符的子程序用输出一个字符的子程序;主程序;主程序mov dl,?;主程序提供显示字符;主程序提供显示字符call dpchar;调用子程序;调用子程序;子

5、程序:显示;子程序:显示AL中的字符中的字符dpchar proc;过程定义,过程名为;过程定义,过程名为dpcharpush ax;顺序入栈,保护寄存器;顺序入栈,保护寄存器push bxmov ah,02h ;输出一个字符功能;输出一个字符功能int 21hpop bx;逆序出栈,恢复寄存器;逆序出栈,恢复寄存器pop axret;子程序返回;子程序返回dpchar endp;过程结束;过程结束第第4 4章:例章:例4.154.15源程序源程序Sse segment stackDb 30 dup(?)Sse endsCode segmentAssume cs:code,ss:ssestar

6、t: mov ax,23hmov dl,? ;主程序提供显示字符;主程序提供显示字符call dpchar;调用子程序;调用子程序mov ax,4c00hint 21h主程序部分主程序部分本程序不需要数据段本程序不需要数据段第第4 4章:例章:例4.154.15源程序续)源程序续)dpchar proc;过程定义,过程名为;过程定义,过程名为dpcharpush ax;顺序入栈,保护寄存器;顺序入栈,保护寄存器mov ah,02h;输出一个字符功能;输出一个字符功能int 21hpop ax ;逆序出栈,恢复寄存器;逆序出栈,恢复寄存器ret;子程序返回;子程序返回dpchar endp;过程

7、结束;过程结束end start子程序安排在主程序执行终止后的位置子程序安排在主程序执行终止后的位置入口参数:寄存器入口参数:寄存器DL,传数值,传数值出口参数:无出口参数:无第第4 4章:子程序编写注意事项续)章:子程序编写注意事项续)子程序允许嵌套和递归子程序允许嵌套和递归子程序可以与主程序共用一个数据段,也可以子程序可以与主程序共用一个数据段,也可以使用不同的数据段注意修改使用不同的数据段注意修改DS),还可以在),还可以在子程序最后设置数据区利用子程序最后设置数据区利用CS寻址)寻址)子程序的编写可以很灵活,例如具有多个出口子程序的编写可以很灵活,例如具有多个出口多个多个RET指令和入

8、口,但一定要保证堆栈指令和入口,但一定要保证堆栈操作的正确性操作的正确性处理好子程序与主程序间的参数传递问题处理好子程序与主程序间的参数传递问题提供必要的子程序说明信息子程序名,入口提供必要的子程序说明信息子程序名,入口参数,出口参数,功能,程序)参数,出口参数,功能,程序)第第4 4章:例章:例4.16 4.16 显示以显示以“0 0结尾字符串的嵌套子程序结尾字符串的嵌套子程序;数据段;数据段msgdb Well, I made it !,0;代码段主程序);代码段主程序)mov si,offset msg;主程序提供显示字符串;主程序提供显示字符串call dpstri;调用子程序;调用子

9、程序第第4 4章:例章:例4.16 4.16 子程序子程序;子程序;子程序dpstri:显示:显示DS:SI指向的字符串以指向的字符串以0结尾)结尾) dpstri procpush axdps1:mov dl,si;取显示字符;取显示字符inc sicmp dl,0;是结尾,则显示结束;是结尾,则显示结束jz dps2call dpchar;调用字符显示子程序;调用字符显示子程序jmp dps1dps2:pop axretdpstri endp;子程序;子程序dpchar:入口参数:寄存器入口参数:寄存器DS:SI,传地址,传地址出口参数:无出口参数:无第第4 4章:含数据区的子程序章:含数

10、据区的子程序;子程序;子程序HTOASC:十六进制数转换为:十六进制数转换为ASCII码码 HTOASCprocpush bxmov bx,offset ASCIIand al,0fhxlat CS:ASCII;换码:;换码:ALCS:BXALpop bxret;数据区;数据区ASCIIdb 30h,31h,32h,33h,34h,35h,36h,37h,38h,39hdb 41h,42h,43h,44h,45h,46hHTOASCendp入口参数:寄存器入口参数:寄存器AL,传数值,传数值出口参数:寄存器出口参数:寄存器AL,传数值,传数值第第4 4章:多出口子程序章:多出口子程序;子程序;

11、子程序HTOASC:十六进制数转换为:十六进制数转换为ASCII码码 HTOASCprocand al,0fhcmp al,9jbe htoasc1add al,37h;是;是A F,加,加37Hret;子程序返回;子程序返回htoasc1:add al,30h;是;是0 9,加,加30Hret;子程序返回;子程序返回HTOASCendp第第4 4章:参数传递章:参数传递u主程序与子程序间一个主要问题是参数传递主程序与子程序间一个主要问题是参数传递u入口参数输入参数)入口参数输入参数) :主程序调用子程序:主程序调用子程序时,提供给子程序的参数时,提供给子程序的参数u出口参数输出参数)出口参数

12、输出参数) :子程序执行结束返:子程序执行结束返回给主程序的参数回给主程序的参数u参数的具体内容参数的具体内容u传数值:传送数据本身传数值:传送数据本身u传地址:传送数据的主存地址传地址:传送数据的主存地址u常用的参数传递方法常用的参数传递方法u寄存器寄存器u共享变量共享变量(存储单元存储单元)u堆栈堆栈第第4 4章:章:4.6.2 4.6.2 用寄存器传递参数用寄存器传递参数u最简单和常用的参数传递方法是通过寄存器,最简单和常用的参数传递方法是通过寄存器,只要把参数存于约定的寄存器中就可以了只要把参数存于约定的寄存器中就可以了u由于通用寄存器个数有限,这种方法对少量数由于通用寄存器个数有限,

13、这种方法对少量数据可以直接传递数值,而对大量数据只能传递据可以直接传递数值,而对大量数据只能传递地址地址u采用寄存器传递参数,注意带有出口参数的寄采用寄存器传递参数,注意带有出口参数的寄存器不能保护和恢复,带有入口参数的寄存器存器不能保护和恢复,带有入口参数的寄存器可以保护、也可以不保护,但最好能够保持一可以保护、也可以不保护,但最好能够保持一致致dpchardpstriHTOASC第第4 4章:章:4.6.3 4.6.3 用共享变量传递参数用共享变量传递参数u子程序和主程序使用同一个变量名子程序和主程序使用同一个变量名存取数据就是利用共享变量进行参存取数据就是利用共享变量进行参数传递数传递u

14、如果主程序还要利用原来的变量值,如果主程序还要利用原来的变量值,则需要保护和恢复则需要保护和恢复u利用共享变量传递参数,子程序的利用共享变量传递参数,子程序的通用性较差,但特别适合在多个程通用性较差,但特别适合在多个程序段间、尤其在不同的程序模块间序段间、尤其在不同的程序模块间传递数据传递数据第第4 4章:章:4.6.4 4.6.4 用堆栈传递参数用堆栈传递参数u参数传递还可以通过堆栈这个临时存储参数传递还可以通过堆栈这个临时存储区。主程序将入口参数压入堆栈,子程区。主程序将入口参数压入堆栈,子程序从堆栈中取出参数;子程序将出口参序从堆栈中取出参数;子程序将出口参数压入堆栈,主程序弹出堆栈取得

15、它们数压入堆栈,主程序弹出堆栈取得它们u采用堆栈传递参数是程式化的,它是编采用堆栈传递参数是程式化的,它是编译程序处理参数传递、以及汇编语言与译程序处理参数传递、以及汇编语言与高级语言混合编程时的常规方法高级语言混合编程时的常规方法第第4 4章:章:4.7 4.7 宏宏MacroMacro汇编汇编u宏是具有宏名的一段汇编语句序列宏是具有宏名的一段汇编语句序列u宏需要先定义,然后在程序中进行宏调用宏需要先定义,然后在程序中进行宏调用u由于形式上类似其他指令,所以常称其为宏指由于形式上类似其他指令,所以常称其为宏指令令u宏指令实际上是一段代码序列的缩写;在汇编宏指令实际上是一段代码序列的缩写;在汇

16、编时,汇编程序用对应的代码序列替代宏指令时,汇编程序用对应的代码序列替代宏指令u因为是在汇编过程中实现的宏展开,所以常称因为是在汇编过程中实现的宏展开,所以常称为宏汇编为宏汇编第第4 4章:章:1. 1. 宏定义宏定义 u宏定义由一对宏汇编伪指令宏定义由一对宏汇编伪指令MACRO和和ENDM来完成,格式如下:来完成,格式如下:u宏名宏名MACRO 形参表形参表u ;宏定义体;宏定义体uENDMu其中宏名是符合语法的标识符,同一源程序中其中宏名是符合语法的标识符,同一源程序中该名字定义唯一。宏定义体中不仅可以是硬指该名字定义唯一。宏定义体中不仅可以是硬指令序列,还可以是伪指令语句序列令序列,还可

17、以是伪指令语句序列u可选的形参表给出了宏定义中用到的形式参数,可选的形参表给出了宏定义中用到的形式参数,每个形式参数之间用逗号分隔每个形式参数之间用逗号分隔第第4 4章:章:2. 2. 宏调用宏调用u宏定义之后就可以使用它,即宏调用:宏定义之后就可以使用它,即宏调用:u宏名宏名 实参表实参表u宏调用的格式同一般指令一样:在使用宏指令宏调用的格式同一般指令一样:在使用宏指令的位置写下宏名,后跟实体参数;如果有多个的位置写下宏名,后跟实体参数;如果有多个参数,应按形参顺序填入实参,也用逗号分隔参数,应按形参顺序填入实参,也用逗号分隔u在汇编时,宏指令被汇编程序用对应的代码序在汇编时,宏指令被汇编程

18、序用对应的代码序列替代,这就是宏展开列替代,这就是宏展开u宏展开的具体过程是:当汇编程序扫描源程序宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义遇到已有定义的宏调用时,即用相应的宏定义体完全替代源程序的宏指令,同时用位置匹配体完全替代源程序的宏指令,同时用位置匹配的实参对形参进行取代的实参对形参进行取代第第4 4章:宏的实例章:宏的实例1 1dispchar macro char;宏定义宏定义mov ah,2;宏定义体宏定义体mov dl,charint 21hendmdispchar ?;宏调用宏指令)宏调用宏指令) 1mov ah,2;宏展开宏展开 1mo

19、v dl,? 1int 21h第第4 4章:宏的实例章:宏的实例2 2dispmsg macro message ;宏定义宏定义mov ah,9;宏定义体宏定义体lea dx,messageint 21hendmdispmsg string ;宏调用宏指令)宏调用宏指令) 1mov ah,9;宏展开宏展开 1lea dx,string 1int 21h第第4 4章:宏与子程序的比较章:宏与子程序的比较比比较较u仅是源程序级的简化:宏调用在汇编时进行程序语句的展开,不需要返回;不减小目标程序,执行速度没有改变u通过形参、实参结合实现参数传递,简捷直观、灵活多变u还是目标程序级的简还是目标程序级的

20、简化:子程序调用在执化:子程序调用在执行时由行时由CALLCALL指令转向、指令转向、RETRET指令返回;形成的指令返回;形成的目标代码较短,执行目标代码较短,执行速度减慢速度减慢u需要利用寄存器、存需要利用寄存器、存储单元或堆栈等传递储单元或堆栈等传递参数参数宏宏子程序子程序第第4 4章:宏与子程序的比较章:宏与子程序的比较结论结论u宏与子程序具有各自的特点,程序员应该根据具体问题选择使用那种方法u通常,当程序段较短或要求较快执行时,应选用宏;当程序段较长或为减小目标代码时,要选用子程序比比较较结结论论宏宏子程序子程序第第4 4章:教学要求章:教学要求u掌握常量表达、变量定义及应用、变量掌握常量表达、变量定义及应用、变量和标号的属性及操作符和标号的属性及操作符u掌握

温馨提示

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

评论

0/150

提交评论