打印

汇编转换成C程序

[复制链接]
3810|5
手机看帖
扫描二维码
随时随地手机跟帖
沙发
yingfeishu| | 2007-1-29 18:58 | 只看该作者

汇编语言与C语言的接口技术

                  汇编语言与C语言的接口技术
    汇编语言没有高级语言要占用较大的存储空间和较长的运行时间等缺点,它的运行速度快是高级语言所不能比拟的。可以说高级语言与汇编语言各有千秋。有时我们采用高级语言编程速度达不到要求,全部采用汇编语言编程工作量又大,此时可以采用"混合"编程,彼此相互调用,进行参数传递,共享数据结构及数据信息,是一种有效的编程方法。这种方法可以发挥各种语言的优势和特点,充分利用现有的多种实用程序、库程序等使软件的开发周期大大缩短。
1 高级语言与汇编语言的接口需要解决的问题
  1、需要说明和建立调用者与被调用者间的关系被调用的过程或函数应预先说明为外部类型,如汇编子程序,应用PUBLIC说明其可被外部模块引用;调用程序则应预先说明要引用的外部模块名。
2、参数传递问题在汇编子程序之间通常采用寄存器作为参数传递的工具,汇编语言与高级语言程序间的参数传递,一般采用堆栈来传递,即调用程序将参数依次压入堆栈中,当被转调用程序后,再从堆栈中依次弹出参数作为操作数使用。为此,必须了解各种语言的堆栈结构、生成方式和入栈方式等。BASIC、FORTRAN、PASCAL等语言其参数进栈顺序是与参数在参数表中出现的顺序相同,即从右到左;而C语言则相反。 
2 C语言与汇编语言的接口
2.1 C语言调用汇编子程序
●在C程序中使用关键字"ExTERn"对函数作显式说明。
●参数传递顺序是按其在参数表中出现的顺序的反序被压入堆栈中,即第一个参数最后进入堆栈,它在栈中的地址最低。
●对不同的存储模式(极小、小、紧凑、中、大和巨)要选用不同的汇编语言格式,如C程序为小模式,汇编用近过程,C程序为大模式,汇编用远过程。
●汇编程序取C的参数。远过程返回地址占四个字节,BP压入占二字节,所以第一个参数在BP+6所指向的单元。对于近过程第一个参数在BP+4所指向的单元。
●汇编程序中寄存器的保护。TuRboC允许子过程使用SI和DI存放局部变量,当寄存器变量多于二个时,多余部分会自动转到堆栈中存储。因此,汇编过程的格式为:
PUSH BP
MOV BP,SP
PUSH DI
PUSH SI
相关链接:http://study.feloo.com/computer/pro/masm/jiqiao/200505/33867.html

使用特权

评论回复
板凳
rockingliu| | 2007-1-29 19:19 | 只看该作者

FW

楼上的人家问的是asm to C!

使用特权

评论回复
地板
gyc198215| | 2007-1-30 08:56 | 只看该作者

HEHE,

估计LZ是做毕业设计偷懒自己不想编吧,告诉我以前也找过,哈哈

使用特权

评论回复
5
小小学者|  楼主 | 2007-1-30 09:46 | 只看该作者

Ai,KU::

  我对汇编不懂,但是我这儿有个汇编程序,我想改成C的程序,来了解一下如何实现的结果,请大家帮忙,有没有转换软件?

使用特权

评论回复
6
ceiwei| | 2007-1-31 16:11 | 只看该作者

我以前也有过类似的疑问,不过后来放弃了

好象我以前有本教材上面说可以把汇编包在C语言里,我记得不是很清楚了,你去网上找下吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

23

帖子

0

粉丝