Pascal 编程/杂项
外观
最后一个与 Pascal 相关的标准发布于 1990 年,ISO 标准 7185“[标准] Pascal”,以及 ISO 标准 10206“扩展 Pascal”。但是自从IT 没有停止发展。几家编译器制造商继续通过各种扩展来扩展 Pascal,我们在这里介绍其中的一些。
自从TP 1.0 版本以来,就可以在 Pascal 源代码中包含汇编语言。这被称为内联汇编。虽然正常的 Pascal 代码用begin … end
框架包围,汇编语言可以用asm … end
框架包围。以下是一个可以使用 FPC 编译的示例
program asmDemo(input, output, stdErr);
{$ifNDef CPUx86_64}
{$fail only for x86_64}
{$endIf}
var
foo: int64;
begin
write('Enter an integer: ');
readLn(foo);
// This directive will tell FPC
// a certain assembly language style is used
// within the asm...end frame.
{$asmMode intel}
asm
mov rax, [foo] // rax ≔ foo^
// ensure foo is positive
test rax, rax // x ≟ 0
jns @is_positive // if ¬SF then goto is_positive
neg rax // rax ≔ −rax
@is_positive:
// NOTE: Here we assume the popcnt instruction
// was supported by the processor,
// but this is bad style.
// You ought to use the cpuid instruction
// (if available) in order to determine
// whether popcnt is available.
popcnt rax, rax // rax ≔ popCnt(rax)
mov [foo], rax // foo ≔ rax
// An array of strings after the asm-block closing ‘end’
// tells the compiler which registers have changed
// (you do not want to mess with the compiler’s understanding
// which registers mean what)
end ['rax'];
writeLn('Your number has a binary digital sum of ', foo, '.');
end.
如果你对数据有特殊的了解,而编译器生成的代码效率低下,编写内联汇编代码很有用。你可以尝试优化速度或大小,以减轻性能瓶颈。
所有,Delphi,FPC 以及 GPC 都支持asm
框架,但它们之间存在一些细微的差异。因此,我们参考编译器的文档,并且不要忘记这本书是关于Pascal编程的。
本节内容为空。请帮忙扩展它。 |
本节内容为空。请帮忙扩展它。 |
本节内容为空。请帮忙扩展它。 |
本节内容为空。请帮忙扩展它。 |