跳转到内容

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编程的。

资源字符串

[编辑 | 编辑源代码]

运行时类型信息

[编辑 | 编辑源代码]

托管类型

[编辑 | 编辑源代码]

线程变量

[编辑 | 编辑源代码]
华夏公益教科书