<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=Calling_Conventions</id>
	<title>Calling Conventions - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=Calling_Conventions"/>
	<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=Calling_Conventions&amp;action=history"/>
	<updated>2026-06-01T06:53:34Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://wiki.foofun.cn//index.php?title=Calling_Conventions&amp;diff=1066&amp;oldid=prev</id>
		<title>2022年3月30日 (三) 02:13 Zhang3</title>
		<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=Calling_Conventions&amp;diff=1066&amp;oldid=prev"/>
		<updated>2022-03-30T02:13:58Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;zh-Hans-CN&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;←上一版本&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2022年3月30日 (三) 02:13的版本&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l113&quot;&gt;第113行：&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;第113行：&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 另见 ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 另见 ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==外部链接===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=&lt;/ins&gt;==外部链接===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*[http://www.delorie.com/djgpp/doc/ug/asm/calling.html DJGPP FAQ: GCC calling conventions]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*[http://www.delorie.com/djgpp/doc/ug/asm/calling.html DJGPP FAQ: GCC calling conventions]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*[http://gul.ime.usp.br/Docs/docs/howto/other-formats/html/HOWTO-INDEX-html/Assembly-HOWTO-5.html Linux Assembly Language HOWTO chapter 5]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*[http://gul.ime.usp.br/Docs/docs/howto/other-formats/html/HOWTO-INDEX-html/Assembly-HOWTO-5.html Linux Assembly Language HOWTO chapter 5]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Zhang3</name></author>
	</entry>
	<entry>
		<id>http://wiki.foofun.cn//index.php?title=Calling_Conventions&amp;diff=1065&amp;oldid=prev</id>
		<title>Zhang3：创建页面，内容为“在C中调用外部函数，并从其他语言调用C函数，是OS编程中的常见问题，尤其是在其他语言是汇编的情况下。(译者注：本页其实讨论了汇编和C语言的互操作问题，但是对其它不同语言间的互操作问题也有一些启发，) 本页将主要关注后一种情况，但也会考虑其他语言。  这里描述的一些内容是由x86架构强加的，有些是GNUGCC工具链所特有的。 有些是可…”</title>
		<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=Calling_Conventions&amp;diff=1065&amp;oldid=prev"/>
		<updated>2022-03-30T02:13:05Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“在C中调用外部函数，并从其他语言调用C函数，是OS编程中的常见问题，尤其是在其他语言是汇编的情况下。(译者注：本页其实讨论了汇编和C语言的互操作问题，但是对其它不同语言间的互操作问题也有一些启发，) 本页将主要关注后一种情况，但也会考虑其他语言。  这里描述的一些内容是由x86架构强加的，有些是GNU&lt;a href=&quot;/index.php?title=GCC&quot; title=&quot;GCC&quot;&gt;GCC&lt;/a&gt;工具链所特有的。 有些是可…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;在C中调用外部函数，并从其他语言调用C函数，是OS编程中的常见问题，尤其是在其他语言是汇编的情况下。(译者注：本页其实讨论了汇编和C语言的互操作问题，但是对其它不同语言间的互操作问题也有一些启发，) 本页将主要关注后一种情况，但也会考虑其他语言。&lt;br /&gt;
&lt;br /&gt;
这里描述的一些内容是由x86架构强加的，有些是GNU[[GCC]]工具链所特有的。 有些是可配置的，你可以制定自己的GCC目标来支持不同的调用约定。 目前，本页面没有区分对待这些问题。&lt;br /&gt;
&lt;br /&gt;
==基础知识==&lt;br /&gt;
通常，可以将遵循C调用约定并在C标头中适当声明 (见下文) 的函数称为普通C函数。 遵循调用规则的大部分负担落在汇编程序上。&lt;br /&gt;
&lt;br /&gt;
== 备忘单 ==&lt;br /&gt;
&lt;br /&gt;
下面是常见调用约定的快速概述。 请注意，调用约定通常比这里表示的更复杂 （例如，大型结构如何返回？ 一个包含两个寄存器的结构怎么办？ 那如果是多个变量列表呢？)。 如果要确定，请查找各自的规格说明。 编写测试函数并使用gcc-S查看编译器如何生成代码可能会很有用，这可能会提示如何解释调用约定规范。&lt;br /&gt;
&lt;br /&gt;
{| {{wikitable}}&lt;br /&gt;
! 平台&lt;br /&gt;
! 返回值&lt;br /&gt;
! 参数寄存器&lt;br /&gt;
! 其他参数&lt;br /&gt;
! 栈对齐&lt;br /&gt;
! Scratch寄存器&lt;br /&gt;
! Preserved寄存器&lt;br /&gt;
! Call List&lt;br /&gt;
|-&lt;br /&gt;
| System V i386 || eax, edx || none || stack (right to left)&amp;lt;sup&amp;gt;[[#Note1|1]]&amp;lt;/sup&amp;gt; || || eax, ecx, edx || ebx, esi, edi, ebp, esp || ebp&lt;br /&gt;
|-&lt;br /&gt;
| System V X86_64&amp;lt;sup&amp;gt;[[#Note2|2]]&amp;lt;/sup&amp;gt; || rax, rdx || rdi, rsi, rdx, rcx, r8, r9 || stack (right to left)&amp;lt;sup&amp;gt;[[#Note1|1]]&amp;lt;/sup&amp;gt;  || 16-byte at call&amp;lt;sup&amp;gt;[[#Note3|3]]&amp;lt;/sup&amp;gt; || rax, rdi, rsi, rdx, rcx, r8, r9, r10, r11 || rbx, rsp, rbp, r12, r13, r14, r15 || rbp&lt;br /&gt;
|-&lt;br /&gt;
| Microsoft x64 || rax || rcx, rdx, r8, r9 || stack (right to left)&amp;lt;sup&amp;gt;[[#Note1|1]]&amp;lt;/sup&amp;gt;  || 16-byte at call&amp;lt;sup&amp;gt;[[#Note3|3]]&amp;lt;/sup&amp;gt; || rax, rcx, rdx, r8, r9, r10, r11 || rbx, rdi, rsi, rsp, rbp, r12, r13, r14, r15 || rbp&lt;br /&gt;
|-&lt;br /&gt;
| ARM || r0, r1 || r0, r1, r2, r3 || stack || 8 byte&amp;lt;sup&amp;gt;[[#Note4|4]]&amp;lt;/sup&amp;gt; || r0, r1, r2, r3, r12 || r4, r5, r6, r7, r8, r9, r10, r11, r13, r14 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small id=&amp;quot;Note2&amp;quot;&amp;gt;注1: 被调用的函数允许修改堆栈上的参数，并且调用者不得假定堆栈参数被保留。 调用方应该清理堆栈。&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small id=&amp;quot;Note2&amp;quot;&amp;gt;注2: 堆栈下方有一个128字节区域，称为 “红色区域（red zone）”，leaf函数可以在不增加 %rsp的情况下使用。 这需要内核根据用户空间中的信号将%rsp额外增加128字节。 这&amp;lt;em&amp;gt;不是&amp;lt;/em&amp;gt;由CPU完成的 - 如果中断使用当前堆栈 (与内核代码一样)，并且启用了红色区域 (默认)，则中断将静默破坏堆栈。 如果中断不遵守红色区域，请始终将-mno-red-zone传递给内核代码（甚至支持嵌入内核的libc库）。&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small id=&amp;quot;Note3&amp;quot;&amp;gt;注3：调用时栈是16字节对齐的。该调用推送%rip，因此如果被调用方推送%rbp，堆栈将再次以16字节对齐。&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small id=&amp;quot;Note4&amp;quot;&amp;gt;注4: 栈在函数的prologue/epilogue之外的任何时候都是8字节对齐的。&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== System V ABI ==&lt;br /&gt;
{{Main|System V ABI}}&lt;br /&gt;
&lt;br /&gt;
SystemV ABI是当今使用的主要ABI之一，在Unix系统中几乎是通用的。 这是&amp;lt;tt&amp;gt;i686-elf-gcc&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;x86_64-elf-gcc&amp;lt;/tt&amp;gt;等工具链使用的调用约定。&lt;br /&gt;
&lt;br /&gt;
==外部引用==&lt;br /&gt;
为了从C调用外函数，它必须具有正确的C原型。 因此，如果函数&amp;lt;tt&amp;gt;fee()&amp;lt;/tt&amp;gt;以C调用顺序接受参数fie、foe和fum，并返回一个整数值，那么相应的头文件应该具有以下原型：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int fee(int fie, char foe, double fum);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
同样，汇编代码中的全局变量必须声明为&amp;lt;tt&amp;gt;extern&amp;lt;/tt&amp;gt;：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern int frotz;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
汇编语言或其他语言中的C函数必须声明为适用于该语言。 例如，在NASM中，C函数&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int foo(int bar, char baz, double quux);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
会被声明为&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
extern foo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
此外，在大多数汇编语言中，要导出的函数或变量必须声明为全局的：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
global foo&lt;br /&gt;
global frotz&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Name Mangling==&lt;br /&gt;
&lt;br /&gt;
在某些目标格式([[a.out]])中，C函数的名称通过在其前面加上下划线(“_”)来automagically mangled。(译者注Name Mangling-名称打乱，是一种链接时防止重名的机制) 因此，要以这样的格式在汇编中调用C函数 &amp;lt;tt&amp;gt;foo()&amp;lt;/tt&amp;gt;，你必须将其定义为 &amp;lt;tt&amp;gt;extern _foo&amp;lt;/tt&amp;gt;，而不是 &amp;lt;tt&amp;gt;extern foo&amp;lt;/tt&amp;gt;。 此要求不适用于大多数现代格式，如[[COFF]、[[PE]]和[[ELF]]。&lt;br /&gt;
&lt;br /&gt;
C++的name mangling 要复杂得多，同时C++编译器也将参数列表中的类型信息编码到符号中。 (这是实现C++中的函数重载的首要基础。) Binutils包包含工具&amp;lt;tt&amp;gt;c++filt&amp;lt;/tt&amp;gt;，可用于确定正确的损坏（mangled）名称。&lt;br /&gt;
&lt;br /&gt;
==寄存器==&lt;br /&gt;
通用寄存器&amp;lt;tt&amp;gt;EBX&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;ESI&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;EDI&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;EBP&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;DS&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;ES&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;SS&amp;lt;/tt&amp;gt;, 必须由被调用的函数保存。 如果使用它们，必须先保存它们，然后再恢复。 相反, &amp;lt;tt&amp;gt;EAX&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;EDX&amp;lt;/tt&amp;gt; 用于返回值，因此不应保留。 被调用函数不需要保存其他寄存器，但如果调用函数使用到它们，则调用函数应在调用之前保存它们，并在调用之后恢复。&lt;br /&gt;
&lt;br /&gt;
==传递函数参数==&lt;br /&gt;
GCC/x86在堆栈上传递函数参数。 这些参数的推送顺序与参数列表中的顺序相反。 此外，由于x86保护模式堆栈操作是对32位值进行操作，因此即使实际值小于完整的32位值，这些值也始终作为32位值推送。 因此，对于函数 &amp;lt;tt&amp;gt;foo()&amp;lt;/tt&amp;gt;，首先将 &amp;lt;tt&amp;gt;quux&amp;lt;/tt&amp;gt; (48位FP值) 的值作为两个32位值 (低32位值) 推送 ； &amp;lt;tt&amp;gt;baz&amp;lt;/tt&amp;gt;的值被推送到32位值中的第一个字节；最后，&amp;lt;tt&amp;gt;bar&amp;lt;/tt&amp;gt;被作为32位值推送。&lt;br /&gt;
&lt;br /&gt;
要将参数传递给C函数，调用函数必须推送如上所述参数值。 因此，要从 [[NASM]] 汇编程序调用foo()，你可以做这样的事情&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
push eax   ; low 32-bit of quux&lt;br /&gt;
push edx   ; high 32-bit of quux&lt;br /&gt;
push bl    ; baz&lt;br /&gt;
push ecx   ; bar&lt;br /&gt;
call foo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==访问函数参数==&lt;br /&gt;
在GCC/x86 C调用约定中，任何接受形参的函数都应该做的第一件事是推送 &amp;lt;tt&amp;gt;EBP&amp;lt;/tt&amp;gt;的值(调用函数的帧基指针)，然后将&amp;lt;tt&amp;gt;ESP&amp;lt;/tt&amp;gt;的值复制到&amp;lt;tt&amp;gt;EBP&amp;lt;/TT&amp;gt;。 这将设置函数自己的框架指针，该指针用于跟踪参数和 (在C中或在任何适当可重入（reentrant）的汇编代码中) 局部变量。&lt;br /&gt;
&lt;br /&gt;
要访问C函数传递的参数，需要使用&amp;lt;tt&amp;gt;EBP&amp;lt;/tt&amp;gt;一个等于4*（n+2）的偏移量，其中n是参数列表中参数的编号（不是按其推送顺序的编号），索引为零。 +2是调用函数保存的帧指针和返回指针的附加偏移量(由 &amp;lt;tt&amp;gt;CALL&amp;lt;/tt&amp;gt;自动推送，由 &amp;lt;tt&amp;gt;RET&amp;lt;/tt&amp;gt;弹出)。&lt;br /&gt;
&lt;br /&gt;
因此，在函数 &amp;lt;tt&amp;gt;fee&amp;lt;/tt&amp;gt; 中，将 &amp;lt;tt&amp;gt;fie&amp;lt;/tt&amp;gt; 移动到 &amp;lt;tt&amp;gt;EAX&amp;lt;/tt&amp;gt;，&amp;lt;tt&amp;gt;foe&amp;lt;/tt&amp;gt; 移动到 &amp;lt;tt&amp;gt;BL&amp;lt;/tt&amp;gt;，然后 &amp;lt;tt&amp;gt;fum&amp;lt;/tt&amp;gt; 进入 &amp;lt;tt&amp;gt;EAX&amp;lt;/tt&amp;gt; 和 &amp;lt;tt&amp;gt;EDX&amp;lt;/tt&amp;gt;，你将在NASM中这样写:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
mov ecx, [ebp + 8]  ; fie&lt;br /&gt;
mov bl,  [ebp + 12] ; foe&lt;br /&gt;
mov edx, [ebp + 16] ; low 32-bit of fum&lt;br /&gt;
mov eax, [ebp + 20] ; high 32-bit of fum&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
如前所述，GCC中的返回值是使用&amp;lt;tt&amp;gt;EAX&amp;lt;/tt&amp;gt;和&amp;lt;tt&amp;gt;EDX&amp;lt;/tt&amp;gt;传递的。 如果值超过64位，则必须将其作为指针传递。&lt;br /&gt;
&lt;br /&gt;
== 另见 ==&lt;br /&gt;
==外部链接===&lt;br /&gt;
*[http://www.delorie.com/djgpp/doc/ug/asm/calling.html DJGPP FAQ: GCC calling conventions]&lt;br /&gt;
*[http://gul.ime.usp.br/Docs/docs/howto/other-formats/html/HOWTO-INDEX-html/Assembly-HOWTO-5.html Linux Assembly Language HOWTO chapter 5]&lt;br /&gt;
*http://files.osdev.org/mirrors/geezer/osd/libc/index.htm&lt;br /&gt;
&lt;br /&gt;
[[Category:ABI]]&lt;br /&gt;
[[Category:C]]&lt;br /&gt;
[[de:Aufrufkonventionen]]&lt;/div&gt;</summary>
		<author><name>Zhang3</name></author>
	</entry>
</feed>