注册 登录
编程论坛 汇编论坛

关于scasb指令

ioriliao 发布于 2010-09-24 16:21, 1317 次点击
我用delphi写了一段查找字符位置的内联汇编代码,如下:
程序代码:
function CharPos(src:char; str:pchar):Integer;
var
    n:Integer;
Label
    Find,NotFind;
begin
    n:=Length(str);
    asm
        cld;
        lea edi, str;
        mov al,src;
        mov ecx,n;
        repnz scasb;
        jz Find;
        mov result,-1;
        jmp NotFind;
Find:
        mov result,ecx;
NotFind:
    end;
end;
调用:
i:=CharPos('e', 'hello word');
    ShowMessage(IntToStr(i));
结果却返回-1,请问问题出在哪了?

6 回复
#2
东海一鱼2010-09-24 17:28
1、
lea edi,str  应为 mov edi,str

2、
mov result, ecx
应为
mov eax,n
sub eax,ecx
mov result,eax  //或不写也行

#3
zklhp2010-09-24 17:34
以下是引用东海一鱼在2010-9-24 17:28:35的发言:

1、
lea edi,str  应为 mov edi,str

2、
mov result, ecx
应为
mov eax,n
sub eax,ecx
mov result,eax  //或不写也行

东海大大真牛啊 呵呵
#4
ioriliao2010-09-24 17:45
明白了,如果没有理解错的话应该是不要再取地址了,本身就是地址了。
谢谢东海大仙,哈哈。。。
#5
东海一鱼2010-09-24 17:48
以下是引用ioriliao在2010-9-24 17:45:54的发言:

明白了,如果没有理解错的话应该是不要再取地址了,本身就是地址了。
谢谢东海大仙,哈哈。。。
   孺子可教也!
#6
东海一鱼2010-09-24 17:50
以下是引用zklhp在2010-9-24 17:34:43的发言:


东海大大真牛啊 呵呵
   可别,折杀小生也。
   去年刚玩儿win32asm时,全仰仗您及诸位同好指点。再次感谢。
#7
ioriliao2010-09-24 17:52
回复 5楼 东海一鱼
呵呵。。。
1