c和汇编混编中,c中输入一个字符串,调用汇编子程序,为什么比较结果一直是未找到? 40C

int showfind()
{
int pos;
int length;
char name[10];
printf("请输入您想要查询的商品名称:");
scanf_s("%s", name, sizeof(name));
getchar();
length = strlen(name);
pos = findgood(name,length);
return pos;
}

void nofind()
{
printf("未查找到该商品!");
getchar();
putchar('\n');
return;
}
pos = showfind();
if (pos == -1)
{
nofind();
break;
}

        .data

good struct
goodsname DB 10dup(0)
inprice DD 0
saleprice DD 0
number DD 0
soldnumber DD 0
profitrate DD 0
good ends

c1 good <'pen',1,2,10,5,0>
c2 good <'pencil',2,3,10,8,0>
c3 good <'book',10,20,100,51,0>
;子程序名:findgood
;功能:查找一件商品的位置
;入口参数:goodname:DWORD
;出口参数:EAX——商品所在位置下标
.386
findgood PROC C goodname:ptr byte
;PUSH EBP
;mov ebp,esp
;PUSH EBX
;PUSH ECX
;PUSH ESI;现场保护
;PUSH EDI
;PUSH ES

     ;MOV EAX,DS
     ;MOV ES,EAX
     MOV EBX,0;初始化位置
     mov edi,[ebp+8]
     LOOP1:
     mov esi,ebx
     imul esi,goodnum
     mov esi,offset c1.goodsname
     push esi
     invoke strcmp,esi,edi
     ADD ESP,4


     push edi
     pop edi
     cmp eax,0
     JNE XUN1
     JMP XUN2


     XUN1:
     INC EBX
     CMP EBX,goodnum
     JNE LOOP1
     MOV EBX,-1
     JMP XUN2

     XUN2:
     MOV EAX,EBX
     ;POP ES
     ;POP EDI
     ;POP ESI
     ;POP ECX
     ;POP EBX

     ;mov esp,ebp
     ;POP EBP;现场恢复
     RET

    代码如上,输入pen也是未找到,该怎么解决?求大佬gao'zhi

1个回答

你的汇编怎么编译的我不是很清楚,你可以做一个简单的实验,
不要放任何实质的代码,直接返回一个数字,看你主程序能不能得到,如果不能,就是你汇编调用方式不对。
如果能得到正确的返回值,那么说明是你汇编代码本身有逻辑bug。这种情况,可以用vc++的汇编调试器调试下你的代码。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问