高级语言调用汇编语言的接口规范

  • 内容
  • 评论
  • 相关

从高级语言中调用汇编过程时,需要解决一些常见的问题。

首先,一种语言使用的命名规范(naming convention)是指与变量和过程命名相关的规则和特性。比如,一个需要回答的重要问题是:汇编器或编译器会修改目标文件中的标识符名称吗?如果是,如何修改?

其次,段名称必须与高级语言使用的名称兼容。

第三,程序使用的内存模式(微模式、小描述、紧凑模式、中模式、大模式、巨模式,或平坦模式)决定了段大小(16 或 32 位),以及调用或引用是近(同一段内)还是远(不同段之间)。

调用规范

调用规范(calling convention)是指调用过程的底层细节。下面列出了需要考虑的细节信息:

  • 调用过程需要保存哪些寄存器
  • 传递参数的方法:用寄存器、用堆栈、共享内存,或者其他方法
  • 主调程序调用过程时,参数传递的顺序
  • 参数传递方法是传值还是传引用
  • 过程调用后,如何恢复堆栈指针
  • 函数如何向主调程序返回结果

命名规范与外部标识符

当从其他语言程序中调用汇编过程时,外部标识符必须与命名规范(命名规则)兼容。外部标识符(external identifier)是放在模块目标文件中的名称,链接器使得这些名称能够被其他程序模块使用。链接器解析对外部标识符的引用,但是仅适用于命名规范一致的情况。

例如,假设 C 程序 Main.c 调用外部过程 ArraySum。如下图所示,C 编译器自动保留大小写,并为外部名称添加前导下划线,将其修改为 _ArraySum:

本文标题:高级语言调用汇编语言的接口规范

本文地址:http://www.hosteonscn.com/5610.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注