C与dBASE(Foxbase)和汇编语言接口-自动产生汇编语言的框架程序

 Turbo C/Turbo C++/Borland C++提供了一种自动产生汇编语言框架的方法,编程者只需把主干汇编程序添加到该框架的合适地方即可,而且通过此方法建立的汇编接口程序一定能正确地与C主程序相连接。下面以先前程序为例进行说明。

 a.编写C程序框架,该框架用于生成汇编语言程序的框架如下:

 void add-up(int a,int b)

{

 

}

 b.利用Turbo C/Trubo C++的命令行编译程序TCC.exe或Borland C++的命令行编译程序BCC.EXE的设置开关-S,来产生一个汇编接口框架程序。如执行BCC-S add-up.c后,将产生汇编语言框架程序add-up.asm,格式如下:

#ifndef ?? version

? debug macro

 endm

publicdll marco name

 public name

 endm

$comm macro name,dist,size,count

 comm dist name;BYTE;count* size

 endm

 else

$comm macro name,dist,size,count

 comm dist name[size];BYTE;count

 endm

 endif

 ? debug S "add_up.c"

 ? debug C E919999B000086164645F7570E63

_TEXT segment byte public 'CODE'

_TEXT ends

 

DGROUP group _DATA,_BSS

 assume cs:_TEXT,ds:DGROUP

_DATA segment word public 'DATA'

 

_DATA segment word public 'DATA'

d@ label byte

d@w label word

_DATA ends

 

_BSS segment word public 'BSS'

d@ label byte

d@w label word

_BSS ends

 

_TEXT segment byte public 'CODE'

 ;

 ;void add_up(int a,int b)

 ;

  assume cs:_TEXT

 _add_up proc near

  push bp

  mov bp,sp

 ;

 ;{

 ;}

 ;

  pop bp

  ret

_add_up endp

 ?debug C E9

_TEXT ends

 

_DATA segment word public 'DATA'

s@ label byte

_DATA ends

 

_TEXT segment byte public 'CODE'

_TEXT ends

 public _add_up

 end

 c.在上一步产生的框架式汇编语言程序中,只要在左大括号”{”和右大括号“}”外,插入实现特定功能的汇编语句和有关进栈、退栈以及参数传递的语句即可。实现示例程序功能的汇编语言主干部分,添加到框架中后,即生成一个完整的汇编接口模块。格式如下:

#ifndef ?? version

? debug macro

 endm

publicdll marco name

 public name

 endm

$comm macro name,dist,size,count

 comm dist name;BYTE;count* size

 endm

 else

$comm macro name,dist,size,count

 comm dist name[size];BYTE;count

 endm

 endif

 ? debug S "add_up.c"

 ? debug C E919999B000086164645F7570E63

_TEXT segment byte public 'CODE'

_TEXT ends

 

DGROUP group _DATA,_BSS

 assume cs:_TEXT,ds:DGROUP

_DATA segment word public 'DATA'

 

_DATA segment word public 'DATA'

d@ label byte

d@w label word

_DATA ends

 

_BSS segment word public 'BSS'

d@ label byte

d@w label word

_BSS ends

 

_TEXT segment byte public 'CODE'

 ;

 ;void add_up(int a,int b)

 ;

  assume cs:_TEXT

 _add_up proc near

  push bp

  mov bp,sp

 ;

 ;{

  mov ax,word ptr[bp+4]

  add ax,word ptr[bp+6]

 ;}

 ;

  pop bp

  ret

_add_up endp

 ?debug C E9

_TEXT ends

 

_DATA segment word public 'DATA'

s@ label byte

_DATA ends

 

_TEXT segment byte public 'CODE'

_TEXT ends

 public _add_up

 end

 d.编译和连接的过程与先前一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值