0

我正在尝试在汇编程序中实现一个函数 StrPos。我有 64 位处理器和 FPC。当我编译时显示以下错误:

    function StrPos(Str1, Str2: PChar): LONGINT; assembler;
    asm
        PUSH    DS
        CLD
        XOR AL,AL
        LES EDI,Str2 // error: asm: [les reg32, reg32] Invalid combination of opcode and operands
        MOV CX,0FFFFH
        REPNE   SCASB
        NOT CX
        DEC CX
        JE  @@2
        MOV DX,CX
        MOV BX,ES
        MOV DS,BX
        LES EDI,Str1 // error: asm: [les reg32, reg32] Invalid combination of opcode and operands
        // .........
    end;

请帮我

4

1 回答 1

0

20岁的16位汇编器不能用在FPC上。(*) 一般使用Strings中的strpos或者sysutils单元,这两种都是FPC自带的。

对于特殊情况,可以通过使用 system.indexbyte() 来消除对汇编程序的需求,这是一种基本的 scasb 可移植内在函数。

(*) 严格来说,主干中有一个 16 位 FPC 后端,但我猜你对此不感兴趣,因为它也不会在 64 位操作系统上运行。

于 2014-05-31T16:03:25.800 回答