标题:[求助] 在borland c++ 3.1 中c调用汇编的问题
只看楼主
hulongmao
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-7-21
 问题点数:0 回复次数:4 
[求助] 在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 汇编 
2006-07-21 09:59
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
得分:0 
以下是引用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试试看


我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2006-07-21 10:04
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
得分:0 

不好意思,前面说错了,其实你想实现的是两个数的交换吧?不要用框架指针的其实,我给你重新写了段汇编。
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


我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2006-07-21 10:10
lhyanlh
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2006-7-11
得分:0 
a
没问题啊?我编译是好的!执行结果a 1 b 2
a 2 b 1
2006-07-21 10:59
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
得分:0 
不知道为什么我这里编译不了,所以重新写了个。

我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2006-07-21 11:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-79484-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.009931 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved