微机原理34.ppt

微机原理34.ppt

ID:49473752

大小:69.00 KB

页数:18页

时间:2020-02-05

微机原理34.ppt_第1页
微机原理34.ppt_第2页
微机原理34.ppt_第3页
微机原理34.ppt_第4页
微机原理34.ppt_第5页
资源描述:

《微机原理34.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、本次课内容与要求理解和掌握汇编语言递归程序的设计方法和技巧了解汇编语言与高级语言的程序接口的基本内容一、递归程序设计子程序嵌套◆在子程序中又调用另外的子程序称为子程序嵌套。◆子程序嵌套层数受堆栈空间限制,只要堆栈空间允许,嵌套层数一般不限。子程序嵌套,堆栈结构可以对各级调用程序的现场有序地进行保护和恢复。子程序递归递归调用——一个子程序自己调用自己。直接递归调用在子程序中直接调用子程序自己。间接递归调用在子程序中调用的其它子程序内再调用自己。递归调用非常适合求阶乘这样的递归类运算。过程可递归的条件必须要有递归结束条件;后一次调用不

2、能破坏上一次调用的参数和产生的中间结果。(使用堆栈保存)堆栈中的数据帧帧:将一次调用时所要保存的信息作为一个“帧”。一“帧”信息包括入口参数、出口参数、返回地址、有关寄存器的内容和局部变量。每次调用时将帧信息压入堆栈,每次返回时则从堆栈中弹出一帧信息。PUSHBPMOVBP,SPPUSHSIPUSHAXMOVAX,[BP+4]MOVSI,[BP+6]ORAX,AXJEONEPUSHSIDECAXPUSHAXCALLFACTORMOVSI,[BP+6]MOVAX,[SI]MULWORDPTR[BP+4]JMPSHORTGO_BACK

3、ONE:MOVAX,1GO_BACK:MOV[SI],AXPOPAXPOPSIPOPBPRET4AXSIBPIPN=0ANSWER的指针AXSIBPIPN=1ANSWER的指针AXSIBPIPN=2ANSWER的指针第3帧第2帧第1帧BP1BP2BP3递归过程调用时堆栈的变化(N=2)递归过程说明容易出错,除非有保证或要求高效率;在程序执行效率和工作完成效率二者中进行权衡选择。二、汇编语言与高级语言的程序接口汇编语言可以和高级语言(如TurboC/C++、BorlandC/C++、PASCAL、BASIC等)混合编程。1、进行混合

4、编程的必要性高级语言的优点:面向问题,面向对象,功能强大方法灵活、易修改和维护低级语言的优点:擅长解决硬件的接口和驱动运行速度快,代码效率高C语言既具有优良的高级语言特性、又具有某些低级语言的特征(如寄存器变量、位操作等),因此C语言程序和汇编语言程序能平滑衔接,它们混合编程有嵌入式和多模块混合式两种实现方法。下面以TurboC为例说明。2、汇编语句嵌入式编程TurboC语言程序中,嵌入的汇编语句前面必须加“ASM”关键字:ASM<操作码>[操作数][;]/[回车换行符]操作码是CPU指令和某些伪指令,操作数是操作码可以接受的数据

5、,如立即数、寄存器名、存储器数,还可以是C语言程序中的常量、变量或标号。内嵌的汇编语句可以用分号“;”或回车换行符结束;一行中可以有多个汇编语句,相互间用分号“;”隔开,但不能跨行书写。对汇编语句的注释,应使用C语言的注释符,如/*……*/等。汇编语句在C程序的函数内部是条可执行语句,被编译在程序的代码段;在函数外部是一个外部说明,被编译在程序的数据段,这些数据可被其它函数引用。不同版本的C,对嵌入的汇编指令语句有不同的限制。TurboC2.0的限制是:支持8086指令集。内嵌80286指令,编译时必须在TCC命令行选择-1,否则

6、编译程序不能识别;仅支持有限的汇编语言伪指令,如变量定义伪指令DB、DW、DD和外部数据说明伪指令EXTERN等;嵌入的汇编语言可以使用条件/无条件转移指令和循环指令,但只能在一个函数内部转移,转移的目标必须是C语言的标号,ASM语句不能定义标号;嵌入的一组汇编语句,可用大括号“{”和“}”把它们括起来,在左大括号“{”前加关键字ASM即可;在TurboC语言中可直接使用通用寄存器和段寄存器,但寄存器名字要大写,前面要加一个下划线“_”。内嵌汇编语句的TurboC2.0程序,只能采用命令行方式执行TCC.EXE来完成编译,并在命令

7、中使用带“-B”选项的编译连接(若C源程序中使用预处理语句“Progmain-line”就可以不用选项“-B”)。运行TCC.EXE,C编译器完成代码转换—编译—连接:①代码转换:将扩展名为.C的源程序代码转换成扩展名为.ASM的汇编语言代码源程序;②编译:用默认的TASM.EXE将转换后的.ASM汇编语言源程序编译成.OBJ的目标文件;若在编译命令行中加入“-EMASM”选项,则选用MASM.EXE来汇编;③连接:用TLINK把目标文件连接成.EXE的可执行文件。例:用C中嵌入汇编语句方式编程,将字符串中的首个字母转为大写,其它

8、字母转为小写,并显示出来。#INCLUDE“STDIO.H”VOIDULOWER(CHAR*DVAR,CHAR*SVAR){ASM{MOVSI,SVAR/*SVAR原串的地址指针*/MOVDI,DVAR/*DVAR新串的地址指针*/CLDLODSB

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。