操作码和操作数FPC的组合无效

时间:2014-05-30 22:48:02

标签: assembly opcode fpc operand operands

我正在尝试在汇编程序中实现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;

请帮帮我

1 个答案:

答案 0 :(得分:0)

20年前的16位汇编程序不能在FPC中使用。(*)通常一个使用字符串 sysutils 单元中的strpos,两者都是随FPC而来。

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

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