当前位置: 代码迷 >> C语言 >> [求助] 在borland c++ 3.1 中c调用汇编的问题
  详细解决方案

[求助] 在borland c++ 3.1 中c调用汇编的问题

热度:471   发布时间:2006-07-21 09:59:36.0
[求助] 在borland c++ 3.1 中c调用汇编的问题

我在borland c++ 3.1下做的一个作业,要求用c调用汇编。c程序是use-swap.c,汇编程序是swap.asm,分别
如下。


汇编程序swap.asm

.model small
.code
public _swap_values
_swap_values proc
push bp
mov bp,sp
sub sp,2
push si
push di
mov si,word ptr[bp+4]
mov di,word ptr[bp+6]
mov ax,word ptr[si]
mov word ptr[bp-2],ax
mov ax,word ptr[di]
mov word ptr[si],ax
mov ax,word ptr[bp-2]
mov word ptr[di],ax
pop di
pop si
mov sp,bp
pop bp
quit: ret
_swap_values endp
end


c程序use-swap.c

#include<stdio.h>
extern swap_values(int *a,int *b);
void main()
{
int a=1,b=2;
printf("Original values of a %d b %d \n",a,b);
swap_values(&a,&b);
printf("Swaped valued of a %d b %d\n",a,b);
}

二者都能编译通过,但放到一个工程sw里时出现错误:
Linking SW.EXE:
Linker Warning: No module definition file specified: using defaults
Linker Error: Undefined symbol swap_values(int near*,int near*) in module SWAPM.CPP
请问各位高手是怎么回事,如何解决?我将不胜感谢!

搜索更多相关的解决方案: borland  汇编  

----------------解决方案--------------------------------------------------------
以下是引用hulongmao在2006-7-21 9:59:36的发言:

我在borland c++ 3.1下做的一个作业,要求用c调用汇编。c程序是use-swap.c,汇编程序是swap.asm,分别
如下。


汇编程序swap.asm

.model small
.code
public _swap_values
_swap_values proc
push bp
mov bp,sp
sub sp,2
push si
push di
mov si,word ptr[bp+4]
mov di,word ptr[bp+6]
mov ax,word ptr[si]
mov word ptr[bp-2],ax
mov ax,word ptr[di]
mov word ptr[si],ax
mov ax,word ptr[bp-2]
mov word ptr[di],ax
pop di
pop si
mov sp,bp
pop bp
quit: ret
_swap_values endp
end


c程序use-swap.c

#include<stdio.h>
extern swap_values(int *a,int *b);
void main()
{
int a=1,b=2;
printf("Original values of a %d b %d \n",a,b);
swap_values(&a,&b);
printf("Swaped valued of a %d b %d\n",a,b);
}

二者都能编译通过,但放到一个工程sw里时出现错误:
Linking SW.EXE:
Linker Warning: No module definition file specified: using defaults
Linker Error: Undefined symbol swap_values(int near*,int near*) in module SWAPM.CPP
请问各位高手是怎么回事,如何解决?我将不胜感谢!


把红的那一句改成 _swap_values proc a : WORD, b : WORD试试看


----------------解决方案--------------------------------------------------------

不好意思,前面说错了,其实你想实现的是两个数的交换吧?不要用框架指针的其实,我给你重新写了段汇编。
PUBLIC _swap_values

.model small
.code

_swap_values PROC a : PTR WORD, b : PTR WORD
push ax
push bx
mov ax, [a]
mov bx, [b]
mov [b], ax
mov [a], bx
pop bx
pop ax
ret
_swap_values ENDP

END


----------------解决方案--------------------------------------------------------
a
没问题啊?我编译是好的!执行结果a 1 b 2
a 2 b 1
----------------解决方案--------------------------------------------------------
不知道为什么我这里编译不了,所以重新写了个。
----------------解决方案--------------------------------------------------------