delphi - 交换字变量的字节(低/高)的过程

标签 delphi assembly basm

我有一个交换 Word 变量的字节(低/高)的过程(它与 System.Swap 函数执行相同的操作)。该过程在编译器优化关闭时有效,但在编译器优化打开时无效。 有人可以帮我解决这个问题吗?

procedure SwapWord(VAR TwoBytes: word);   
asm
  Mov EBX, TwoBytes
  Mov AX, [EBX]
  XCHG AL,AH
  Mov [EBX], AX
end;

最佳答案

最快:

function ReverseWord(w: word): word;
asm
   {$IFDEF CPUX64}
   mov rax, rcx
   {$ENDIF}
   xchg   al, ah
end;

如果您也想反转 DWORD:

function ReverseDWord(dw: cardinal): cardinal;
asm
  {$IFDEF CPUX64}
  mov rax, rcx
  {$ENDIF}
  bswap eax
end;

关于delphi - 交换字变量的字节(低/高)的过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5133938/

相关文章:

delphi - 如果我知道数据库中的行 ID,则在 TdbGrid 中选择一行

assembly - 尝试在程序集中使用div时出现浮点异常

assembly - ESP和EIP寄存器有什么区别

delphi - FLD指令x64位

delphi - Delphi XE/XE2 64位中的POPCNT

delphi - 如何用SSE2优化这个Delphi函数?

delphi - 对字符串列表进行排序:仅移动或交换项目

excel - 将数据从 DBGrid 导出到 Excel

database - 如何在 FireDAC 的 TFDPhysSQLiteDriverLink 组件中指定 SQLite 数据库文件?

c - 如何将 C 目标文件与汇编语言目标文件链接起来?