![]() |
1
5
初始化不是由C编译器生成的,它是C库的一部分(这使得为每个操作系统/处理器定制更容易)。 在Windows/Unixy系统上,所讨论的代码通常非常简单——通常会进行一些库初始化(打开stdin、stdout、stderr、设置时区等),设置环境,处理传递给main的命令行;捕捉main()的返回,以及调用exit等。 大多数C库中的启动代码都在一个名为crt0.c、crt1.c或类似文件(crt=c运行时)中。 在更原始或裸系统上,它还将设置堆栈和其他寄存器,并清除BSS数据区域——在这种情况下,它通常在汇编程序中(通常是crt0.s)。 这是指向BSD C启动代码的链接- link text Windows的mingw启动代码在crt1.c中。- http://mingw.cvs.sourceforge.net/viewvc/mingw/runtime/ |
![]() |
2
0
如果你愿意的话,你可以把你的主要部分写在汇编中。但是很多人希望将调试语句放在主目录中,而这些在C中比在ASM中更容易。 如果您在asm中编写main,那么您可能需要处理实际被调用的main,或者使用备用调用约定(特别是在Windows下)或者其他一些奇怪的事情,比如C编译器在为名为“main”的函数生成代码时自动为您处理这些事情。这样做,你也不必这么做。 |
![]() |
3
0
在调用main()之前,必须初始化堆栈、寄存器和程序的文件部分(数据、rodata、bss等)。C运行时库(CRT)提供了这个初始化。 CRT还提供在调用每个函数之前和之后执行的序言和尾声代码。序言和尾声代码更新堆栈和帧指针。 |
![]() |
asn · NASM 64位编程中遵循的Endianness 6 年前 |
![]() |
asn · 用于将数字相乘的Shift和add方法给出垃圾输出 6 年前 |
![]() |
asn · 64位NASM编程中的汇编编程基础 6 年前 |
![]() |
Programmer · 操作系统开发:切换到32位模式会破坏我的代码 6 年前 |
![]() |
RTC222 · CTypes返回值错误 7 年前 |
![]() |
ivaa14 · nasm程序打印的参数过多 7 年前 |