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またはsysutilsユニットでstrpos を使用します。どちらも FPC に付属しています。

特殊なケースでは、基本的な scasb の移植性のある組み込み関数である system.indexbyte() を使用して、アセンブラーの必要性を取り除くことができます。

(*) 厳密に言えば、trunk には 16 ビット FPC バックエンドがありますが、64 ビット OS では動作しないため、これには関心がないと思います。

于 2014-05-31T16:03:25.800 に答える