上次Delphi做的asm内嵌过程/函数格式是:
procedure ProcName(...);
asm
...
end;
对这种过程/函数,整个由asm写成。内嵌asm还有一种常见用法,
就是在程序局部调用asm:
function ByteToHex(Src: Byte): String;
begin
SetLength(Result, 2);
asm
MOV EDI, [Result]
MOV EDI, [EDI]
MOV AL, Src
MOV AH, AL // Save to AH
SHR AL, 4 // Output High 4 Bits
ADD AL, '0'
CMP AL, '9'
JBE @@OutCharLo
ADD AL, 'A'-'9'-1
@@OutCharLo:
AND AH, $f
ADD AH, '0'
CMP AH, '9'
JBE @@OutChar
ADD AH, 'A'-'9'-1
@@OutChar:
STOSW
end;
end;
该子程序可以实现把一字节的Src转换为16进制形式的字符串。刚好
一位站友有这样的问题,够快了吧? :)
当然,最快的方法还不是这个,想更快吗?拉拉滚动条,看下面:
用查表法!512个字节的表,速度最快! :)
博客介绍了Delphi中asm内嵌过程/函数的两种用法,重点展示了将一字节转换为十六进制字符串的函数。给出了通过asm代码实现转换的子程序,还提到更快的方法是使用查表法,用512个字节的表可提升速度。
1014

被折叠的 条评论
为什么被折叠?



