收藏 分享(赏)

10讲:宏汇编、C语言调用汇编.ppt

上传人:hyngb9260 文档编号:7268528 上传时间:2019-05-11 格式:PPT 页数:22 大小:85KB
下载 相关 举报
10讲:宏汇编、C语言调用汇编.ppt_第1页
第1页 / 共22页
10讲:宏汇编、C语言调用汇编.ppt_第2页
第2页 / 共22页
10讲:宏汇编、C语言调用汇编.ppt_第3页
第3页 / 共22页
10讲:宏汇编、C语言调用汇编.ppt_第4页
第4页 / 共22页
10讲:宏汇编、C语言调用汇编.ppt_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、1,第十讲 宏汇编,3-7 宏汇编与条件汇编 一、宏定义、宏调用和宏扩展 宏定义:将一段反复使用的汇编指令定义为宏(MACRO)。 例:SHIFT MACRO ;宏定义起始宏名 MOV CL, 4SAL AL, CLENDM ;宏定义结束,宏体,2,宏调用:用宏名(也称宏指令)。 宏扩展:汇编时,将宏指令替换成宏体。 例:源程序 汇编时 SHIFT MOV CL, 4 SAL AL, CLSHIFT MOV CA, 4SAL AL, CL 注:与子程序一样,可以简化源程序书写,但有区别.,3,源程序:主程序 子程序 SHIFT PROC CALL SHIFT MOV CL, 4 SAL AL,

2、 CLCALL SHIFT RET 宏定义与子程序的区别:1.子程序在运行时起作用;而宏定义在汇编时起作用.2.相同程序,子程序省目标码,而宏定义执行速度快.,4,宏定义可以带参数:,例: SHIFT1 MACRO X,YMOV CL, XSAL Y,CLENDM 调用时: SHIFT1 2, BX;BX算术左移2位. 例: SHIFT2 MACRO X,Y,ZMOV CL, XSSI逻辑右移2位,5,消除宏定义:PURGE 宏名 ,、LOCAL伪指令 汇编时定义变量、标号,并保证唯一。 格式:LOCAL 参量1,参量2 , 例: CHANGE MACRO;16进制变ASCLLLOCAL P1

3、CMP AL,10JL P1ADD AL, A- 0-10 P1: ADD AL, 0ENDM,6,若两次调用CHANGE,则宏展开为:,CMP AL,10JL ?0000ADD AL, A-0-10 ?0000: ADD AL 0CMP AL,10JL ?0001ADD AL, A-0-10 ?0001: ADD AL 0 避免标号重复.,7,三、重复伪指令,1.REPT 格式:REPT 表达式(重复次数) ;指令体ENDM 例: X=0REPT 10X=X+1DB XENDM 把110分配给10个连续M单元.,8,2.IRP,格式: IRP 形参 ;指令体ENDM 例: IRP X DB

4、XENDM 将110分配给10个连续M单元.,9,3.IRPC,格式: IRPC 形参, 字符串 ;指令体ENDM 重复次数为字符串个数. 例: IRPC X, 0123456789DB X+1ENDM 将110分配给10个连续M单元.,10,四、条件汇编,有条件地将源程序进行汇编。 格式: IF XX ;条件ELSE;ENDIF 条件伪指令见表3-4,11,3-8 外部引用与全局说明,模块化设计需求. 一、EXTRN和PUBLIC伪指令 定义模块间的过程调用和变量引用的相关属性 格式:EXTRN 名字:类型 , 功能:指示在本模块中使用该名字,但这名字的定义是在要连接的其他模块中定义的. 注

5、:1.名字指过程名,变量(和符号常量).2.一般放在程序模块最前面.3.用EXTRN说明的名字要在另一个模块中用PUBLIC定义.,12,PUBLIC 名字 , 功能:定义可以被其它模块引用的全局名字. 二、外部过程的调用 主模块:EXTRN SUB-PROC:FARCODE SEGMENTMAIN-PROC PROC FARCALL SUB-PROCRET MAIN-PROC ENDP,13,CODE ENDSEND MAIN-PROC 子模快:CODE SEGMENTPUBLIC SUB-PROCSUB-PROC PROC FARRETSUB-PROC ENDPCODE ENDSEND,1

6、4,三、外部数据变量的引用,主模块中供子模快引用的变量用PUBLIC 说明;而引用该变量的子模块要用EXTRN 说明它引用的变量名和类型。 例3-15 多字节加法并显示,自阅。,15,3-9 高级语言调用汇编语言子程序,混合语言编程:高级语言实现功能;汇编语言实现速度。 参数传递:传值,传址两种一、C语言调用汇编语言子程序(一)调用规则1.在C中用“EXTRN”对调用函数说明.2.函数名不超过8个字符,并在前加下划线.3.参数入栈按反序,即第一个参数最后入栈.,16,4.值传递时,参数类型不同,入栈字节数不同,见表3-5,图3-16.5.汇编程序中,要有对代码段说明部分,一般用“_TEXT”说

7、明,过程名用下划线,且为PUBLIC.若C程序为小模式,汇编用 近(NEAR)过程;大模式,用远(FAR)过程.6.汇编程序取C的参数时,要跨过栈区的BP(2字节)值及返回地址(FAR:4字节,NEAR:2字节).7.C程序允许用SI和DI放局部变量,因此汇编程序中应入栈保护.,17,8.数据返回C程序时,类型不同,使用的寄存器不同,见表3-6. 例: CHAR 型: ALLONG 型: DX,AX(二) 举例 例3-16 气泡排序用汇编;数组元素在C程序中输入,基本程序结构如下:,18,;exm3-16.c #include “stdio.h” extren void sort(int*,i

8、nt); Main() int aa50;sort(aa,n) ,19,;exm3-16c.asm _text segment word codeassume cs:_textpunlic _sort _sort proc farpush bpmov bp,sppush sipush di,20,pop dipop sipop bp _sort endp _text ends (三) 汇编与连接1.对汇编源程序进行汇编.MASM exm#3-16c.asm exm3-16c.obj,21,2.建立exm3-16c.prj工程文件,包括:exm3-16exm3-16c.obj3.TURBO C下,用Compile/Build all选项生成 exm3-16.exe(注意其它选项).4.在DOS下执行.,22,本章小结,标准汇编源程序结构及程序设计。 PSP及返回DOS方法。 常用伪指令(段定义、常量、变量、标号等) 伪指令与指令、宏定义与子程序的区别。 常用DOS功能调用。*作业6:P124:题3-2,,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > C/C++资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报