第7章汇编语言与高级语言接口.pptVIP

  • 0
  • 0
  • 约1.87万字
  • 约 82页
  • 2017-05-31 发布于湖北
  • 举报
第7章汇编语言与高级语言接口课件

第7章 汇编语言与高级语言接口 7.1混合编程 7.2 C/C++的嵌入式汇编 7.2.1在C/C++程序中嵌入汇编语句 7.2.2在嵌入式汇编中访问C/C++的数据 7.2.3汇编语言程序段编写C函数 7.2.4汇编程序调用C/C++函数 7.3 用C/C++调用汇编 7.3.1接口 7.3.2调用汇编模块 7.1 混合编程 一般说来高级语言具有丰富的数据结构、种类繁多的运算符、丰富的函数、易读易写、可移植性好等特点,但用高级语言编写的程序,代码较长,占有存储空间大,运行速度慢。 而用汇编语言编写的程序所占内存空间小,执行速度快,有直接控制硬件的能力,但程序繁琐,难读也难编写,且必须熟悉计算机的内部结构及其有关硬件知识。 7.1 混合编程 混合编程即由高级语言来调用或嵌入汇编语言子程序,或用汇编语言调用或嵌入高级语言子程序。 汇编程序常以过程的形式同高级语言(如C/C++、Basic、Pascal、Delphi等)一起使用。 在与高级语言接口时,汇编器使用两种调用协议用于C/C++语言的C/C++调用协议和用于Basic、Pascal和Fortran语言的Pascal语言调用协议。调用协议语言在MODEL语句中或与PROC语句相联系的OPTION指示符中指定。除了用这些语句以外还可以用完全段定义指定。 7.1 混合编程 高级语言和汇编语言连接很容易,因为在高级语言编译后生成的编译程序是一个.OBJ的文件,这与汇编程序输出的目标文件一样都是机器语言程序。那么我们就可以利用link将高级语言程序产生的.OBJ程序与汇编程序产生的.OBJ程序连接起来,形成一个.EXE的可执行文件。 7.1 混合编程 高级语言与汇编语言的连接应注意下面几个问题: 1.两种语言之间的控制传输问题 一般来说汇编语言程序作为高级语言的外部子程序,由高级语言通过函数或者过程进行调用汇编语言程序。 2.参数的传递 通常高级语言程序使用系统堆栈向汇编语言传递入口参数,汇编语言程序返回时使用CPU内部寄存器带回计算结果。此外还需要确定哪些寄存器是需要保留下来的,哪些是可以使用的。 7.1 混合编程 3.存储分配问题 高级语言不需要考虑存储分配问题,编译程序和连接程序会自动的进行存储分配。当汇编语言与高级语言程序连接时,就需要考虑这个问题了。这个问题处理起来不是很复杂,一般是将汇编语言作为一个程序模块,由连接程序决定其在存储器中的位置。 不同的高级语言与汇编语言的混合编程所采用的方法是不相同的。本章当中主要介绍C/C++与汇编的混合编程问题,在下面的几节当中,我们将分别介绍C/C++的嵌入式汇编、C/C++调用汇编的具体方法。 7.2 C/C++的嵌入式汇编 7.2.1在C/C++程序中嵌入汇编语句 7.2.2在嵌入式汇编中访问C/C++的数据 7.2.3汇编语言程序段编写C函数 7.2.4汇编程序调用C/C++函数 7.2 C/C++的嵌入式汇编 利用汇编语言程序设计的一种非常常见的方式是在高级语言(例如C/C++)程序内编写汇编函数。完成这一工作有几种不同的方式把汇编语言函数直接放到C/C++语言程序内。这种技术称为嵌入式汇编或内联汇编(Inline Assembly)。 7.2 C/C++的嵌入式汇编 在C/C++与汇编语言的混合编程过程中,C/C++调用汇编代码常有两种方法: (一)直接在C/C++程序中嵌入汇编语句 (二)C/C++调用汇编语言子程序 把汇编语言程序加入到C/C++程序中,必须使汇编程序和C/C++程序一样具有明确的边界、参数、返回值和局部变量,必须为汇编语言编写的程序段指定段名并进行定义,如果要在它们之间传递参数,则必须保证汇编程序用来传递参数的存储区和C/C++函数使用的存储区是一样的。 7.2 C/C++的嵌入式汇编 在C/C++程序中采用“_ASM”关键字输入汇编语言指令语句或语句段。在C或者C++中进行嵌入式汇编需要注意以下要点: (1)嵌入式汇编语言代码支持INTEL 80x86 CPU的全部32位指令系统,但是不能使用伪指令与宏指令语句,也不能使用结构(STRUCT)和记录(RECORD) (2)嵌入式汇编语言可以使用C++程序中标识符,包括标号、变量、函数名、常量、宏、类型名、结构和联合的成员以及类对象的公有(PUBLIC)成员变量等; 7.2 C/C++的嵌入式汇编 (3)嵌入式汇编语言代码中可以使用汇编语言格式的常数(131AH),也可以使用C++格式的常数(0X131A) (4)嵌入式汇编语言不能使用C++语言的运算符 (5)嵌入式汇编语言代码中的转移指令和C++中的GOTO语句都能跳转到汇编语言或者C++定义的标号 (6)嵌入式汇编语言定义的函数返回值的传递方法与预

文档评论(0)

1亿VIP精品文档

相关文档