我正在尝试在汇编程序中实现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;
请帮帮我
答案 0 :(得分:0)
20年前的16位汇编程序不能在FPC中使用。(*)通常一个使用字符串或 sysutils 单元中的strpos,两者都是随FPC而来。
对于特殊情况,可以通过使用system.indexbyte()删除对汇编程序的需求,system.indexbyte()是一个基本的scasb可移植内在函数。
(*)严格来说,在trunk中有一个16位FPC后端,但我猜你对此不感兴趣,因为它也不能在64位操作系统上运行。