星奇永澄 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 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?