摘要: 通过使用操作系统提供的系统调用,程序员就没必要编写直接控制硬件的程序了。 通过使用高级编程语言,有时甚至也无需考虑系统调用的存在。这是因为操作系统和高级编程语言能够使硬件抽象化。硬件抽象化的具体实例。代码清单 9-2 是用C 语言编写的往文件中写人字符串的应用。fopen()是用来打开文件的函数,f 阅读全文
posted @ 2023-02-13 22:11 叮铃铛铛 阅读(36) 评论(0) 推荐(0)
摘要: 操作系统的硬件控制功能,通常是通过一些小的函数集合体的形式来提供的。这些函数及调用函数的行为统称为系统调用,即应用对操作系统的功能进行调用(call)。 C 语言等高级编程语言并不依存于特定的操作系统。这是因为人们希望不管是 Windows还是 Linux,都能使用几乎相同的源代码。因此高级编程语言 阅读全文
posted @ 2023-02-13 21:49 叮铃铛铛 阅读(44) 评论(0) 推荐(0)
摘要: 制作应用的程序员们意识到一点:制作的不是硬件,而是利用操作系统功能的应用。 代码清单9-1 表示的是,在 Windows 操作系统下,用C语言制作一个具有表示当前时间功能的应用。time()是用来取得当前日期和时间的函数,printf() 是用来在显示器上显示字符串的函数。程序的运行结果如图 9-4 阅读全文
posted @ 2023-02-13 21:43 叮铃铛铛 阅读(31) 评论(0) 推荐(0)
摘要: 操作系统的原型:仅具有加载和运行功能的监控程序。 通过事先启动监控程序,程序员就可以根据需要的各种程序加载到内存中运行。如下图: 在利用监控程序编写程序的过程中,发现很多程序都要共通的部分。因此,基本的输入输出部分的程序就被追加到了监控程序中。初期的操作系统就这样诞生了(图 9-2 )。 为了方便程 阅读全文
posted @ 2023-02-13 21:38 叮铃铛铛 阅读(25) 评论(0) 推荐(0)
摘要: Q:编译器和解释器有什么不同?A:编译器是在运行前对所有源代码进行解释处理的。而解释器则是在运行时对源代码的内容一行一行地进行解释处理的。 Q:“分割编译”指的是什么?A:将整个程序分为多个源代码来编写,然后分别进行编译,最后链接成一个EXE文件。这样每个源代码都相对变短,便于程序管理。 Q:“Bu 阅读全文
posted @ 2023-02-13 21:29 叮铃铛铛 阅读(22) 评论(0) 推荐(0)
摘要: 当程序加载到内存后,还会生成栈和堆。栈是用来存储函数内部临时使用的变量(局部变量),以及函数调用时所用的参数的内存区域。堆是用来存储程序运行时的任意数据及对象的内存领域(图8-10)。 EXE文件中并不存在栈及堆的组。栈和堆需要的内存空间是在EXE文件加载到内存后开始运行时得到分配的。 内存中的程序 阅读全文
posted @ 2023-02-13 21:26 叮铃铛铛 阅读(44) 评论(0) 推荐(0)
摘要: 在程序运行时,虚拟的内存地址会转换成实际的内存地址。链接器会在EXE文件的开头,追加转换内存地址所需的必要信息。这个信息称为再配置信息。EXE文件的再配置信息,就成为了变量和函数的相对地址。相对地址表示的是相对于基点地址的偏移量,也就是相对距离。在源代码中,虽然变量及函数是在不同位置分散记述的,但在 阅读全文
posted @ 2023-02-13 21:16 叮铃铛铛 阅读(23) 评论(0) 推荐(0)
摘要: Windows以函数的形式为应用提供了各种功能。这些形式的函数称为API (应用程序接口)。例如,Samplel.c中调用的MessageBox0不是C语言的标准函数,而是Windows提供的API的一种。MessageBox()提供了显示消息框的功能。 Windows中,API的目标文件,并不是存 阅读全文
posted @ 2023-02-13 21:11 叮铃铛铛 阅读(34) 评论(0) 推荐(0)
摘要: 下图的错误消息表示的是无法解析Sample1.obj参照的外部符号。 外部符号是指其他目标文件中的变量或函数。sprintf及MessageBoxA是目标文件中sprintf及MessageBox()的名称。代码中记述的函数名同目标文件中的函数名有一些差异,不过大家只需把它理解成这是C编译器的规定即 阅读全文
posted @ 2023-02-13 20:52 叮铃铛铛 阅读(15) 评论(0) 推荐(0)
摘要: 编译器转换源代码后,就会生成本地文件。不过,本地文件是无法直接运行的。 为了得到可以运行的EXE文件,编译之后还需要进行“链接”处理。下面,就让我们使用Borland C++ Compiler5.5(以下称为Borland C++)来看一下编译和链接是如何进行的。 Borland C++的编译器是b 阅读全文
posted @ 2023-02-13 20:43 叮铃铛铛 阅读(43) 评论(0) 推荐(0)
摘要: 能够把C 语言等高级编程语言编写的源代码转换成本地代码的程序称为编译器。每个编写源代码的编程语言都需要其专用的编译器将 C语言编写的源代码转换成本地代码的编译器称为 C 编译器。 编译器首先读入代码的内容,然后再把源代码转换成本地代码编译器中就好像有一个源代码同本地代码的对应表。但实际上,仅仅靠对应 阅读全文
posted @ 2023-02-13 20:34 叮铃铛铛 阅读(32) 评论(0) 推荐(0)
摘要: Windows中EXE文件的程序内容,使用的就是本地代码。 用记事本打开有代码清单8-1的内容转换成本地代码得到的EXE文件(Samplel.exe),页面显示情况如图8-3所示。 上面本地代码内容是人类无法理解的。所以用C语言等编程语言来编写源代码,然后再将源代码转换成本地代码这一方法。 接下来, 阅读全文
posted @ 2023-02-13 20:28 叮铃铛铛 阅读(19) 评论(0) 推荐(0)
摘要: 代码清单8-1。这是一个用C语言记述的Windows程序。该程序运行后,会把123和456的平均值289.5显示在消息框(图8-1)中。 类似于代码清单8-1这样,用某种编程语言的程序就称为源代码,保存源代码的文件称为源文件。 代码清单8-1的源代码是无法直接运行的。这是因为,CPU能直接解析并运行 阅读全文
posted @ 2023-02-13 20:19 叮铃铛铛 阅读(25) 评论(0) 推荐(0)
摘要: 程序的运行环境中,存在着名为BIOS(Basic Input/Output System)的系统。BIOS存储在ROM中,是预先内置在计算机主机内部的程序。BIOS除了键盘、磁盘、显卡等基本控制程序外,还有启动“引导程序”的功能。引导程序是存储在启动驱动器起始区域的小程序。操作系统的启动驱动器一般是 阅读全文
posted @ 2023-02-13 20:10 叮铃铛铛 阅读(78) 评论(0) 推荐(0)