10讲:宏汇编、C语言调用汇编.ppt_第1页
10讲:宏汇编、C语言调用汇编.ppt_第2页
10讲:宏汇编、C语言调用汇编.ppt_第3页
10讲:宏汇编、C语言调用汇编.ppt_第4页
10讲:宏汇编、C语言调用汇编.ppt_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

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

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

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

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

5、用该名字,但这名字的定义是在要连接的其他模块中定义的. 注:1.名字指过程名,变量(和符号常量). 2.一般放在程序模块最前面. 3.用EXTRN说明的名字要在另一个模块中 用PUBLIC定义.,12,PUBLIC 名字 , 功能:定义可以被其它模块引用的全局名字. 二、外部过程的调用 主模块: EXTRNSUB-PROC:FAR CODESEGMENT MAIN-PROCPROCFAR CALL SUB-PROC RET MAIN-PROCENDP,13,CODEENDS END MAIN-PROC 子模快: CODE SEGMENT PUBLIC SUB-PROC SUB-PROC PRO

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

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

8、;exm3-16.c #include “stdio.h” extren void sort(int*,int); Main() int aa50; sort(aa,n) ,19,;exm3-16c.asm _text segmentword code assumecs:_text punlic_sort _sort proc far push bp movbp,sp push si push di ,20,pop di pop si pop bp _sort endp _text ends (三) 汇编与连接 1.对汇编源程序进行汇编. MASM exm#3-16c.asm exm3-16c.obj,21,2.建立exm3-16c.prj工程文件,包括: exm3-16 exm3-16c.obj 3.TURBO C下,用Compile/Build all选项生成 exm3-

温馨提示

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

评论

0/150

提交评论