请看如下代码
procedure TForm1.Button1Click(Sender: TObject);
var
  packedsize:Integer;
  source:pointer;
  ReverseTable: array[0..255] of Byte;
  iCount:Integer;
begin
  for iCount:=0 to 255 do ReverseTable[iCount]:=iCount;  asm
         PUSH EBX
         LEA EBX, ReverseTable
         MOV ECX, [PackedSize]
         MOV EDX, [Source]
         MOV EDX, [EDX]
  @@1:
         MOV AL, [EDX]
         XLAT
         MOV [EDX], AL
         INC EDX
         DEC ECX
         JNZ @@1
         POP EBX
  end;end;原来这段代码在我的计算机(Intel P4,win Xp中文版)上编译没有一点问题,运行也正确,今天突然发现编译通不过,错误信息如下:
[Error] Unit1.pas(43): Invalid combination of opcode and operands不知为何?另外,这断代吗在其他的机器(win2k,winXp,机器的硬件环境与我的计算机几乎一样)上编译没有问题

解决方案 »

  1.   

    asm
             PUSH EBX
             LEA EBX, ReverseTable
             MOV ECX, [PackedSize]
             MOV EDX, [Source]
             MOV EDX, [EDX]
      @@1:
             MOV AL, [EDX]
             XLAT//该行出错,[Error] Unit1.pas(43): Invalid combination of opcode and operands
             MOV [EDX], AL
             INC EDX
             DEC ECX
             JNZ @@1
             POP EBX
      end;
      

  2.   

    是不是你的DELPHI版本变了?我见过D5到D6有的程序就要改汇编部分
      

  3.   

    有可能。那么,xlat可以用什么语句替代吗?许久不用汇编了,不明白xlat什么意思。