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.编译和连接的过程与先前一致。