C语言函数调用汇编语言函数.pdf

维普资讯

第 1卷 第 1期 石河子大学学报 (自然科学版) VoI_1 No 1

1997年 3月 JournalofShihe~University(NaturalScience) M ar. 1997

60C语言函数调用汇编语言函数

彭 军 弋 |C

(计算机科学系

提要 本文通过分析 TurboC的编译方法 .给出了C语 言调用外部汇编模块的方法。

关键词 编译 函数 模块 ,_、 :一 、 …

…将一。汇编殍言出 … 一凼耘凋,,u—~turbc.CL

C语言是现在比较流行的程序设计语言一它的许多优点是其它程序设计语言无法相比的.

但是在某些情况下需要使用C语言函数调用汇编语言函数,以便得到更’陕的速度,例如在编

写某些图形函数时,用C语言编写时显示速度很慢,而用汇编语言来编写时速度就快多了。本

文将介绍在 TurboC2.0环境下如何实现C语言调用独立的外部汇编模块 。

1 思路

首先利用 Turboc2.0提供的实用程序 tCC.exe,将 C语言源程序翻译 为等价的汇编程

序,通过分析这些汇编样l 了解TurboC的六种编译模式是如何进行编译的,然后按照不同

模式下的编译规则编写能被 c语言调用的汇编函数。

2 TurboC的编译模式

TurboC提供 六种不同的编译模式.以适应不同的编程需要,它们是 tiny(极小模式)、

small(小模式)eolnpact(紧缩模式)、medium(中模式)、large(大模式)、huge(巨模式)各种模

式下函数调用类型和数据指针类型缺省情况如表 1。

表 1 六种模式函数调用类型和数据指针类型

TurboC2.0提供了一个实用程序 tcc.exet此程序的功能之一是可 以将 C语言程序翻译

成与之等价的不同模式下的汇编程序一格式为:tcc s—mtJ—msj—mcl—mml—mIJ—mhc

源文件名。其中一mt:tiny模式.一ms}small模式 一mc:compact模式,一mm:medium模式,

一 ml:large模式,一mh:huge模式.生 成的汇编程 序文件名与 C源 文件名相 同,扩展符 为

收稿tt期 :1996一u一04

维普资讯

56 石河子大学学报 (自然科学版j 第 1卷

asm 刺用此程序可 分析六种模式是如何进行编译的。先编写如下的c语言程序 exam.c:

extern t;
externfunc();
inttl一 1,t2;
m ain(
. )
{intx,Y-s;
staticints1— 2.s2;
t2— 3;s2— 4;t一 5;x一 1O;y一 20;
s=sum (x.y);func(){)
intsum (Jutx.intv)
{intz;
—x+Y;return ;}

在命令行下执行 tcc—s—msexam.c,生成小模式下的汇编程序exam.asm.将此程序 中

的无用语句删除.相同的段合并后.得到如下的程序清单 :

l—TEXT segmentbytepublic’CODE’ ;代码段开始

2DGRoUP group— DATA .-- BSS
assumecs:一TEXT.ds: DGRoUP.ss:DGROUP
extrn — fuD.c:near :声明外部近调用函数 runeO
proe near ;定义函数 main(),且