--------------------Configuration: 12 - Win32 Debug--------------------
Performing Custom Build Step on .\1.asm
Microsoft (R) Macro Assembler Version 6.11
Copyright (C) Microsoft Corp 1981-1993. All rights reserved.
warning A4017: invalid command-line option : /nologo/c/coff
Assembling: .\1.asm
Invalid keyboard code specified
Microsoft (R) Segmented Executable Linker Version 5.31.009 Jul 13 1992
Copyright (C) Microsoft Corp 1984-1992. All rights reserved.
Object Modules [.obj]: 1.obj
Run File [1.exe]: "1.exe"
List File [nul.map]: NUL
Libraries [.lib]:
Definitions File [nul.def]:
LINK : warning L4021: no stack segment
LINK : warning L4038: program has no starting address
Compiling...
2.C
Linking...
Invalid keyboard code specified
Microsoft (R) Segmented Executable Linker Version 5.31.009 Jul 13 1992
Copyright (C) Microsoft Corp 1984-1992. All rights reserved.
LINK : fatal error L1022: response line too long
Error executing link.exe.
12.exe - 1 error(s), 3 warning(s)
14 个解决方案
#1
up
#2
用VC内嵌汇编
#3
ML是32位的
LINK是16位的??
LINK是16位的??
#4
贴出来好吗,一起分析一下,呵呵
#5
是啊,拿出来,大家一起看看吧!
#6
这是一个同学问我的,主要是用汇编实现一个排序的子程序,然后在c里面调用该函数。
/*************************************************/
/******2.c文件<我在vc编译的,但是文件是.c的*******/
/*************************************************/
#include<stdio.h>
extern void sort2(int array[]);
void sort1 (int array[],int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++) {
k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k]) k=j;
t=array[k];array[k]=array[i];array[i]=t;}
}
main()
{
int a[10],i;
printf("Please enter the first array\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort1(a,10);
printf("the sorted array:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n ");
printf("Please enter the second array\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort2(a);
printf("using asm,the sorted array\n :");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n ");
}
/**************************************************/
下面的是汇编程序《我觉得程序是没问题的了》
.MODEL SMALL ,C
.CODE
PUBLIC _SORT2
_SORT2 PROC NEAR
PUSH SI
PUSH BX
PUSH AX
PUSH DI
MOV CX,10
MOV SI,SP
LOOP1:
MOV DI,CX
MOV BX,0
LOOP2:
MOV AX,[BX+SI]
CMP AX,[BX+SI+2]
JGE CONTINUE
XCHG AX,[BX+SI+2]
MOV [BX+SI],AX
CONTINUE:
ADD BX,2
LOOP LOOP2
MOV CX,DI
LOOP LOOP1
POP DI
POP AX
POP BX
POP SI
RET
_SORT2 ENDP
END
}
/*************************************************/
/******2.c文件<我在vc编译的,但是文件是.c的*******/
/*************************************************/
#include<stdio.h>
extern void sort2(int array[]);
void sort1 (int array[],int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++) {
k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k]) k=j;
t=array[k];array[k]=array[i];array[i]=t;}
}
main()
{
int a[10],i;
printf("Please enter the first array\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort1(a,10);
printf("the sorted array:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n ");
printf("Please enter the second array\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort2(a);
printf("using asm,the sorted array\n :");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n ");
}
/**************************************************/
下面的是汇编程序《我觉得程序是没问题的了》
.MODEL SMALL ,C
.CODE
PUBLIC _SORT2
_SORT2 PROC NEAR
PUSH SI
PUSH BX
PUSH AX
PUSH DI
MOV CX,10
MOV SI,SP
LOOP1:
MOV DI,CX
MOV BX,0
LOOP2:
MOV AX,[BX+SI]
CMP AX,[BX+SI+2]
JGE CONTINUE
XCHG AX,[BX+SI+2]
MOV [BX+SI],AX
CONTINUE:
ADD BX,2
LOOP LOOP2
MOV CX,DI
LOOP LOOP1
POP DI
POP AX
POP BX
POP SI
RET
_SORT2 ENDP
END
}
#7
我是在vc下编译的
我把汇编的函数的文件1.asm添加到文件2.c所在的工程里面。
然后设置1.asm的自定义编译:
命令:ML.exe /nologo /c "-Fo$(IntDir)\$(InputName).obj" "$(InputPath)"
输出:$(IntDir)\$(InputName).obj
编译结果:
Deleting intermediate files and output files for project '12 - Win32 Debug'.
--------------------Configuration: 12 - Win32 Debug--------------------
Performing Custom Build Step on .\1.asm
Assembling: .\1.asm
Compiling...
2.C
Linking...
Invalid keyboard code specified
Microsoft (R) Segmented Executable Linker Version 5.31.009 Jul 13 1992
Copyright (C) Microsoft Corp 1984-1992. All rights reserved.
LINK : fatal error L1022: response line too long
Error executing link.exe.
12.exe - 1 error(s), 0 warning(s)
************************************************
这个什么意思:
LINK : fatal error L1022: response line too long
我把汇编的函数的文件1.asm添加到文件2.c所在的工程里面。
然后设置1.asm的自定义编译:
命令:ML.exe /nologo /c "-Fo$(IntDir)\$(InputName).obj" "$(InputPath)"
输出:$(IntDir)\$(InputName).obj
编译结果:
Deleting intermediate files and output files for project '12 - Win32 Debug'.
--------------------Configuration: 12 - Win32 Debug--------------------
Performing Custom Build Step on .\1.asm
Assembling: .\1.asm
Compiling...
2.C
Linking...
Invalid keyboard code specified
Microsoft (R) Segmented Executable Linker Version 5.31.009 Jul 13 1992
Copyright (C) Microsoft Corp 1984-1992. All rights reserved.
LINK : fatal error L1022: response line too long
Error executing link.exe.
12.exe - 1 error(s), 0 warning(s)
************************************************
这个什么意思:
LINK : fatal error L1022: response line too long
#8
帮你UP!
#9
.c输出的是32位目标码
.asm输出的是16位的目标码
所以......
.asm输出的是16位的目标码
所以......
#10
WIN32 要用 .model flat
#11
汇编代码有些问题的. 首先 SORT2 应该是 sort2, 而且编译时还要加上保持大小写状态的选项. 如果是用 Masm6.x 编译的话, 由于 .model c 的缘故, 前面不能有下划线的, 否则最后就成了 __sort2, 前面有两个下划线.
MOV SI,SP
LOOP1:
MOV DI,CX
MOV BX,0
LOOP2:
MOV AX,[BX+SI]
...
这里的 SI 并没有能指向那个数组, 应该是: mov si, [sp+0ah] , 但 sp 不被支持间接寻址的, 所以一般是使用用 bp, 这样的话, 那个 0ah 可能还需要再调整
MOV SI,SP
LOOP1:
MOV DI,CX
MOV BX,0
LOOP2:
MOV AX,[BX+SI]
...
这里的 SI 并没有能指向那个数组, 应该是: mov si, [sp+0ah] , 但 sp 不被支持间接寻址的, 所以一般是使用用 bp, 这样的话, 那个 0ah 可能还需要再调整
#12
可是还是不行啊。
************************************************
这个什么意思:
LINK : fatal error L1022: response line too long
************************************************
这个什么意思:
LINK : fatal error L1022: response line too long
#13
"如果是用 Masm6.x 编译的话, 由于 .model c 的缘故, 前面不能有下划线的, 否则最后就成了 __sort2, 前面有两个下划线. " 是对的
#14
win32 程序只有一种内存模式,就是flat模式,你用small模式怎么行??
#1
up
#2
用VC内嵌汇编
#3
ML是32位的
LINK是16位的??
LINK是16位的??
#4
贴出来好吗,一起分析一下,呵呵
#5
是啊,拿出来,大家一起看看吧!
#6
这是一个同学问我的,主要是用汇编实现一个排序的子程序,然后在c里面调用该函数。
/*************************************************/
/******2.c文件<我在vc编译的,但是文件是.c的*******/
/*************************************************/
#include<stdio.h>
extern void sort2(int array[]);
void sort1 (int array[],int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++) {
k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k]) k=j;
t=array[k];array[k]=array[i];array[i]=t;}
}
main()
{
int a[10],i;
printf("Please enter the first array\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort1(a,10);
printf("the sorted array:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n ");
printf("Please enter the second array\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort2(a);
printf("using asm,the sorted array\n :");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n ");
}
/**************************************************/
下面的是汇编程序《我觉得程序是没问题的了》
.MODEL SMALL ,C
.CODE
PUBLIC _SORT2
_SORT2 PROC NEAR
PUSH SI
PUSH BX
PUSH AX
PUSH DI
MOV CX,10
MOV SI,SP
LOOP1:
MOV DI,CX
MOV BX,0
LOOP2:
MOV AX,[BX+SI]
CMP AX,[BX+SI+2]
JGE CONTINUE
XCHG AX,[BX+SI+2]
MOV [BX+SI],AX
CONTINUE:
ADD BX,2
LOOP LOOP2
MOV CX,DI
LOOP LOOP1
POP DI
POP AX
POP BX
POP SI
RET
_SORT2 ENDP
END
}
/*************************************************/
/******2.c文件<我在vc编译的,但是文件是.c的*******/
/*************************************************/
#include<stdio.h>
extern void sort2(int array[]);
void sort1 (int array[],int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++) {
k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k]) k=j;
t=array[k];array[k]=array[i];array[i]=t;}
}
main()
{
int a[10],i;
printf("Please enter the first array\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort1(a,10);
printf("the sorted array:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n ");
printf("Please enter the second array\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort2(a);
printf("using asm,the sorted array\n :");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n ");
}
/**************************************************/
下面的是汇编程序《我觉得程序是没问题的了》
.MODEL SMALL ,C
.CODE
PUBLIC _SORT2
_SORT2 PROC NEAR
PUSH SI
PUSH BX
PUSH AX
PUSH DI
MOV CX,10
MOV SI,SP
LOOP1:
MOV DI,CX
MOV BX,0
LOOP2:
MOV AX,[BX+SI]
CMP AX,[BX+SI+2]
JGE CONTINUE
XCHG AX,[BX+SI+2]
MOV [BX+SI],AX
CONTINUE:
ADD BX,2
LOOP LOOP2
MOV CX,DI
LOOP LOOP1
POP DI
POP AX
POP BX
POP SI
RET
_SORT2 ENDP
END
}
#7
我是在vc下编译的
我把汇编的函数的文件1.asm添加到文件2.c所在的工程里面。
然后设置1.asm的自定义编译:
命令:ML.exe /nologo /c "-Fo$(IntDir)\$(InputName).obj" "$(InputPath)"
输出:$(IntDir)\$(InputName).obj
编译结果:
Deleting intermediate files and output files for project '12 - Win32 Debug'.
--------------------Configuration: 12 - Win32 Debug--------------------
Performing Custom Build Step on .\1.asm
Assembling: .\1.asm
Compiling...
2.C
Linking...
Invalid keyboard code specified
Microsoft (R) Segmented Executable Linker Version 5.31.009 Jul 13 1992
Copyright (C) Microsoft Corp 1984-1992. All rights reserved.
LINK : fatal error L1022: response line too long
Error executing link.exe.
12.exe - 1 error(s), 0 warning(s)
************************************************
这个什么意思:
LINK : fatal error L1022: response line too long
我把汇编的函数的文件1.asm添加到文件2.c所在的工程里面。
然后设置1.asm的自定义编译:
命令:ML.exe /nologo /c "-Fo$(IntDir)\$(InputName).obj" "$(InputPath)"
输出:$(IntDir)\$(InputName).obj
编译结果:
Deleting intermediate files and output files for project '12 - Win32 Debug'.
--------------------Configuration: 12 - Win32 Debug--------------------
Performing Custom Build Step on .\1.asm
Assembling: .\1.asm
Compiling...
2.C
Linking...
Invalid keyboard code specified
Microsoft (R) Segmented Executable Linker Version 5.31.009 Jul 13 1992
Copyright (C) Microsoft Corp 1984-1992. All rights reserved.
LINK : fatal error L1022: response line too long
Error executing link.exe.
12.exe - 1 error(s), 0 warning(s)
************************************************
这个什么意思:
LINK : fatal error L1022: response line too long
#8
帮你UP!
#9
.c输出的是32位目标码
.asm输出的是16位的目标码
所以......
.asm输出的是16位的目标码
所以......
#10
WIN32 要用 .model flat
#11
汇编代码有些问题的. 首先 SORT2 应该是 sort2, 而且编译时还要加上保持大小写状态的选项. 如果是用 Masm6.x 编译的话, 由于 .model c 的缘故, 前面不能有下划线的, 否则最后就成了 __sort2, 前面有两个下划线.
MOV SI,SP
LOOP1:
MOV DI,CX
MOV BX,0
LOOP2:
MOV AX,[BX+SI]
...
这里的 SI 并没有能指向那个数组, 应该是: mov si, [sp+0ah] , 但 sp 不被支持间接寻址的, 所以一般是使用用 bp, 这样的话, 那个 0ah 可能还需要再调整
MOV SI,SP
LOOP1:
MOV DI,CX
MOV BX,0
LOOP2:
MOV AX,[BX+SI]
...
这里的 SI 并没有能指向那个数组, 应该是: mov si, [sp+0ah] , 但 sp 不被支持间接寻址的, 所以一般是使用用 bp, 这样的话, 那个 0ah 可能还需要再调整
#12
可是还是不行啊。
************************************************
这个什么意思:
LINK : fatal error L1022: response line too long
************************************************
这个什么意思:
LINK : fatal error L1022: response line too long
#13
"如果是用 Masm6.x 编译的话, 由于 .model c 的缘故, 前面不能有下划线的, 否则最后就成了 __sort2, 前面有两个下划线. " 是对的
#14
win32 程序只有一种内存模式,就是flat模式,你用small模式怎么行??