星奇永澄 2018-10-28 09:21 采纳率: 0%
浏览 496
已结题

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

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条回答 默认 最新

  • threenewbee 2018-10-28 17:00
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器